不能用控件,防止播放的時候出現(xiàn)延時
或者能夠提供內(nèi)存方法存放聲音數(shù)據(jù)
目的就是能夠十分準(zhǔn)確的播放聲音,不會出現(xiàn)聲音的延遲現(xiàn)象
[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{}
}
播放內(nèi)存中的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添加入工程并設(shè)置為嵌入的資源
//現(xiàn)在是將它讀入內(nèi)存?zhèn)溆?br>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);
新聞熱點
疑難解答
圖片精選