定义一个代理,用于使用回调函数
public delegate void WaveDelegate(IntPtr hdrvr, int uMsg, int dwUser, int dwParam1, int dwParam2);WaveDelegate wdel = new WaveDelegate(WaveOutProc);///打开音频设备
waveOutOpen(out m_hPlay,WAVE_MAPPER,wFormat,wdel,0,0);///回调函数
public static void WaveOutProc(IntPtr hwo,int uMsg,int dwInstance,int dwParam1,int dwParam2)
{
switch(uMsg)
{
case Wave.MM_WOM_DONE://播访完一段缓冲录音
Wave.waveOutUnprepareHeader(m_hPlay,ref wHdr,uSize);
break;
}
}以上是我写的代码。我要在回调函数中获取是否播放完一段录音,然后释放掉内存;
可是这个回调函数为什么不执行呢?或者是我的代码写错了,
我的目的是要知道什么时候播放完一段录音,然后释放内存。
各位大哥大姐,不知道是不是用这个方法?还望各位高手指教!不胜感激!
public delegate void WaveDelegate(IntPtr hdrvr, int uMsg, int dwUser, int dwParam1, int dwParam2);WaveDelegate wdel = new WaveDelegate(WaveOutProc);///打开音频设备
waveOutOpen(out m_hPlay,WAVE_MAPPER,wFormat,wdel,0,0);///回调函数
public static void WaveOutProc(IntPtr hwo,int uMsg,int dwInstance,int dwParam1,int dwParam2)
{
switch(uMsg)
{
case Wave.MM_WOM_DONE://播访完一段缓冲录音
Wave.waveOutUnprepareHeader(m_hPlay,ref wHdr,uSize);
break;
}
}以上是我写的代码。我要在回调函数中获取是否播放完一段录音,然后释放掉内存;
可是这个回调函数为什么不执行呢?或者是我的代码写错了,
我的目的是要知道什么时候播放完一段录音,然后释放内存。
各位大哥大姐,不知道是不是用这个方法?还望各位高手指教!不胜感激!
我在WaveOutProc回调函数中
判断
switch(uMsg)
{
case Wave.MM_WOM_DONE://播访完一段缓冲录音
Wave.waveOutUnprepareHeader(m_hPlay,ref wHdr,uSize);//释放文件头(内存)
break; 不对啊,内存不涨了,但是不能播放了。
不过,据俺所知,.net在windows编程方面并不占优势(相对VB、Delphi、PB),请问楼主为何会有用.net开发音频项目的需求?不会是自己练手吧!
本人只会用.net,而且这个组件(硬件开发)的功能(音频只是其中一部分)
已经实现。现在只剩收尾工作了。
我相信.net是可以的。现在的问题就是播放时问题内存不断的增长
执行waveOutPrepareHeader这个函数造成的。各位大侠,还望指教!感激不尽!
Wave.waveOutUnprepareHeader(m_hPlay,ref wHdr,uSize);//此时再释放
具体那个参数是 wavehdr 结构的内存地址呢?
还有 whdr_done 得值是多少?还望指教,非常感谢!
原先
Wave.waveOutUnprepareHeader(m_hPlay,ref wHdr,uSize);语句中得wHdr来做判断
if ( wHdr.dwFlags == WHDR_DONE)试试WHDR_DONE的具体值我也不清楚,可能需要lz到一堆.h中去搜索一下 define了
{
我监视wHdr.dwFlags 得值 0,3,18,19...没有出现过1;
}
wHdr.dwFlags 这个参数是什么意思啊?
dwFlags是当前缓冲数据的处理标志吧因为没有具体使用过,所以也没有实际经验,见谅
我的loops 的值始终是0 是不是代表无限次循环?