如何象豪杰超级解霸那样控制左右声道?(300分)

  • 主题发起人 主题发起人 Vision
  • 开始时间 开始时间
V

Vision

Unregistered / Unconfirmed
GUEST, unregistred user!
很多影片都是两种语言的,如何象豪杰超级解霸那样控制左右声道?
关闭一个声道后,仍然是两个音箱发声,我搜索了一下,找出来的方法都是关闭一个声道后,有一个喇叭就成哑吧了。
 
如果你用Dspack制作播放器的话,就用一个 TBalancer 左右声道均衡器三
 
豪杰超级解霸是不是控制输出的声音呢?
 
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1526709
http://www.delphibbs.com/delphibbs/dispq.asp?lid=628509
http://www.delphibbs.com/delphibbs/dispq.asp?lid=746362
 
我没用Dspack。
使用RealAudio控件,对那些需要 MediaPlayer1.DeviceID 的MCI指令不行吧。
 
怎么300分没人要吗?
 
MCI指令兼容性不好。遇到过问题。
楼主研究一下bass2.3,用过一次,感觉很好,只一个dll,用的方便,帮助写的也很齐全。对多声道都可以控制(看帮助上写的是这样,我还没有用过),双声道自然不在话下。
 
use mmSystem;
type TChannel=(cLeft,cRight,cBoth);
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;


type MCI_DGV_SETAUDIO_PARMS=record
dwCallback:DWORD;
dwItem:DWORD;
dwValue:DWORD;
dwOver:DWORD;
lpstrAlgorithm:PChar;
lpstrQuality:PChar;
end ;

procedure TForm1.Setchannel(Channel:TChannel);
var
S: MCI_DGV_SETAUDIO_PARMS ;
Err:integer;
Buf:array[0..100] of char;
begin

Err:=mciSendCommand(MediaPlayer1.DeviceID,MCI_SETAUDIO, MCI_SET_OFF ,integer(@s));
if(Err<>0)then

begin

mciGetErrorString(err,buf,sizeof(buf) );
ShowMessage('Set Audio Off Failed!');
ShowMessage(buf);
end;

Case Channel of
cLeft : S.dwValue:=MCI_DGV_SETAUDIO_SOURCE_LEFT;
cRight: S.dwValue:=MCI_DGV_SETAUDIO_SOURCE_RIGHT;
cBoth : S.dwValue:=MCI_DGV_SETAUDIO_SOURCE_STEREO;
end;

S.dwItem:=MCI_DGV_SETAUDIO_SOURCE;
Err:=mciSendCommand(MediaPlayer1.DeviceID,MCI_SETAUDIO, MCI_DGV_SETAUDIO_VALUE or MCI_DGV_SETAUDIO_ITEM ,integer(@s));
if(Err<>0)then

begin

mciGetErrorString(err,buf,sizeof(buf) );
ShowMessage('Set Channel Failed!');
ShowMessage(buf);
end;

Err:=mciSendCommand(MediaPlayer1.DeviceID,MCI_SETAUDIO, MCI_SET_ON ,integer(@s));
if(Err<>0)then

begin

mciGetErrorString(err,buf,sizeof(buf) );
ShowMessage('Set Audio On Failed!');
ShowMessage(buf);
end;

end;
 
procedure TForm1.Button3Click(Sender: TObject);
var
Vol : DWORD ;
begin

waveoutGetVolume(MediaPlayer1.DeviceID-1,@Vol) ;
Vol := Vol or $ffffffff ;
waveoutSetVolume(MediaPlayer1.DeviceID-1,Vol) ;
end;


procedure TForm1.Button4Click(Sender: TObject);
var
Vol : DWORD ;
begin

waveoutGetVolume(MediaPlayer1.DeviceID-1,@Vol) ;
Vol := ((Vol shr 16) shl 16) or $ffff0000 ;
waveoutSetVolume(MediaPlayer1.DeviceID-1,Vol) ;

end;


procedure TForm1.Button5Click(Sender: TObject);
var
Vol : DWORD ;
begin

waveoutGetVolume(MediaPlayer1.DeviceID-1,@Vol) ;
Vol := ((Vol shl 16) shr 16) or $0000ffff ;
waveoutSetVolume(MediaPlayer1.DeviceID-1,Vol) ;

end;
 
to lovezyp
这个如果关闭一个声道会只有一个喇叭发声的。
 
http://shop33656302.taobao.com/
 
还是用bass吧,一个dll,功能全有了,http://www.un4seen.com
 
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;
 
请看清要求,
关闭一个声道后,仍然是两个音箱发声。
 
嗯,高人!
 
http://shop33656302.taobao.com/
 
楼上的,这是你第二次发广告链接了。
 
大富翁笔记
作者 : wind520
标题 : 播放VCD/DVD声道控制
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部