Björn
wrote on 10.05.11 at 12:01
Link to this post
Hi,

dank gestriger Hilfe konnte ich von einem Sender (http://mp3.ffh.de/ffhchannels/hqtop40.mp3) aufnehmen. Klappt recht gut und die Lieder werden geschnitten. Allerdings ist das Ende eigentlich nie passend.
Kann man das noch optimieren? Liegt das einfach am Sender? Also die Daten der Playlist passen nicht zum Sendestream?
Hast Du einen Link zum nachlesen wie das Schneiden funktioniert oder kannst Du einen kurzen Abriss geben? Du brauchst da nicht bei Adam und Eva anfangen, SW Entwicklung ist kein Fremdwort für mich.
Und noch eine Frage. Welche Delphi Version nimmst Du?

Ansonsten funktioniert das bisher von den Programmen die ich mir angeschaut habe am besten!
 
alex
2549 Posts
wrote on 10.05.11 at 12:50
Link to this post
Mahlzeit!

Du könntest dir mal das hier durchlesen: http://streamwriter.org/de/wiki/artikel/details/#cut - so ungefähr funktioniert das. Man kann das sicherlich optimieren (du kannst die Schneide-Einstellungen auch in den Stream-Einstellungen für jeden Stream einzeln parametrieren), aber das ist nicht ganz einfach. Muss aber irgendwann mal gemacht werden, das Problem ist einfach, dass ich nicht so der Audio-Spezialist bin, aber kommt Zeit, kommt Rat:-)
Ich selber benutze Delphi XE, streamWriter sollte man aber mit allen Delphi-Versionen >= 2009 (ich meine das war die Version, wo Unicode eingeführt wurde) entwickeln. Mehr Abwärtskompatibilität wäre schön, aber die Zeit ist so ja schon sehr knapp bemessen, wenn man das alles alleine regelt.. Darum habe ich auf niedrigere Delphi-Versionen "verzichtet". Falls du also irgendwann irgendwo anpacken möchtest… gerne.

Und danke für den letzten Satz!


Liebe Grüße,

Alex
LG/Best regards, Alex

"Journalism is printing what someone else does not want printed. Everything else is public relations."
- George Orwell

D1734FA178BF7D5AE50CB1AD54442494
 
Björn
wrote on 10.05.11 at 13:29
Link to this post
Hi Alex,

habs mal schnell überflogen, aber noch ist mir das mit den Metadaten noch nicht so klar. In der Richtung habe ich nie was gemacht.
Gibt es da Doku zu? Bei dem Sender ist es immer so das noch "unnötige" Sekunden mit im Lied sind. Wenn die Metadateien also Anfang und Ende ungefähr markieren, würde hier die Endemarke vom Sender wohl zu spät kommen. Lt. Text wird am Ende 75000 Bytes vor dem Metadaten Ende angefangen nach Stille zu suchen. Evtl. klappt auch die Stille Erkennung nicht.
Gibt es irgendeine Debug Möglichkeit in dieser Richtung? Ideal wäre natürlich wenn man die Metadaten mit den Streamdaten in einer Zeitachse hätte und vom Programm sehen würde ab welchem Zeit/Datenstempel die Stilleauswertung beginnt und wo Sie erfolgreich ist. In meinem Fall könnte die Metainfo ja an einer ganz falschen Stelle sein und das Schneiden könnte gar nicht erfolgreich sein.

Ich habe zwar bisher bei D7 aufgehört, aber hauptsächlich weil ich Close Source TAPI Tools habe und die nur bis D7 gehen. Sich in so ein Projekt hereinzufinden, zumal wenn man mit dem Thema bisher nichts zu tun hatte, ist alles andere als einfach. Aber mal sehen. Ich denke die alten Versionen sind in dem Fall auch nicht so wichtig.

Und: Ehre wem Ehre gebührt. Ich kann mir sehr gut vorstellen welche Arbeit in so einem Projekt steckt, auch wenn Delphi schon vieles einfacher macht. Und das Ergebnis ist gut, ohne Frage. Und Du supportest auch noch.


 
alex
2549 Posts
wrote on 10.05.11 at 16:17
Link to this post
Die Doku ist glaube ich etwas veraltet. Ich werde hier später wenn ich zuhause bin mal ausführlich antworten.
LG/Best regards, Alex

"Journalism is printing what someone else does not want printed. Everything else is public relations."
- George Orwell

D1734FA178BF7D5AE50CB1AD54442494
 
alex
2549 Posts
wrote on 10.05.11 at 21:14
Link to this post
So, ich versuche mal etwas ausführlicher zu antworten. Falls was fehlt oder nicht einleuchtend ist, immer raus mit der Sprache.

"habs mal schnell überflogen, aber noch ist mir das mit den Metadaten noch nicht so klar. In der Richtung habe ich nie was gemacht. Gibt es da Doku zu?"

Bestimmt, aber ich wüsste auf Anhieb nicht wo.. Ich kann es aber mal erklären. Also, da kommt ein MPEG-Stream rein, der aus einzelnen Frames besteht. Dann gibt es ein sogenanntes Meta-Intervall (das teilt der Server der den Stream sendetm im HTTP/ICY-Header im Feld "Metaint" mit). Lassen wir dieses Intervall 32768 sein. Das heißt, dass alle 32768 Bytes, die empfangen werden, entweder ein NULL-Byte sitzt, oder eine Längenangabe, die mit 16 multipliziert werden muss. Wenn es ein NULL-Byte ist, wird es ignoriert, bei der Längenangabe holt sich streamWriter die Titelinfos (nach der Längenangabe folgt ein String, der diese enthält). Diese Daten werden natürlich jeweils aus den Daten, die auf die Festplatte gehen, herausgeschnitten.
Ändern sich jetzt die Metadaten, wartet streamWriter ab, bis genug Daten da sind - wen man bei den Schneideeinstellungen 5 Sekunden gesagt hat, sucht streamWriter 2,5 Sekunden vor den neuen Metadaten (das zuende gespielte Lied) und 2,5 Sekunden nach den neuen Metadaten (Anfang des nächsten Liedes) nach Stille ab. Wie es weiter geht müsste bekannt sein. Also, nichts mit 75000 Bytes. Der Ansatz war eh schlecht, weil bei einem Stream mit 32kbps sind 75000 Bytes vielleicht ein paar Sekunden, bei einem mit 320kbps dem entsprechend weniger.

"Gibt es irgendeine Debug Möglichkeit in dieser Richtung? Ideal wäre natürlich wenn man die Metadaten mit den Streamdaten in einer Zeitachse hätte und vom Programm sehen würde ab welchem Zeit/Datenstempel die Stilleauswertung beginnt und wo Sie erfolgreich ist. In meinem Fall könnte die Metainfo ja an einer ganz falschen Stelle sein und das Schneiden könnte gar nicht erfolgreich sein."

Die Ideale Möglichkeit, wie du sie beschreibst, gibt es leider nicht. Allerdings etwas vielleicht etwas vergleichbares. Schnapp dir ein Lied, was falsch geschnitten wurde im Tab "Gespeicherte Tracks", dann im Kontextmenü "Schneiden" wählen. Du hast dann oben in der Toolbar so einen Zauberstab. Der Zeigt dir an, wo Stille erkannt wurde, in dem Track (wird dann so grau markiert). Die Einstellungen zur Stilleerkennung, die der Zauberstab benutzt, sind allerdings nicht die Stream-Einstellungen (der gespeicherte Track hat keine Referenz auf den Stream), sondern die allgemeinen Einstellungen (Datei->Einstellungen…). Ein paar Fehlerquellen kann man so vielleicht ausschließen.

"Sich in so ein Projekt hereinzufinden, zumal wenn man mit dem Thema bisher nichts zu tun hatte, ist alles andere als einfach. Aber mal sehen. Ich denke die alten Versionen sind in dem Fall auch nicht so wichtig."

Das stimmt. Doof ist, dass ich wenig kommentiert habe, was mir selber auch ab und an zum Nachteil wird. Allerdings ist das, was ich oben beschrieben habe, alles in der Datei ICEStream.pas zu finden. TICEThread baut die Verbindung zum Server auf, kloppt alle Daten in den Stream und der regelt alles, von wegen Schneiden, Speichern, Titel erkennen, etc… Falls du oder jemand der das hier ließt sich damit irgendwann mal beschäftigen möchte, kann man davon ausgehen, dass ich wo ich kann Hilfestellung leiste und wohl auch mal alles kommentieren würde. Bald ist sowieso mal Zeit, den Code aufzuräumen und zu überarbeiten, die letzte Funktion die ich einbauen wollte wäre http://streamwriter.org/de/tracker/issue/39/ - falls da nicht noch andere Dinge in den Tracker kommen, die ich gerne machen möchte.

"Und: Ehre wem Ehre gebührt. Ich kann mir sehr gut vorstellen welche Arbeit in so einem Projekt steckt, auch wenn Delphi schon vieles einfacher macht. Und das Ergebnis ist gut, ohne Frage. Und Du supportest auch noch."

streamWriter an sich gibt es schon sehr lange, aber die ersten "Gehversuche" waren niemandem zuzumuten, also nichts für die Öffentlichkeit. Die aktuelle Codebasis habe ich geschätzt vor 2 Jahren angefangen zu bauen. Ich glaube, in diesem Zeitraum habe ich jeden Tag irgendwas dran gemacht.
Und nochmal Danke;-)


Liebe Grüße,

Alex
LG/Best regards, Alex

"Journalism is printing what someone else does not want printed. Everything else is public relations."
- George Orwell

D1734FA178BF7D5AE50CB1AD54442494
 
Björn
wrote on 12.05.11 at 23:55
Link to this post
Hi Alex,

habe mir heute mal das RAD Studio XE bestellt. Dann kann ich mit dem Delphi XE darin mal versuchen die SW zu übersetzen.
Kostet momentan als Update genau so viel wie Delphi XE.

Björn
 
alex
2549 Posts
wrote on 12.05.11 at 00:10
Link to this post
:-DKrass. Damit hätte ich nicht gerechnet.
Übersetzt bekommen wir das, keine Frage!
LG/Best regards, Alex

"Journalism is printing what someone else does not want printed. Everything else is public relations."
- George Orwell

D1734FA178BF7D5AE50CB1AD54442494
 
Björn
wrote on 12.05.11 at 01:08
Link to this post
Hi,

wieso Krass?
Programmiere schon ewig mit Delphi. Halt mal die passende Gelegenheit mal was neueres als D7 zu nehmen und das Angebot war günstig.

Björn
 
alex
2549 Posts
wrote on 12.05.11 at 01:21 last edited by alex on 12.05.11 at 01:23
Link to this post
Ja, das ist schon wahr. Blöd für mich, ich habe wohl ein bisschen zu früh zugeschlagen und habe nur das Delphi XE und dann wohl auch mehr gezahlt. Unterm Strich aber auch teilweise egal, weil ich die anderen Sachen wohl sowieso nicht benutzen würde..
Naja, würde mich sehr freuen wenn es irgendwann nicht mehr nur ich bin, sondern ein Team, was streamWriter entwickelt und sich hier im Forum rumtreibt. Mal sehen, ob mein Quelltext dich nicht abschreckt;-)Wenn es irgendwelche Fragen oder so gibt bin ich jedenfalls immer bereit zu helfen, Chatten oder so würde auch gehen, je nachdem..
LG/Best regards, Alex

"Journalism is printing what someone else does not want printed. Everything else is public relations."
- George Orwell

D1734FA178BF7D5AE50CB1AD54442494
 
Alex
wrote on 12.05.11 at 01:40
Link to this post
Das C++ brauche ich auch nicht. Aber evtl. was von dem anderen und wenn nicht, ist es auch egal da es ja nicht mehr kostet. Hatte bisher halt immer gezögert.
Wenn das da ist werde ich auf jeden Fall mal die notwendigen Komponenten installieren und schauen ob ich deine App übersetzt bekomme. Zumal ich den FastMM auch für eine andere App gebrauchen kann. Mal sehen wie die läuft wenn ich die mit XE übersetze. Da geht es allerdings um einen SMTP Server mit automatischer PGP Verschlüsselung. Also fast das gleiche wie INternet Radio….

Welche XE Variante hast Du eigentlich?
 
alex
2549 Posts
wrote on 13.05.11 at 02:26
Link to this post
Das meiste läuft ja mit dem XE recht gut. Bis auf die üblichen Dinge, die bei Delphi seit langem irgendwelche Fehler haben und an die man sich schon gewöhnt hat, eben.
Ich habe die XE Professional.
LG/Best regards, Alex

"Journalism is printing what someone else does not want printed. Everything else is public relations."
- George Orwell

D1734FA178BF7D5AE50CB1AD54442494
 
Björn
wrote on 16.05.11 at 15:19
Link to this post
Hi Alex,

sauge mir gerade das RAD XE ISO runter. Mal sehen ob ich dann heute Abend zum installieren komme. Dann die paar Komponenten von Dir drauf und mal sehen was der Compiler dann so von sich gibt.
 
alex
2549 Posts
wrote on 16.05.11 at 15:55
Link to this post
Wunderbar:-)
Neben den im Wiki genannten Komponenten brauchst du noch die pngcomponents - die gibt es beim Embarcadero CodeCentral oder wie das heißt. Ansonsten noch optional madExcept und FastMM .. aber geht auch ohne die beiden.
Freue mich schon auf den nächsten Post von dir.
LG/Best regards, Alex

"Journalism is printing what someone else does not want printed. Everything else is public relations."
- George Orwell

D1734FA178BF7D5AE50CB1AD54442494
 
Bjoern
11 Posts
wrote on 16.05.11 at 17:45
Link to this post
Hi,

hattest Du irgendwo geschrieben welche Versionen Du von welchen Komponenten nutzt? Ich würde nämlich gerne ein binär kompatibles Ergebnis am Ende meiner Versuche erhalten.
 
alex
2549 Posts
wrote on 16.05.11 at 18:02
Link to this post
Am einfachsten wäre es wohl, wenn ich dir wenn ich zuhause bin einfach mein ganzes "lib"-Verzeichnis zusammenpacke und schicke. Das dauert aber noch 3-4 Stunden.. Die Versionen weiß ich so leider nicht.
LG/Best regards, Alex

"Journalism is printing what someone else does not want printed. Everything else is public relations."
- George Orwell

D1734FA178BF7D5AE50CB1AD54442494