AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi bass.dll, wie möglichst schnell Ende einer Mp3 mitbekommen?
Thema durchsuchen
Ansicht
Themen-Optionen

bass.dll, wie möglichst schnell Ende einer Mp3 mitbekommen?

Ein Thema von Dash · begonnen am 3. Jan 2007 · letzter Beitrag vom 3. Jan 2007
Antwort Antwort
Seite 1 von 2  1 2      
Dash
(Gast)

n/a Beiträge
 
#1

bass.dll, wie möglichst schnell Ende einer Mp3 mitbekommen?

  Alt 3. Jan 2007, 17:31
Hi,

ich experementiere gerade ein wenig mit der bass.dll rum, nur komme ich bei einer Sache nicht so ganz weiter.
Und zwar möchte ich das man eine Playlist zusammenstellen kann, nur wie kann ich jetzt sofort mitbekommen, dass die letzte Mp3 zu ende ist um die nächste abzuspielen?

Bei den Demos liegt dafür kein Beispiel bei!

Gruß
Dash
  Mit Zitat antworten Zitat
Benutzerbild von Gausi
Gausi

Registriert seit: 17. Jul 2005
885 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: bass.dll, wie möglichst schnell Ende einer Mp3 mitbekomm

  Alt 3. Jan 2007, 17:42
Such mal in der Bass-Dokumentation nach BASS_SYNC_END. Das sollte dir weiterhelfen.
  Mit Zitat antworten Zitat
Anthauri

Registriert seit: 1. Feb 2004
61 Beiträge
 
Delphi 6 Personal
 
#3

Re: bass.dll, wie möglichst schnell Ende einer Mp3 mitbekomm

  Alt 3. Jan 2007, 17:59
Ein ähnliches Problem hatte ich in meinem Player auch.

Dort läuft ein Timer, der unter anderem die Spielzeit des Songs darstellt.
Den nutze ich auch für die Abfrage, ob die aktuelle Position des Songs der Gesamtlänge entspricht.
Trifft das zu, muß der Song am Ende sein.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#4

Re: bass.dll, wie möglichst schnell Ende einer Mp3 mitbekomm

  Alt 3. Jan 2007, 18:03
Ich muss zugeben, dass ich ein wenig eingerostet bin, aber gab es da nicht mal so etwas, wie BASS_CHANNEL_GETLENGTH ?
Deshalb immer die Finger von Timern lassen, wenn es eben geht. Ist nicht gut, wenn der durchläuft.
Such dir raus, was du brauchst, diese Zeile gibt dir die Zeit an.
Round(BASS_ChannelBytes2Seconds(Chan, BASS_ChannelGetLength(chan)));
  Mit Zitat antworten Zitat
Anthauri

Registriert seit: 1. Feb 2004
61 Beiträge
 
Delphi 6 Personal
 
#5

Re: bass.dll, wie möglichst schnell Ende einer Mp3 mitbekomm

  Alt 3. Jan 2007, 18:20
@Nils_13

Liefert die von Dir genannte Funktion nicht das was sowieso schon in der "Player.Position" steht?

Und was das schlimme an Timern ist habe ich auch nicht ganz verstanden?
Was ist denn die Alternative zu einer solchen Zeitanzeige, die zyklisch aktualisiert wird?
  Mit Zitat antworten Zitat
Dash
(Gast)

n/a Beiträge
 
#6

Re: bass.dll, wie möglichst schnell Ende einer Mp3 mitbekomm

  Alt 3. Jan 2007, 18:24
Also ich werde das jetzt erstmal mit nen Timer und
Round(BASS_ChannelBytes2Seconds(Chan, BASS_ChannelGetLength(chan))); und
Round(BASS_ChannelBytes2Seconds(Chan, BASS_ChannelGetPosition(chan))); versuchen
Danke erstmal

Gruß
Dash
  Mit Zitat antworten Zitat
Benutzerbild von Cyberaxx
Cyberaxx

Registriert seit: 15. Jul 2005
311 Beiträge
 
Delphi XE5 Professional
 
#7

Re: bass.dll, wie möglichst schnell Ende einer Mp3 mitbekomm

  Alt 3. Jan 2007, 18:35
Da in den meisten Playern nen Timer Läuft, zum anzeigen der Zeit würd ich mal behaupten, so eignet sich hier nen Timer wohl hervoragend.

Ich habs damals bei mir auch per Timer gemacht...
Mein Source ist aber recht alt also nicht wundern.

Delphi-Quellcode:
var
  playtime : float;
  songpos : int64;
  titellaenge : float;
  songlength : int64;

songlength := BASS_streamgetlength(chan);
Titellaenge := BASS_channelbytes2seconds(chan, songlength);
songpos := BASS_channelgetposition(chan);
playtime := BASS_channelbytes2seconds(chan, songpos);

if iniTimerender = 0 then
  begin
  label_timer.Caption := formatdatetime('hh:nn:ss', (titellaenge - playtime) / (24 * 60 * 60));
  image_remain.Visible := true;
  end;

if iniTimerender = 1 then
  begin
  label_timer.Caption := formatdatetime('hh:nn:ss', playtime / (24 * 60 * 60));
  image_remain.Visible := false;
  end;
  if songlength - songpos = 0 then spielmodus := 'next';
Spielmodus := 'next'; lädt den nächsten Track, da die Zeit ja bei 0 ist also Track Ende...
Daniel
Das Aufwachen aus einem boesen Traum muss einen nicht erleichtern. Es kann einen auch erst richtig gewahr werden lassen, was man Furchtbares getraeumt hat, vielleicht sogar welcher furchtbaren Wahrheit man im Traum begegnet ist!
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#8

Re: bass.dll, wie möglichst schnell Ende einer Mp3 mitbekomm

  Alt 3. Jan 2007, 19:02
Hm, dann habe ich da was verwechselt. Dieser Code liefert mir die Gesamtlänge, um die es meiner Interpretierung nach, hier geht.
Delphi-Quellcode:
function TfrmMain.DurationMinSec(Sekunden : String) : String;
var Min, Sec : integer;
    SecToTime : string;
begin
   Min:= StrToInt(Sekunden) div 60;
   Sec:= StrToInt(Sekunden) - Min * 60;
   SecToTime:= Trim(Format('%2d:%.2d', [Min, Sec]));
   result:= SecToTime;
end;

[...]

DurationMinSec(IntToStr(fFiles[playindex].Dauer))
Die Dauer lese ich dem Anschein nach aus den Tags aus.
  Mit Zitat antworten Zitat
Anthauri

Registriert seit: 1. Feb 2004
61 Beiträge
 
Delphi 6 Personal
 
#9

Re: bass.dll, wie möglichst schnell Ende einer Mp3 mitbekomm

  Alt 3. Jan 2007, 19:24
Wie dem auch sei,

auf jeden Fall hat die Sache mit dem Timer auch einen Haken.

Bei meinem Player hatte ich einst den TMEDIAPLAYER benutzt, der netter weise Millisekunden liefert.
Den passenden Timer hatte ich ebenfalls in Millisekunden laufen.

Nachdem ich den BassdllPlayer nutze stehen nur noch Sekunden zur verfügung.
Der Timer läuft jetzt auch im Sekundentakt.

Bei exaktem hinschauen resultiert dadurch, dass ggf. vom Song ein Teil der letzten Sekunde fehlt,
denn die Abfrage, ob die Position im Song gleich der Songlänge entspricht, trifft ja zu sobald die letzte Sekunde angebrochen ist - und wenn der Timer gerade zufällig so zyklisch getaktet ist, dass er einen kurzen Moment nach Beginn der letzen Sekunde auslöst, wird der nächtse Song aufgerufen und der Rest nicht gespielt.

Da aber die meisten Songs am Ende eh ausklingen fällt das nicht so sehr auf.
Bei Titeln, die ineinander übergehen manchmal aber schon.
Beim TMEDIAPLAYER fehlte aufgrund der schnelleren Taktung weniger.

Da aber auch andere hier ähnlich verfahren dürfte diese Aufgabe "hinreichend genau gelöst sein".
Den alten TMEDIAPLAYER würde ich deswegen nicht wieder implementieren.
  Mit Zitat antworten Zitat
Nils_13

Registriert seit: 15. Nov 2004
2.647 Beiträge
 
#10

Re: bass.dll, wie möglichst schnell Ende einer Mp3 mitbekomm

  Alt 3. Jan 2007, 19:57
Man könnte ja Sekunden noch mit einem Milli-Sekunden Timer realisieren, dann müsste es funktionieren.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


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 18:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz