请问:在mp3播放器中如何实现立体声,要用到什么函数,如何写代码?谢谢

解决方案 »

  1.   

    这段程序你就只能用Borland的提供的那个MediaPlayer控件,不能用Windows的那个MediaPlayer OCX控件,我怎么试也没有效果 :( 我看过Borland的那个MediaPlayer控件的源码是封装的MCI API……算了看源码吧,我的第一个版本就是这样解决的 ^^首先 User mmSystem 单元定义:
    const
      //声道控制部分
      MCI_SETAUDIO= $873;
      MCI_SETVIDEO=$0876;
      MCI_DGV_SETAUDIO_SOURCE_LEFT=1;
      MCI_DGV_SETAUDIO_SOURCE_STEREO=0;
      MCI_DGV_SETAUDIO_SOURCE_RIGHT=2;
      MCI_DGV_SETAUDIO_SOURCE=$4004;
      MCI_DGV_SETAUDIO_VALUE=$01000000;
      MCI_DGV_SETAUDIO_ITEM=$00800000;  MCI_DGV_SETAUDIO_VOLUME=$4002;  //++音量大小控制
      MAX_VOLUME=65535;               //++
      MIN_VOLUME=0;                   //++type //音量控制
      MCI_DGV_SETAUDIO_PARMS=record
        dwCallback:DWORD;
        dwItem:DWORD;
        dwValue:DWORD;
        dwOver:DWORD;
        lpstrAlgorithm:PChar;
        lpstrQuality:PChar;
    end;//*************************************左右声道控制*****************************************//
    //  L -- 左声道 R -- 右声道 C -- 立体声
    //*****************************************************************************************//
    procedure LRC(Str: String);
    var
      s: MCI_DGV_SETAUDIO_PARMS ;
      err:integer;
      buf:array[0..1000] of char;
    begin  if MediaPlayer11.DeviceID>0 then
      begin
        //播放中一定要先关闭声音,否则没效果
        err:=mciSendCommand(MediaPlayer11.DeviceID,MCI_SETAUDIO, MCI_SET_OFF ,integer(@s));
        if(err<>0)then
        begin
          mciGetErrorString(err,buf,sizeof(buf) );
          FormMain.MessageBoxShow('1',buf,2,True,10000);
          //ShowMessage(buf);
        end;
        if Str='C' then
          s.dwValue:=MCI_DGV_SETAUDIO_SOURCE_STEREO; //右声道源
        if Str='L' then
          s.dwValue:=MCI_DGV_SETAUDIO_SOURCE_Left; //右声道源
        if Str='R' then
          s.dwValue:=MCI_DGV_SETAUDIO_SOURCE_Right; //右声道源
        s.dwItem:=MCI_DGV_SETAUDIO_SOURCE;
        //下面的MCI_DGV_SETAUDIO_VALUE 一定不能少
        err:=mciSendCommand(MediaPlayer11.DeviceID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM ,integer(@s));
        if (err<>0) then
        begin
          mciGetErrorString(err,buf,sizeof(buf) );
          FormMain.MessageBoxShow('1',buf,2,True,10000);
          //ShowMessage(buf);
        end;
        //再打开声音,就是你所要的
        err:=mciSendCommand(MediaPlayer11.DeviceID,MCI_SETAUDIO, MCI_SET_ON ,integer(@s));
        if (err<>0) then
        begin
          mciGetErrorString(err,buf,sizeof(buf) );
          FormMain.MessageBoxShow('1',buf,2,True,10000);
        end;
      end;
    end;