Da meine alte Trackbar nicht flüssig gelaufen ist, bzw. es Störgeräusche gab wenn ich die Frequenz des Timers erhöht habe, habe ich nun den Code angepasst.
Dabei habe ich mich auf den Code von Gausis mp3-Player gestützt (
http://www.gausi.de/delphi/memp/5.php).
Das Problem ist jetzt, dass wenn ich unten angegebenen Code nutze, es einige Probleme gibt.
Der Code für den Timer verursacht, dass der Stream immer von vorne beginnt wenn ich pausiere.
Der Code beim Changen der Trackbar verursacht ebenfalls, dass immer von vorne abgespielt wird und nicht von der Position die gewollt ist.
Wenn ich beide Codes gleichzeitig anhabe, dann beginnt der Track immer wieder alle 100ms in einer Endlosschleife.
Woran liegt das?
Delphi-Quellcode:
(* Update der Progressbar *)
procedure TRecordForm.RecordTimerTimer(Sender: TObject);
var t: integer;
begin
ProgressBar.Position := Round((BASS_ChannelGetPosition(chan, BASS_POS_BYTE) / BASS_ChannelGetLength(chan, BASS_POS_BYTE)) * 100);
end; // procedure RecordTimerTimer
(* Position via ProgressBar ändern *)
procedure TRecordForm.ProgressBarChange(Sender: TObject);
begin
if BASS_ChannelIsActive(chan) = BASS_ACTIVE_Playing
then begin
BASS_ChannelPause(chan);
BASS_ChannelSetPosition(chan, Round(ProgressBar.Position / 100), BASS_POS_BYTE);
BASS_ChannelPlay(chan, False);
end
else
BASS_ChannelSetPosition(chan, Round(ProgressBar.Position / 100) * BASS_ChannelGetLength(chan, BASS_POS_BYTE), BASS_POS_BYTE);
end; // procedure ProgressBarChange
(* PlayButtonClick || Wiedergabe der Aufnahme *)
procedure TRecordForm.PlayExecute(Sender: TObject);
begin
case BASS_ChannelIsActive(chan) of
BASS_Active_Stopped:
begin
BASS_ChannelPlay(chan, True);
EndSync := Bass_ChannelSetSync(chan, Bass_SYNC_END, 0, @SyncProc, nil);
ToggleStatus(1);
end;
BASS_Active_Playing:
begin
BASS_ChannelPause(chan);
ToggleStatus(2);
end;
BASS_Active_Paused:
begin
BASS_ChannelPlay(chan, False);
ToggleStatus(1);
end;
end; // case
end; // procedure PlayExecute
Danke schonmal im Voraus,
Duck