有那些API函数可以切换左右声道啊,小弟在做一个播放器,就是不知道怎么切换左右声道,请大家指教

解决方案 »

  1.   

    //音量控制
    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.trackbar1changer (sender:tobject);//左声道
    var t,v:longint;
    begin
    t:=trackbar1.postion;
    wavoutgetvolume(0,@v);
    v:=v and $ffff0000 or (t shl 8);
    wavoutsetvolume(0,v);
    end;procedure tform1.trackbar2changer (sender:tobject);//右声道
    var t,v:longint;
    begin
    t:=trackbar2.postion;
    wavoutgetvolume(0,@v);
    v:=v and $0000ffff or (t shl 24);
    wavoutsetvolume(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位整数的指针。
    可以用auxoutsetvolume(id:integer,volume:dword);具体使用方法请查阅DELPHI帮助,WIN32SDK.HLP。 其中ID是设备代号,我在实际编程中发现ID随着机器的不同而不同,但是他可以直接控制各种设备的音量,你可以用不同的ID试一试(ID一般在1~8之间),音量设置方法wjiachun好象没错!
      

  2.   

    xzhifei(飞):
    我是要实现左右声道的切换啊,就是说在立体声、左声道、右声道之间切换。
      

  3.   

    我在vb下面做的,楼主翻译一下吧
    Public Sub SetVolTrack(i As Long) '声道控制
    Select Case i
    Case 0 '静音
    mciSendString "set all audio all off", vbNullString, 0, form2.hwnd
    Case 1 '左声道
    mciSendString "set all audio all off", vbNullString, 0, form2.hwnd
    mciSendString "set all audio left on", vbNullString, 0, form2.hwnd
    Case 2 '右声道
    mciSendString "set all audio all off", vbNullString, 0, form2.hwnd
    mciSendString "set all audio right on", vbNullString, 0, form2.hwnd
    Case 3 '立体声
    mciSendString "set all audio all off", vbnullsting, 0, form2.hwnd
    mciSendString "set all audio left on", vbNullString, 0, form2.hwnd
    mciSendString "set all audio right on", vbNullString, 0, form2.hwnd
    End Select
    End Sub
      

  4.   

    bluezwt(蓝色):
    先谢过了,我已经试过了的,在我的系统下,这样做的话,如果设置成右声道,那么左声道就没有声音了,如果设置成左声道的话,那么右声道就没有声音了,不知道是怎么回事
      

  5.   

    vcd和dvd格式分别不同。
    vcd通过如下可切换,
    mciSendCommand(hStream,MCI_SETAUDIO,MCI_SET_OFF,integer(@sSETAUDIOPARMS));   //hStream为驱动id,也就是MediaPlayer1.DeviceID返回值;
          case iChannels of
            1:          sSETAUDIOPARMS.dwValue:=MCI_DGV_SETAUDIO_SOURCE_LEFT;     //left
            2:          sSETAUDIOPARMS.dwValue:=MCI_DGV_SETAUDIO_SOURCE_RIGHT;    //right
            3:          sSETAUDIOPARMS.dwValue:=MCI_DGV_SETAUDIO_SOURCE_STEREO;   //立体声
          end;
          sSETAUDIOPARMS.dwItem:=MCI_DGV_SETAUDIO_SOURCE;
          mciSendCommand(hStream,MCI_SETAUDIO,
                         MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM ,
                         integer(@sSETAUDIOPARMS));
          result:=mciSendCommand(hStream,MCI_SETAUDIO,
                                 MCI_SET_ON,integer(@sSETAUDIOPARMS));dvd 格式:
      const
        MCI_DGV_SETAUDIO_STREAM=$4003;
      var
         s: MCI_DGV_SETAUDIO_PARMS;
    begin
        if IntLeftRight=1 then
           s.dwValue:=1                  //值分别为1.,8  八个值。1,2可实现原伴音的切换。
        else
           s.dwValue:=2;
        s.dwItem:=MCI_DGV_SETAUDIO_STREAM ;
        mciSendCommand(IntDeviceID,MCI_SETAUDIO,
                       MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM,
                       integer(@s));
      

  6.   

    cbdiy(··V-R战警··) :
    谢谢,我试试
      

  7.   

    上面定义了不小结构和常量,可在msdn里查。
    也可以把我写的整个播放控制的pas文件发给你。。
      

  8.   

    那就谢谢了,我的E_mail:[email protected]
      

  9.   

    cbdiy(··V-R战警··) :
    文件收到,谢谢
      

  10.   

    再问一个问题,我是用的DirectX做的播放器,驱动id找不到啊