• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

c#声音控制(转载)

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

 

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

转自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


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
C#中使用AOP发布时间:2022-07-18
下一篇:
C#字符串截取和转换为数值发布时间:2022-07-18
热门推荐
热门话题
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap