有那些API函数可以切换左右声道啊,小弟在做一个播放器,就是不知道怎么切换左右声道,请大家指教
解决方案 »
- 控制多个panel显示问题
- 请教:界面中用户自定义字段的实现,大家通常是如何做的?
- 超级奇怪的问题: dxDBGrid +adoTable 请教各位??
- 用两层结构+SQLServer2000可以实现网络存储可以吗?
- StringGrid一问
- 三层中客户端如何能通过ClientDataSet连接AdoStoredPro,并获得记录集
- 哪位大大给我讲一下WEBBROWSER怎么用啊??书上就没怎么写
- 请问那边有master delphi 6.0 英文版的电子图书下载
- 我在CSDN拷了个DBGRID排序不知错在哪里,谁能给我改一下
- 急!!!如何在QUERY的ONUPDATEERROR事件中写程序避免更新时出现错误提示!高手帮帮助我吧!
- ADO+access2000时间存储问题
- 如何控制音量大小?
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好象没错!
我是要实现左右声道的切换啊,就是说在立体声、左声道、右声道之间切换。
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
先谢过了,我已经试过了的,在我的系统下,这样做的话,如果设置成右声道,那么左声道就没有声音了,如果设置成左声道的话,那么右声道就没有声音了,不知道是怎么回事
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));
谢谢,我试试
也可以把我写的整个播放控制的pas文件发给你。。
文件收到,谢谢