Länge eines mp3s auslesen
Übersicht

HopsBetreff: Länge eines mp3s auslesen |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Morgen...
also: ich bin dabei ein "audio-abspielprogramm" (ich vermeide hier den begriff DJ-software^^)zu verbrechen, doch nund steh ich vor dem (wie mir scheint) vorerst einzigen problem dabei: man muss nicht spulen können (falls dass dann eh nur noch ein kleiner schritt sein sollte, dann nätürlich schon), weil das programm nur für eigene zwecke eingesetzt wird, aber die länge der mp3 dateien müsste ich auslesen, um die übergänge zu gestalten... da das programm wirklich nur einfach sein sollte, habe ich bis jetzt aus faulheit auf die bass.dll (is das die??) verzichtet, aber nun sehe ich fast keine andere möglichkeit... oder? und wie kompliziert/umschreibaufwädig wird die einbindung? läuft dann das ganze abspielen über die bass.dll? danke schon mal im vorraus!! mfg achja: noch eine andere frage nebenbei: eignen sich (bei blitzplus!) die "trees" auch für die darstellung der gesamten festplatten ordner oder dauert das zu lange? danke hops |
||
sdjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Wieso eigendlich "morgen"?
Also auslesen von Mp3s: schau mal auf http://www.wotsit.org/list.asp...tton=GO%21. Du musst die einzelnen Frames der Datei auslesen und zusammenaddieren. Vielleicht hat es schon jemand gemacht. Ich kann dir morgen (wenn ich es nicht vergesse [am besten mal 'ne Mail schicken]) den Source posten. Vllt aber schafft es jemand anderes vorher. BlitzBass ist eigendlich sehr einfach gehalten und da die Ausgabequelität deutlich besser ist, emfehle ich dir das wärmstens. Schreibe einfach die Function PlayMusic(), PauseChannel(), StopChannel() etc mit BlitzBass neu und du kannst den gesamten Quelltext weiternutzen (ohne Gewähr, versteht sich =)). Und Die gesamte Festplatte würde ich niemals in einem auslesen. Fange die Auswahl des Nutzers ab und lese dann das gewähle Verzeichnis aus. Die ganze Festplatte in einem zu scannen kann dich möglicherweise mehrere Minuten dauern. Hoffe das hilft erstmal. Und hoffe, du kannst bis morgen warten ![]() |
||
sdjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Du Glückskeks du!
Habe zufälligerweise den Code auch auf meinem zweiten Rechner gefunden. Dafür krieg ich aber ein großes Dankeschön, okeh? Code: [AUSKLAPPEN] Print milli2min(getmp3laenge("blahblahblah.mp3"))
Input End Function milli2min$(i) t=i/1000 t2=t*1000 m2$=Str(i-t2) If Len(m2$)=2 Then m2$="0"+m2$ If Len(m2$)=1 Then m2$="00"+m2$ mt=t/60 t2=mt*60 m$=Str(mt) s$=Str(t-t2) If Len(s$)=1Then s$="0"+s$ Return m$+":"+s$+"."+m2$ End Function Function getmp3laenge(f$) vbr=0 f1=ReadFile(f$) x=0 p=0 start=0 Repeat b=ReadByte(f1) If b=255 b=ReadByte(f1) c=b And 224 If c=224 error=0 d=b And 24 d=d Shr 3 If d=0Then version=3 If d=1Then error=1 If d=2Then version=2 If d=3Then version=1 d=b And 6 d=d Shr 1 If d=0Then error=1 If d=1Then layer=3 If d=2Then layer=2 If d=3Then layer=1 b=ReadByte(f1) d=b Shr 4 bitrate=0 If version=1 If layer=3 If d=0 Then bitrate=-1 If d=1 Then bitrate=32 If d=2 Then bitrate=40 If d=3 Then bitrate=48 If d=4 Then bitrate=56 If d=5 Then bitrate=64 If d=6 Then bitrate=80 If d=7 Then bitrate=96 If d=8 Then bitrate=112 If d=9 Then bitrate=128 If d=10 Then bitrate=160 If d=11 Then bitrate=192 If d=12 Then bitrate=224 If d=13 Then bitrate=256 If d=14 Then bitrate=320 If d=15 Then bitrate=-1 EndIf EndIf d=b And 12 d=d Shr 2 If version=1 If d=0Then frequenz=44100 If d=1Then frequenz=48000 If d=2Then frequenz=32000 EndIf d=b And 2 d=d Shr 1 padding=d If bitrate<=0 Or error=1 x=x-1 Else If x=0 Then start=FilePos(f1)-3 totbit=totbit+bitrate SeekFile(f1,FilePos(f1)-8+(bitrate*1000*144/frequenz+padding)) EndIf x=x+1 EndIf EndIf Until Eof(f1) CloseFile(f1) vbr=totbit/x Return (FileSize(f$)-start)*8/vbr End Function Ich habe die Funktion bereits seit einigen Monaten in Benutzung und bin noch nie auf irgendwelche seltsamen Ergebnisse gekommen. Es ist nur ratsam, da die Funktion völlig exakt und deshalb langsam ist, die errechnete Länge zu speichern anstatt sie bei jedem Programmstart neu zu berechnen. |
||
Hops |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
geeeilheit pur!! ![]() das gibt neuen schwung^^ dachte nich, dass das geht, und dann gleich mit beispiel dazu! jetzt bekommste auch dein dickes DANKESCHÖN! ![]() jaa, wegen blitzbass, ich denk ma, ich werd dass früher oder später einbauen... aber erstma sich da sein zeug zusammenzufinden in den 100ten threads ohne sinn ![]() naja, ich such ma... bis denne hops edit: boah.. sry, aber bei bass steig ich grad ganich durch, gibt soo viele threads mit iwelchen verwirrenden besipielen, die allemiteinander nicht funktionieren da (schätze ich) die version 2.3 nicht mehr abwärtskompatibel is... naja... wie auch immer... |
||
sdjh |
![]() Antworten mit Zitat ![]() |
|
---|---|---|
Mir fällt noch ein: Brauchst du auch die Längenberechnung für WAVs? Wenn wir schon dabei sind.
Zu BlitzBass: Eigendlich machst du in etwa folgendes: Code: [AUSKLAPPEN] function playmusic(path$)
BASS_end() BASS_clear() BASS_Play(path$) end function die Funktionen von BASS heißen sicherlich anders, aber der Sinn ist hoffentlich klar: Channel beenden, RAM aufräumen und neuen Stream abspielen. Wenn die Funktion einmal funktioniert, dann ist's genauso einfach zu benutzen, wie die Blitz-Funktionen. |
||
Übersicht


Powered by phpBB © 2001 - 2006, phpBB Group