这段程序你就只能用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;
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;