知道 音频 API 请进,最近发的帖沉的快,希望这个帖能浮起来
定义一个代理,用于使用回调函数 
 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;          
 }          
 }   
 以上是我写的代码。   
 我要在回调函数中获取是否播放完一段录音,然后释放掉内存; 
 可是这个回调函数为什么不执行呢?   
 或者是我的代码写错了, 
 我的目的是要知道什么时候播放完一段录音,然后释放内存。 
 各位大哥大姐,不知道是不是用这个方法?   
 还望各位高手指教!不胜感激!     
------解决方案--------------------ding..............................................................
------解决方案--------------------关注一下。   
 怎么,没这方面的高手吗?
------解决方案--------------------不懂,关注中。 
 不过,据俺所知,.net在windows编程方面并不占优势(相对VB、Delphi、PB),请问楼主为何会有用.net开发音频项目的需求?不会是自己练手吧!
------解决方案--------------------加个条件   
 case Wave.MM_WOM_DONE://大概仅仅是缓冲区填写满也会引发这个消息的,此时不代表声音已经播放完毕   
 if ( ((WAVEHDR)dwParam1).dwFlags == WHDR_DONE) 
     Wave.waveOutUnprepareHeader(m_hPlay,ref wHdr,uSize);//此时再释放 
------解决方案--------------------最近流行DirectX~~~~
------解决方案--------------------要不你直接拿 
 原先 
 Wave.waveOutUnprepareHeader(m_hPlay,ref wHdr,uSize);语句中得wHdr来做判断 
 if ( wHdr.dwFlags == WHDR_DONE)试试   
 WHDR_DONE的具体值我也不清楚,可能需要lz到一堆.h中去搜索一下 define了
------解决方案--------------------难道你设置wHdr中的loops是无限次循环?所以一直没有播放完成? 
 dwFlags是当前缓冲数据的处理标志吧   
 因为没有具体使用过,所以也没有实际经验,见谅
------解决方案--------------------LZ的代码段看起来都没有什么问题,请把原型Win32函数拿出来看看。代码段也有点乱。
------解决方案--------------------考虑用DirectX
------解决方案--------------------loops设成1试试