Einzelnen Beitrag anzeigen

Ducksoul

Registriert seit: 19. Apr 2006
Ort: Ilmenau
87 Beiträge
 
RAD-Studio 2009 Pro
 
#1

Problem Trackbar bass.dll

  Alt 28. Aug 2008, 16:03
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
Franz
  Mit Zitat antworten Zitat