通过编程实现,好像是要用waveOutMessage这个api,但是我不会用。
请高人指点。谢谢。主要是waveOutMessage函数需要声卡的句柄,不知道如何获得声卡句柄。另外,发的消息号也不知道该写什么。
有例子的话,就最好了。

解决方案 »

  1.   

    有相应的API函数可查(声音相关)  
       
       
      waveInAddBuffer                               向声音输入设备发送缓冲区                
      waveInClose                                       关闭声音输入设备                                                  
      waveInGetDevCaps                                                 获取声音输入设备性能                                        
      waveInGetErrorText                                             获取声音出错的信息文本                                        
      waveInGetID                                                           获取声音输入设备ID                                        
      waveInGetNumDevs                                                 返回声音输入设备数量                                        
      waveInGetPosition                                               获取声音设备输入位置                                        
      waveInMessage                                                       向声音输入设备发送信息                                      
      waveInOpen                                                             打开声音输入设备                                        
      waveInPrepareHeader                                           预备声音输入缓冲区                                        
      waveInReset                                                           停止声音输入设备工作                                        
      waveInStart                                                           停止声音输入设备工作                                        
      waveInStop                                                             停止声音输入                                        
      waveInUnprepareHeader                                       清除预备的声音文件头                                        
      waveOutBreakLoop                                                 中断声音输出循环                                        
      waveOutClose                                                         关闭声音输出设备                                        
      waveOutGetDevCaps                                               获取声音输出设备性能                                      
      waveOutGetErrorText                                           获取声音出错文本                                      
      waveOutGetID                                                         获取声音输出设备ID                                      
      waveOutGetNumDevs                                               获取声音输出设备数量                                      
      waveOutGetPitch                                                   获取声音输出的强度                                      
      waveOutGetPlaybackRate                                     获取声音回放率                                      
      waveOutGetPosition                                             获取声音回放位置                                      
      waveOutGetVolume                                                 获取声音音量                                      
      waveOutMessage                                                     向声音输出设备发送消息                                
      waveOutOpen                                                           打开声音输出设备                                
      waveOutPause                                                         暂停声音回放                                        
      waveOutPrepareHeader                                         预备声音回放数据块                                        
      waveOutReset                                                         停止声音回放                                        
      waveOutRestart                                                     重开始声音回放                                        
      waveOutSetPitch                                                   设置波形输出强度                                        
      waveOutSetPlaybackRate                                     设置回放率                                        
      waveOutSetVolume                                                 设置输出音量                            
      waveOutUnprepareHeader                                     清除预备声音数据块                                  
      waveOutWrite                                                         写入声音输出设备            
       
       
      控制音量要用到waveOutSetVlume函数,此函数的声明在MMSystem.h单元中。  
      此单放在Delphi目录下的Source\rtl\win中  
       
      主意这儿用到两个函数waveOutSetVlume和waveOutGetVolume,不要用混,  
      我第一次用它们时就给搞混了,好费事。  
       
      程序如下:  
       
      三个TrackBar的属性设置:Max:=255;Frequency:=16;  
       
      unit   Unit1;  
       
      interface  
       
      uses  
          Windows,   Messages,   SysUtils,   Classes,   Graphics,   Controls,   Forms,   Dialogs,  
          ComCtrls,   mmsystem;  
       
      type  
          TForm1   =   class(TForm)  
              TrackBar1:   TTrackBar;  
              TrackBar2:   TTrackBar;  
              TrackBar3:   TTrackBar;  
              procedure   TrackBar1Change(Sender:   TObject);  
              procedure   TrackBar2Change(Sender:   TObject);  
              procedure   TrackBar3Change(Sender:   TObject);  
              procedure   FormCreate(Sender:   TObject);  
          private  
              {   Private   declarations   }  
          public  
              {   Public   declarations   }  
          end;  
       
      var  
          Form1:   TForm1;  
       
      implementation  
       
      {$R   *.DFM}  
       
      //音量控制  
      procedure   TForm1.TrackBar1Change(Sender:   TObject);  
      var  
      t,v:Longint;  
      begin  
      //   if   a=0   then   Exit;  
        t:=TrackBar1.Position;  
        v:=(t   shl   8)or(t   shl   24);  
        waveOutSetVolume(0,v);  
      end;  
       
      //左声道控制  
      procedure   TForm1.TrackBar2Change(Sender:   TObject);  
      var  
      t,v:Longint;  
      begin  
          t:=TrackBar2.Position;  
          waveOutGetVolume(0,@v);  
          v:=v   and   $ffff0000   or   (t   shl   8);  
          waveOutSetVolume(0,v);  
      end;  
       
      //右声道控制  
      procedure   TForm1.TrackBar3Change(Sender:   TObject);  
      var  
      t,v:Longint;  
      begin  
          t:=TrackBar3.Position;  
          waveOutGetVolume(0,@v);  
          v:=v   and   $0000ffff   or   (t   shl   24);  
          waveOutSetVolume(0,v);  
      end;  
       
      //获得当前音量值  
      procedure   TForm1.FormCreate(Sender:   TObject);  
      var  
      v:longint;  
      begin  
          waveOutGetVolume(0,@v);  
          TrackBar2.Position:=hi(v);  
          TrackBar3.Position:=hi(v   shr   16);  
          if   hi(v)>hi(v   shr   16)   then  
            TrackBar1.Position:=hi(v)  
          else  
            TrackBar1.Position:=hi(v   shr   16);  
      end;  
       
      end.  
       
       
      函数说明:  
       
      waveOutSetVolume  
      第一个参数是波形文件输出设备标识符;  
      第二个参娄是音量大小。这是一个32位的整数,低16位表示左声道的音量,  
      高16位表示右声道的音量。  
       
      waveOutGetVolume  
      第一个参数是波形文件输出设备标识符;  
      第二个参数是一个32位整数的指针。