PDA

Просмотр полной версии : TMediaPlayer и TTrackBar - перемещение при воспроизведении



-=C@$PeR=-
16.11.2009, 00:26
Люди, объясните кто нибудь:
Как получить точную длинну трека, нету списка воспроизведения, трек всегда один.
У меня это выглядит так, но не правильно всё равно получается.

procedure TForm1.BitBtn4Click(Sender: TObject);
begin
if OpenDialog1.Execute then //нажатие по кнопке Выбрать песню/сигнал
begin
if MediaPlayer1.Mode = mpPlaying then
begin
MediaPlayer1.Stop;
LEditWayMusic.Text := OpenDialog1.FileName;
MediaPlayer1.FileName := OpenDialog1.FileName;
ButPlayMusic.Glyph := StopBMP;
ButPlayMusic.Tag := 1;
MediaPlayer1.Open;
TrackBar1.Max := MediaPlayer1.TrackLength[1] div 1000;
TrackBar1.Position := TrackBar1.Min;
ShowTrackLenth;
MediaPlayer1.Play;
end;

if MediaPlayer1.Mode = mpStopped then
begin
MediaPlayer1.Stop;
LEditWayMusic.Text := OpenDialog1.FileName;
MediaPlayer1.FileName := OpenDialog1.FileName;
ButPlayMusic.Glyph := PlayBMP;
ButPlayMusic.Tag := 0;
MediaPlayer1.Open;
TrackBar1.Max := MediaPlayer1.TrackLength[1] div 1000;
TrackBar1.Position := TrackBar1.Min;
ShowTrackLenth; //расчитать длинну трэка
end;
end;
end;



procedure TForm1.TimerPlaySoundTimer(Sender: TObject);
begin
TrackBar1.Position := TrackBar1.Position + 1;
if MediaPlayer1.Mode = mpStopped then
begin
TrackBar1.Position := TrackBar1.Min;
ButPlayMusic.Tag := 0; //кнопка становиться не стоп, а плэй
ButPlayMusic.Glyph := PlayBMP; //соответсвующая картинка
TimerPlaySound.Enabled := False;
end;
end;

Чё не верно? в одной песне у меня показывает, что песня длиться 18 секунд, хотя на самом деле 24. В других многих песнях, показывает точно, в одной вообще не хило ошибается пишет, что песня длиться 7 с чемто минут, хотя на самом деле 3 с чем-то.

Код расчёта продолжительности сигнала:

procedure ShowTrackLenth;
var resS, resM, resH : integer;
StrSec, StrMin, StrHour : string[2];
begin
resS := 0;
resM := 0;
resH := 0;
if FileExists(Form1.LEditWayMusic.Text) then
begin
Form1.MediaPlayer1.FileName := Form1.LEditWayMusic.Text;
Form1.MediaPlayer1.Open;
resS := (Form1.MediaPlayer1.TrackLength[1]);
resS := resS div 1000;
{ Form1.LTrack.Caption := IntToStr(Form1.TrackBar1.Max div 60)
+ ':' + IntToStr(Form1.TrackBar1.Max - (Form1.TrackBar1.Max div 60)*60);}
while resS > 59 do
begin
resS := resS - 60;
resM := resM + 1;
if resM > 59 then
begin
resM := resM - 60;
resH := resH + 1;
end;
// resS := Int(resS); //получить количество секунд без остатка (целое)
end;
if resS < 10 then StrSec := '0'+ FloatToStr(resS)
else StrSec := FloatToStr(resS);
if resM < 10 then StrMin := '0'+ FloatToStr(resM)
else StrMin := FloatToStr(resM);
StrHour := FloatToStr(resH);


Form1.LTrack.Caption := 'Продолжительность трэка: '+StrHour+': '+
StrMin+': '+ StrSec;

end else Form1.LTrack.Caption := 'Не удалось расчитать продолжительность трэка, так как файл не существует';
end;

Добавлено через 46 часов 55 минут 19 секунд
Ну в очередной раз сам дополню тему
Оказывается TMediaPlayer по разному расчитывает продолжительность взависимости от бит рейта звукового файла. Можно воспользоваться TBassPlayer и Bass.dll где качать незнаю, но поисковик в инете и всё найдётся.
Тут скачать можно с исходником, посмотрел, вообще тема. http://www.programmersforum.ru/showthread.php?t=39398&highlight=%EF%EB%E5%E5%F0&page=2