为什么我用MediaPlayer播放avi文件有声音,用TMediaPlayer做的程序却没有声音? (50分)

  • 主题发起人 beanteen
  • 开始时间
B

beanteen

Unregistered / Unconfirmed
GUEST, unregistred user!
为什么我用MediaPlayer播放avi文件时有声音,用TMediaPlayer做的程序却只有图象没有
声音?而我用程序播放mpeg文件的时候就没有这种情况。
我用的是MediaPlayer9 series。 另外安装了DIVX5.02,不知道会不会有影
响。另外我也不知道怎么可以控制声音的大小,还要请教各位。谢谢!
 
当你做一个多媒体播放器时,难免少不了控制音量的大小和左右声道的播放,
下面就介绍一种控制Wave波形输出设备音量的方法,该方法不是设置主音量。
先在窗体上放两个TTrackBar,分别命名为TrackBar1,TrackBar2,
属性Max都设置为65535,如果觉得刻度太密了,可以把Frequency属性值设置大一些,
然后在Uses段加入MMSystem,并在TrackBar1和TrackBar2的OnChange事件都写上
下列语句:

procedure TForm1.TrackBar1Change(Sender: Tobject);
var Wave:string;
begin

Wave:='$'+inttohex(TrackBar1.Position,4)+inttohex(TrackBar2.Position,4);
waveoutsetvolume(0,strtoint(Wave));
end;

/////////////////////////////////////////////
WaveOutSetVolume(hwo: Integer;
dwVolume: Cardinal);

hwo is MediaPlayer1.DeviceId,

example: Right// | Left//
dwVolume for Full L+R = $FFFFFFFF
dwVolume for Full L no R = $0000FFFF
dwVolume for Full R no L = $FFFF0000
dwVolume for no sound = $00000000
/////////////////////////////////////////////////

uses MMSystem

type
TVolType = (vtLeft, vtRight);
TVol = array[vtLeft..vtRight] of word;

procedure TVolForm.GetVolumes(var DevId : word;
var VolLeft, VolRight : word);
{volume is returned as a pointer to a DWord with the most
significant word for the left channel. The channels are
extracted by treating the DWord as a two element array and
accessing the two array elements for the Lt and Rt volumes}
var
Error : integer;
MsgResponse : word;
TempVol : TVol;
begin

Error := AuxGetVolume(DevId, @TempVol);
if Error <> 0 then
begin

Timer1.Enabled := false;
MsgResponse := MessageDlg('Error Reading Volume : ' + IntToStr(Error) +
chr(13)
+ 'DevId : ' + IntToStr(DevId) + chr(13)
+ chr(13)
+ 'Set Next Device ?',
mtError, [mbYes, mbCancel], 0);
if MsgResponse = mrYes then
{try the next Device Id}
DevId := DevId + 1
else
begin

DevId := 0;
PChangeType := Nil;
end;

{else
MsgResponse = mrCancel}
Exit;
end;

{if Error <> 0}
VolLeft := TempVol[vtLeft];
VolRight := TempVol[vtRight];
end;


procedure TVolForm.SetVolumes(DevId : word;
var VolLeft, VolRight : word);
{volume is set by passing a DWord value with the most
significant word set for the left channel, and the least
significant word set for the right channel. The channels are
set by treating the DWord as a two element array and
setting the two array elements for the Lt and Rt volumes}
var
Error : integer;
TempVol : TVol;
begin

TempVol[vtLeft] := VolLeft;
TempVol[vtRight] := VolRight;
Error := AuxSetVolume(DevId, longint(TempVol));
if Error <> 0 then

MessageDlg('Error Setting Volume : ' + IntToStr(Error),
mtError, [mbOK], 0);
end;


 
但是我的是TMEDIAPLAYER啊,放的是波形音频吗?
 
不是所有 avi 都有声音的,首先要确认这一点。
 
顶部