• c# 声音控制(转载)


          不能用控件,防止播放的时候出现延时,或者能够提供内存方法存放声音数据。
    目的就是能够十分准确的播放声音,不会出现声音的延迟现象。

    转自http://blog.csdn.net/jery_lee/archive/2004/08/06/67239.aspx

    [DllImport("Winmm.dll")]

          不能用控件,防止播放的时候出现延时,或者能够提供内存方法存放声音数据。
    目的就是能够十分准确的播放声音,不会出现声音的延迟现象。

    转自http://blog.csdn.net/jery_lee/archive/2004/08/06/67239.aspx

    [DllImport("Winmm.dll")]
    public static extern long PlaySound(string name,long module,long flag);
    [DllImport("winmm.dll")]
    private static extern long mciSendString(string lpstrCommand,string lpstrReturnString,long length,long hwndcallback);
    private string m_MusicName="";
    private void PlayMusic()
    {
    m_MusicName=""""+Tool.ReadInfo("promptmusicfile")+"""";
    if(m_MusicName.Length==0)
    return;
    try
    {
    mciSendString(@"close " + m_MusicName,"",0,0);
    mciSendString(@"open " + m_MusicName,"",0,0);
    mciSendString(@"play " + m_MusicName ,"",0,0);
    }
    catch
    {
    }

    }

    private void StopMusic()
    {
    try
    {
    mciSendString(@"close " + m_MusicName,"",0,0);
    }
    catch{}
    }

    播放内存中的WAV文件可以这样:

    //API定义
    private const int SND_ASYNC = 0x1;
    private const int SND_MEMORY = 0x4;

    [DllImport("winmm.dll")]
    private static extern int sndPlaySoundA(byte[] lpszSoundName, int uFlags);

    //将blip1.wav添加入工程并设置为嵌入的资源
    //现在是将它读入内存备用
    Type t=this.GetType();
    System.Reflection.Assembly a=t.Assembly;
    System.IO.Stream stream=a.GetManifestResourceStream(t.Namespace+".blip1.wav");
    byte[] ba=new byte[stream.Length];
    stream.Read(ba,0, ba.Length);
    stream.Close();

    //播放缓存
    sndPlaySoundA(ba, SND_MEMORY);

    注明:

    用GetManifestResourceStream获取的资源要保证包含在工程中,不包含在工程中即使在同一目录下也没用。包含在工程中以后把该文件的“属性”中的“生成操作”改为“嵌入的资源”。就可以用了

    通过GetManifestResourceNames(好像是这个名字)把所有的名字都取出来,然后看看有没有你要的。一般是Assembly名.类名.Manifest.Resource。

    Assembly assem = Assembly.GetExecutingAssembly();        
         Stream stream = assem.GetManifestResourceStream(        
          "UMS.DataDefinition." + strObjName +".xml");

    另有一些方法,可参照http://hi.baidu.com/ÓÞÖÐ×÷ÀÖ/blog/item/0a621344de1aec85b2b7dc92.html

          不能用控件,防止播放的时候出现延时,或者能够提供内存方法存放声音数据。
    目的就是能够十分准确的播放声音,不会出现声音的延迟现象。

    转自http://blog.csdn.net/jery_lee/archive/2004/08/06/67239.aspx

    [DllImport("Winmm.dll")]
    public static extern long PlaySound(string name,long module,long flag);
    [DllImport("winmm.dll")]
    private static extern long mciSendString(string lpstrCommand,string lpstrReturnString,long length,long hwndcallback);
    private string m_MusicName="";
    private void PlayMusic()
    {
    m_MusicName=""""+Tool.ReadInfo("promptmusicfile")+"""";
    if(m_MusicName.Length==0)
    return;
    try
    {
    mciSendString(@"close " + m_MusicName,"",0,0);
    mciSendString(@"open " + m_MusicName,"",0,0);
    mciSendString(@"play " + m_MusicName ,"",0,0);
    }
    catch
    {
    }

    }

    private void StopMusic()
    {
    try
    {
    mciSendString(@"close " + m_MusicName,"",0,0);
    }
    catch{}
    }

    播放内存中的WAV文件可以这样:

    //API定义
    private const int SND_ASYNC = 0x1;
    private const int SND_MEMORY = 0x4;

    [DllImport("winmm.dll")]
    private static extern int sndPlaySoundA(byte[] lpszSoundName, int uFlags);

    //将blip1.wav添加入工程并设置为嵌入的资源
    //现在是将它读入内存备用
    Type t=this.GetType();
    System.Reflection.Assembly a=t.Assembly;
    System.IO.Stream stream=a.GetManifestResourceStream(t.Namespace+".blip1.wav");
    byte[] ba=new byte[stream.Length];
    stream.Read(ba,0, ba.Length);
    stream.Close();

    //播放缓存
    sndPlaySoundA(ba, SND_MEMORY);

    注明:

    用GetManifestResourceStream获取的资源要保证包含在工程中,不包含在工程中即使在同一目录下也没用。包含在工程中以后把该文件的“属性”中的“生成操作”改为“嵌入的资源”。就可以用了

    通过GetManifestResourceNames(好像是这个名字)把所有的名字都取出来,然后看看有没有你要的。一般是Assembly名.类名.Manifest.Resource。

    Assembly assem = Assembly.GetExecutingAssembly();        
         Stream stream = assem.GetManifestResourceStream(        
          "UMS.DataDefinition." + strObjName +".xml");

    另有一些方法,可参照http://hi.baidu.com/ÓÞÖÐ×÷ÀÖ/blog/item/0a621344de1aec85b2b7dc92.html


    不能用控件,防止播放的时候出现延时,或者能够提供内存方法存放声音数据。
    目的就是能够十分准确的播放声音,不会出现声音的延迟现象。
    转自http://blog.csdn.net/jery_lee/archive/2004/08/06/67239.aspx
    [DllImport("Winmm.dll")]
    public static extern long PlaySound(string name,long module,long flag);
    [DllImport("winmm.dll")]
    private static extern long mciSendString(string lpstrCommand,string lpstrReturnString,long length,long hwndcallback);
    private string m_MusicName="";
    private void PlayMusic()
    {
    m_MusicName="\""+Tool.ReadInfo("promptmusicfile")+"\"";
    if(m_MusicName.Length==0)
    return;
    try
    {
    mciSendString(@"close " + m_MusicName,"",0,0);
    mciSendString(@"open " + m_MusicName,"",0,0);
    mciSendString(@"play " + m_MusicName ,"",0,0);
    }
    catch
    {
    }
    }
    private void StopMusic()
    {
    try
    {
    mciSendString(@"close " + m_MusicName,"",0,0);
    }
    catch{}
    }
    播放内存中的WAV文件可以这样:
    //API定义
    private const int SND_ASYNC = 0x1;
    private const int SND_MEMORY = 0x4;
    [DllImport("winmm.dll")]
    private static extern int sndPlaySoundA(byte[] lpszSoundName, int uFlags);
    //将blip1.wav添加入工程并设置为嵌入的资源
    //现在是将它读入内存备用
    Type t=this.GetType();
    System.Reflection.Assembly a=t.Assembly;
    System.IO.Stream stream=a.GetManifestResourceStream(t.Namespace+".blip1.wav");
    byte[] ba=new byte[stream.Length];
    stream.Read(ba,0, ba.Length);
    stream.Close();
    //播放缓存
    sndPlaySoundA(ba, SND_MEMORY);

    注明:
    用GetManifestResourceStream获取的资源要保证包含在工程中,不包含在工程中即使在同一目录下也没用。包含在工程中以后把该文件的“属性”中的“生成操作”改为“嵌入的资源”。就可以用了

    通过GetManifestResourceNames(好像是这个名字)把所有的名字都取出来,然后看看有没有你要的。一般是Assembly名.类名.Manifest.Resource。

    Assembly assem = Assembly.GetExecutingAssembly();
    Stream stream = assem.GetManifestResourceStream(
    "UMS.DataDefinition." + strObjName +".xml");

    另有一些方法,可参照http://hi.baidu.com/%D3%DE%D6%D0%D7%F7%C0%D6/blog/item/0a621344de1aec85b2b7dc92.html
    public static extern long PlaySound(string name,long module,long flag);
    [DllImport("winmm.dll")]
    private static extern long mciSendString(string lpstrCommand,string lpstrReturnString,long length,long hwndcallback);
    private string m_MusicName="";
    private void PlayMusic()
    {
    m_MusicName="\""+Tool.ReadInfo("promptmusicfile")+"\"";
    if(m_MusicName.Length==0)
    return;
    try
    {
    mciSendString(@"close " + m_MusicName,"",0,0);
    mciSendString(@"open " + m_MusicName,"",0,0);
    mciSendString(@"play " + m_MusicName ,"",0,0);
    }
    catch
    {
    }

    }

    private void StopMusic()
    {
    try
    {
    mciSendString(@"close " + m_MusicName,"",0,0);
    }
    catch{}
    }

    播放内存中的WAV文件可以这样:

    //API定义
    private const int SND_ASYNC = 0x1;
    private const int SND_MEMORY = 0x4;

    [DllImport("winmm.dll")]
    private static extern int sndPlaySoundA(byte[] lpszSoundName, int uFlags);

    //将blip1.wav添加入工程并设置为嵌入的资源
    //现在是将它读入内存备用
    Type t=this.GetType();
    System.Reflection.Assembly a=t.Assembly;
    System.IO.Stream stream=a.GetManifestResourceStream(t.Namespace+".blip1.wav");
    byte[] ba=new byte[stream.Length];
    stream.Read(ba,0, ba.Length);
    stream.Close();

    //播放缓存
    sndPlaySoundA(ba, SND_MEMORY);

    注明:

    用GetManifestResourceStream获取的资源要保证包含在工程中,不包含在工程中即使在同一目录下也没用。包含在工程中以后把该文件的“属性”中的“生成操作”改为“嵌入的资源”。就可以用了

    通过GetManifestResourceNames(好像是这个名字)把所有的名字都取出来,然后看看有没有你要的。一般是Assembly名.类名.Manifest.Resource。

    Assembly assem = Assembly.GetExecutingAssembly();        
         Stream stream = assem.GetManifestResourceStream(        
          "UMS.DataDefinition." + strObjName +".xml");

    另有一些方法,可参照http://hi.baidu.com/ÓÞÖÐ×÷ÀÖ/blog/item/0a621344de1aec85b2b7dc92.html

  • 相关阅读:
    WordPress Editorial Calendar插件权限安全绕过漏洞
    Linux kernel 本地拒绝服务漏洞
    Linux kernel ‘evm_update_evmxattr’函数拒绝服务漏洞
    VB6-ListView的排序和点滴
    VB6IDE改造
    杂记-匆匆北京行
    第60篇随笔:《道法自然》读书笔记
    VB6 AddIns 控件样式模板
    VB6-改造ComUnit(免除用例名称注册)
    VB6-设计模式点滴
  • 原文地址:https://www.cnblogs.com/sql4me/p/1442804.html
Copyright © 2020-2023  润新知