AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Problem mit Sync bei BASS.DLL
Thema durchsuchen
Ansicht
Themen-Optionen

Problem mit Sync bei BASS.DLL

Ein Thema von Marco Steinebach · begonnen am 29. Jul 2009 · letzter Beitrag vom 16. Aug 2009
 
Marco Steinebach

Registriert seit: 4. Aug 2006
503 Beiträge
 
Delphi 5 Enterprise
 
#1

Problem mit Sync bei BASS.DLL

  Alt 29. Jul 2009, 10:25
Hallo zusammen,
kann mich vielleicht jemand davor bewahren, mich aus dem Fenster, und ich meine kein virtuelles, zu stürzen?
Ich habe eine Funktion, teil eines Players, die eine Datei, mittels der BASS.DLL, öffnet, und zwei Syncs setzt. Funktioniert alles prima, aber manchmal wird der Sync für das Trackende ausgelöst, manchmal nicht. Es ist leider einer dieser so sehr beliebten nicht-reproduzierbaren Fehler.
Könnte sich mal jemand die Funktion ansehen, ob ich da einen Fehler drin habe, oder hatte vielleicht jemand schon mal ein solches Problem?
Delphi-Quellcode:
function TPlayer.fNeu(s: HStream; name: string; Fehlerausgabe: boolean): HStream;
// aufruf: s ist der als letztes erzeugte Stream
// name der zu öffnenede Dateiname
// fehlerausgabe (nur zu debutzwecken).
// und dekodieren steht, in diesem Fall auf true.
var
  flags: DWord;
begin
  result := 0;
  if s <> 0 then
// wenn noch was gespielt hat...
  begin
    BASS_ChannelStop (s);
    BASS_StreamFree (s)
  end;
  if Dekodieren then
    flags := BASS_Stream_Decode
  else
    flags := 0;
  if pos ('://', UpperCase (name)) > 0 then
    s := BASS_StreamCreateURL (PChar(dateiname), 0, flags, NIL, NIL)
  else
    s := BASS_StreamCreateFile (False, PChar(dateiname), 0, 0, flags);
// In dem Fall kommt StreamCreateFile zum einsatz.
  if s = 0 then
  begin
    if Fehlerausgabe then
      Fehler(format(_('Cannot play %s. (Errorcode: %d)'), [dateiname, BASS_ErrorGetCode]));
    exit
  end;
  if Dekodieren then
  begin
    s := BASS_FX_TempoCreate (s, BASS_FX_FREESOURCE);
// Um später Tempo, Frequenz etc. ändern zu können.
    if s = 0 then
    begin
      if Fehlerausgabe then
        Fehler(format(_('Cannot play %s. (Errorcode: %d)'), [dateiname, BASS_ErrorGetCode]));
      exit
    end
  end;
  hs_ende := BASS_ChannelSetSync (s, BASS_SYNC_END, 0, Sync_AmTrackEnde, nil);
Sync_AmTrackEnde ist in der Klasse bekannt und als SYNCPROC mit aufruf stdcall deklariert.
// und hier liegt das Problem, meist wird sie ausgeführt, manchmal nicht.
  hs_CF := BASS_ChannelSetSync(s, BASS_Sync_OneTime + BASS_SYNC_POS,
    BASS_ChannelSeconds2Bytes (s,
    Round (BASS_ChannelBytes2Seconds (s, BASS_ChannelGetLength(s, BASS_Pos_Byte))) - CrossfadeSekunden),
    Sync_Crossfade, nil);
// setzt, ein paar Sekunden vor dem Trackende einen zweiten Sync.
  BASS_ChannelSetAttribute (s, BASS_Attrib_Vol, lautstaerke);
  BASS_ChannelGetAttribute (s, BASS_Attrib_Tempo_Freq, Dateifrequenz);
  if Dekodieren then
  begin
    BASS_ChannelSetAttribute (s, BASS_Attrib_Tempo, geschwindigkeit);
    BASS_ChannelSetAttribute (s, BASS_Attrib_Tempo_Freq, Dateifrequenz + frequenz);
    BASS_ChannelSetAttribute (s, BASS_Attrib_Tempo_Pitch, Tonhoehe);
  end;
  result := s;
end;
Fällt vielleicht jemand was dazu ein? Ich hänge schon sooo lange an diesem Problem…
Viele Grüße
Marco
Marco Steinebach
  Mit Zitat antworten Zitat
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:00 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz