使用Delphi中System中的MediaPlayer控件。
因为我主要是需要使用播放声频文件中的片断,比如 21000ms ~35000ms。在Delphi中可以使用MediaPlayer的StartPos和EndPos来实现。
在编程过程中主要遇到的问题是:当播放wav格式时,利用设置StartPos和EndPos可以播放任意位置的片断,但是当播放mp3时,StartPos有效,而EndPos属性无效。
另外,这个示例中还利用TrackBar和另一个Timer实现了播放的进度条。
因为我主要是需要使用播放声频文件中的片断,比如 21000ms ~35000ms。在Delphi中可以使用MediaPlayer的StartPos和EndPos来实现。
在编程过程中主要遇到的问题是:当播放wav格式时,利用设置StartPos和EndPos可以播放任意位置的片断,但是当播放mp3时,StartPos有效,而EndPos属性无效。
如下代码:后来没办法,只有使用一个Timer来监控播放的情况,当mp.Postion > mp.EndPos时,就停止播放。为了控制的精确性,需要将Timer的间隔Interval设置为100ms或更小的数值。
with mp do begin
Filename : = sFile;
DeviceType : = dtAutoSelect;
TimeFormat : = tfMilliseconds;
Open;
StartPos : = 10000 ;
EndPos : = StartPos + 2000 ;
Play;
end ;
当 sFile 是wav格式时,一点问题都没有,刚好播放了2s的内容,但是当格式为mp3时,
StartPos有效,从10s开始播放,但EndPos无效,停不下来。
//
用来监控mp3文件结尾的Timer,时间间隔要设为100ms
procedure TMyPlayer.EndPosTimerTimer(Sender: TObject);
begin
with mp do begin
if Position > EndPos then begin
// 停止播放
Stop ;
// 关闭两个Timer
EndPosTimer.Enabled : = false ;
TrackBarTimer.Enabled : = false ;
// 把进度条设到开始
SoundBar.Position : = StartPos;
info.Lines.Append( ' Stopped at ' + IntToStr(mp.Position) + 'ms');
end ;
end ;
end ;
procedure TMyPlayer.EndPosTimerTimer(Sender: TObject);
begin
with mp do begin
if Position > EndPos then begin
// 停止播放
Stop ;
// 关闭两个Timer
EndPosTimer.Enabled : = false ;
TrackBarTimer.Enabled : = false ;
// 把进度条设到开始
SoundBar.Position : = StartPos;
info.Lines.Append( ' Stopped at ' + IntToStr(mp.Position) + 'ms');
end ;
end ;
end ;
另外,这个示例中还利用TrackBar和另一个Timer实现了播放的进度条。
//
用来控制播放进度条的Timer,时间间隔要为100ms
procedure TMyPlayer.TrackBarTimerTimer(Sender: TObject);
begin
with SoundBar do begin
Min : = mp.StartPos;
procedure TMyPlayer.TrackBarTimerTimer(Sender: TObject);
begin
with SoundBar do begin
Min : = mp.StartPos;