定义一个代理,用于使用回调函数
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;   
}   
}以上是我写的代码。我要在回调函数中获取是否播放完一段录音,然后释放掉内存;
可是这个回调函数为什么不执行呢?或者是我的代码写错了,
我的目的是要知道什么时候播放完一段录音,然后释放内存。
各位大哥大姐,不知道是不是用这个方法?还望各位高手指教!不胜感激!

解决方案 »

  1.   

    ding..............................................................
      

  2.   

    再问一个问题
    我在WaveOutProc回调函数中
    判断
    switch(uMsg)   
    {
    case Wave.MM_WOM_DONE://播访完一段缓冲录音
    Wave.waveOutUnprepareHeader(m_hPlay,ref wHdr,uSize);//释放文件头(内存)
    break;   不对啊,内存不涨了,但是不能播放了。
      

  3.   

    不懂,关注中。
    不过,据俺所知,.net在windows编程方面并不占优势(相对VB、Delphi、PB),请问楼主为何会有用.net开发音频项目的需求?不会是自己练手吧!
      

  4.   

    多谢楼上几位的关注。
    本人只会用.net,而且这个组件(硬件开发)的功能(音频只是其中一部分)
    已经实现。现在只剩收尾工作了。
    我相信.net是可以的。现在的问题就是播放时问题内存不断的增长
    执行waveOutPrepareHeader这个函数造成的。各位大侠,还望指教!感激不尽!
      

  5.   

    加个条件case Wave.MM_WOM_DONE://大概仅仅是缓冲区填写满也会引发这个消息的,此时不代表声音已经播放完毕if ( ((WAVEHDR)dwParam1).dwFlags == WHDR_DONE)
        Wave.waveOutUnprepareHeader(m_hPlay,ref wHdr,uSize);//此时再释放
      

  6.   

    非常感谢 littlegang(Gang) 的关注。dwParam1 的值是零啊!
    具体那个参数是 wavehdr 结构的内存地址呢?
    还有 whdr_done 得值是多少?还望指教,非常感谢!
      

  7.   

    要不你直接拿
    原先
    Wave.waveOutUnprepareHeader(m_hPlay,ref wHdr,uSize);语句中得wHdr来做判断
    if ( wHdr.dwFlags == WHDR_DONE)试试WHDR_DONE的具体值我也不清楚,可能需要lz到一堆.h中去搜索一下 define了
      

  8.   

    我找到 WHDR_DONE 的值是 0x01;if( wHdr.dwFlags == WHDR_DONE) //永远不会进来
    {
    我监视wHdr.dwFlags 得值 0,3,18,19...没有出现过1;
    }
    wHdr.dwFlags 这个参数是什么意思啊?
      

  9.   

    难道你设置wHdr中的loops是无限次循环?所以一直没有播放完成?
    dwFlags是当前缓冲数据的处理标志吧因为没有具体使用过,所以也没有实际经验,见谅
      

  10.   

    LZ的代码段看起来都没有什么问题,请把原型Win32函数拿出来看看。代码段也有点乱。
      

  11.   

    loops是无限次循环?
    我的loops 的值始终是0 是不是代表无限次循环?
      

  12.   

    To littlegang(Gang) 怎么解决啊!帮帮我。