即像超级解霸一样,可以指定两个声道同时输出左声道或右声道的声音。请高手赐教。

解决方案 »

  1.   

    用API把系统的两个声道同时映射到软件的两个声道
      

  2.   

    说了等于没说,当然要用API了,但问题是怎么用API实现这个功能。
    http://community.csdn.net/Expert/TopicView.asp?id=3075640
    这里有一段代码,我用VB试过了但不行。不知是代码错还是我的设置错。请高手指点。
      

  3.   

    MCI命令
    MciSendString "setaudio 设备名 source to left",uu,len(uu),0
    MciSendString "setaudio 设备名 source to right",uu,len(uu),0
    MciSendString "setaudio 设备名 source to stereo",uu,len(uu),0
      

  4.   

    TO: SupermanKing
    MciSendString命令只能实现对MCI播放的影片声音输出进行调整,但如果是用MSDXM.OCX控件播放的话则无能为力.请教有没有更好的方法?
      

  5.   

    “控件”?我好久没有用了,我大多是用API或DX类,但要用也是直接用MediaPlayer或RealPlayer的控件,至于使用方法可以到Microsoft或Real去下一个SDK或查看一下,要不看一下控件类里的方法属性或常数也可了解大概的使用方法,相信不难,不过要经过一翻研究。
    你可以对你使用的控件观察一下,它是否使用了相关的API,比如MciSendString、MciSendCommand、MciEx...
    如果它使用的是MciSendString播放的媒体,那么你只用找到他的媒体设备名称便可通过API进行操作了,这种操作甚至可以在不同的进程进行。至于观察控件是否使用的方法可以直接打开OCX文件,因为OCX文件在编译时声明的API名称不会编译的。
      

  6.   

    我用的是MediaPlayer做的VCD播放器能换左右声道吗?
      

  7.   

    waveOutGetVolume和waveOutSetVolume来做。waveOutGetVolume得到当前音量,高位字节是左声道,低字节是右声道。取得值后用waveOutSetVolume来设置就可以了。这样写出来的,你改变左右声道的同时,系统“音量控制”里的左右声道控制条也在变。
      

  8.   

    http://blog.csdn.net/demonlovelizzy/archive/2004/09/19/109709.aspx
      

  9.   

    To SupermanKing(人类) :
    试过用MCI切换双声道的MP3文件吗?成功了再说。
      

  10.   

    切换声道的方法很多,在网上看过许多这样的资料,自己也实地做过一个这样的程序,具体有如下几种:
    1、在程序中自己捕获送到声卡缓冲区的音频数据,然后用一个声道的数据填充另一声道。
    2、使用api切换声道
    3、使用media player控件后面两种方法我没试过,但曾看到过有关的资料。我自己的程序是用第一种方法实现的,具体是通过directshow插入一个自己编写的filter到播放链中,然后实时用一个声道的数据填充另一声道。
      

  11.   

    在网上帮你找到几个用MCI切换声道或用media player控件切换声道的方法,管不管用我没试过,因为我自己是用directshow实现的。代码是用delphi写的,不过稍有点api和delphi基础的人应该都可看懂。1、用mepdaplayer控件切换的方法:
    uses mmsystem;const
      MCI_SETAUDIO=  $873;
      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;
     
    type MCI_DGV_SETAUDIO_PARMS=record
      dwCallback:DWORD;
      dwItem:DWORD;
      dwValue:DWORD;
      dwOver:DWORD;
      lpstrAlgorithm:PChar;
      lpstrQuality:PChar;
    end ;
    procedure sdchange;
    var
      s: MCI_DGV_SETAUDIO_PARMS ;
    begin
      //mediaplayer1 为控件NAME
      mciSendCommand(MediaPlayer1.DeviceID,MCI_SETAUDIO,MCI_SET_OFF,integer(@s));
      s.dwValue:=MCI_DGV_SETAUDIO_SOURCE_STEREO; //立体声用这句
    //  s.dwValue:=MCI_DGV_SETAUDIO_SOURCE_LEFT; //右声道源
    //  s.dwValue:=MCI_DGV_SETAUDIO_SOURCE_RIGHT; //右声道源
      s.dwItem:=MCI_DGV_SETAUDIO_SOURCE;
      mciSendCommand(MediaPlayer1.DeviceID,MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM ,integer(@s));
      mciSendCommand(MediaPlayer1.DeviceID,MCI_SETAUDIO, MCI_SET_ON,integer(@s));
    end;2、使用directShow切换DVD音轨
    FilterGraph: TFilterGraph;procedure TForm.AudioSel(Num: Word);  //Num -- 声轨的编号
    var
     DVDControl: IDVDControl;
    begin
     if FilterGraph.Active then
     begin
       if Succeeded(FilterGraph.QueryInterface(IID_IDVDControl, DVDControl)) then
       begin
         DVDControl.AudioStreamChange(Num);
       end;
     end;
     DVDControl := Nil;
    end;3、用MCI切换左右声道
    procedure TMainFrm.MySetAudio(Value:byte);
    var SetAs,retstr:string;
    begin
      case Value of
        1: begin
             mcisendstring('set all audio all on',nil,0,handle);
             SetAs:='stereo'; n7.Checked :=true;
             if FrmDisplayScr.visible then
                FrmDisplayScr.n7.Checked :=true;
             lbSoundLR.Caption :='立体声';     
           end;
        2: begin
             mcisendstring('set all audio all on',nil,0,handle);
             SetAs:='left' ; n8.Checked :=true;
             if FrmDisplayScr.visible then
                FrmDisplayScr.n8.Checked :=true;
             lbSoundLR.Caption :='左声道';
           end;
        3: begin
             mcisendstring('set all audio all on',nil,0,handle);
             SetAs:='right'; n9.checked :=true;
             if FrmDisplayScr.visible then
                FrmDisplayScr.n9.Checked :=true;
             lbSoundLR.Caption :='右声道';  
           end ;
        4: begin
             mcisendstring('set all audio all on',nil,0,handle);
             SetAs:='average';
             lbSoundLR.Caption :='平均';
           end;
        5: begin
             lbSoundLR.Caption :='静音';
             mcisendstring('set all  audio all off',nil,0,handle);
             n10.Checked :=true;
             if FrmDisplayScr.Visible  then
                 FrmDisplayScr.n10.Checked :=true;
             exit;
           end;
      end; if fileopened then
     begin
       retstr:= AudioSource(MediaAliasName,SetAs );
       if retstr<>'ok' then
         showinformation(retstr);
     end;
    end;另外我有一已写成的dll,可用于播放VCD、wmv、asf等,但不支持DVD。如果需要请留下email