Frage

Ich arbeite an einer C-Bibliothek, die Tag-Informationen von Musikdateien liest. Ich habe schon hätte ID3v2 gekümmert, aber ich kann nicht herausfinden, wie Ogg-Dateien strukturiert sind.

Ich öffnete eine Ogg-Datei in einem Hexeditor und ich konnte die Tag-Daten finden, weil das alle Menschen lesbaren war. Aber alles vom Anfang der Datei an die Tag-Daten sah aus wie Müll. Wie werden diese Daten verschlüsselt?

Ich brauche keine Hilfe in dem eigentlichen Code, ich brauche nur helfen, zu visualisieren, was ein Ogg-Header aussieht und was es Codierung verwendet, damit ich, dass ich es lesen kann. Ich möchte einen nicht-Hacky Ansatz Dateien zu lesen Ogg verwenden.

Ich habe mich auf dem Flac-Format , die hilfreich waren.

Die FLAC-Datei auf Ich bin auf der Suche hat etwa 350 Bytes zwischen dem „flac“ Kennung und der vom Menschen lesbaren Bemerkungsfeld an, und nichts davon ist für Menschen lesbaren in meinem Hex-Editor, so bin ich sicher, dass es sein muss < em> etwas wichtig drin.

Ich verwende Linux, und ich habe nicht die Absicht, Windows oder OS X portieren Also, wenn ich nur eine glibc verwenden müssen Funktion, um die Codierung zu konvertieren, mir geht es gut damit.

War es hilfreich?

Lösung

Wie im Link beschrieben wird Ihnen zur Verfügung gestellt, die folgenden Metadatenblöcke zwischen dem „flac“ Marker und dem VORBIS_COMMENT Metadatenblock auftreten können.

  
      
  • STREAMINFO: Dieser Block Informationen über den gesamten Strom hat, wie Abtastrate, Anzahl der Kanäle, die Gesamtzahl der Proben, etc. Es muss als ersten Metadatenblock in dem Strom vorhanden sein. Andere Metadatenblöcke folgen können, und diejenigen, dass der Decoder nicht versteht, wird es überspringen.
  •   
  • ANWENDUNG: Dieser Block ist für die Verwendung durch Anwendungen von Drittanbietern. Das einzige Pflichtfeld ist eine 32-Bit-Kennung. Diese ID wird auf Anfrage an eine Anwendung durch den FLAC-Maintainer gewährt. Der Rest ist der Block durch die registrierte Anwendung definiert ist. Besuchen Sie die Registrierungsseite, wenn Sie möchten, dass eine ID für Ihre Anwendung mit FLAC registrieren.
  •   
  • padding: Dieser Block ermöglicht eine beliebige Menge an Polsterung. Der Inhalt eines POLSTERUNG Block hat keine Bedeutung. Dieser Block ist nützlich, wenn es bekannt ist, dass die Metadaten nach der Codierung bearbeitet werden; kann der Benutzer die Codierer anweisen, einen POLSTERUNG Block von ausreichender Größe zu reservieren, so dass, wenn Metadaten hinzugefügt werden, wird es einfach die Polsterung überschreibt (was relativ schnell ist), anstatt sie an die richtige Stelle in der vorhandenen Datei einzufügen, die (das würde normalerweise erfordern die gesamte Datei umgeschrieben).
  •   
  • SEEKTABLE: Dies ist ein optionaler Block für Punkte zu speichern suchen. Es ist möglich, jede gegebene Probe in einem FLAC-Stream ohne suchen Tabelle zu suchen, aber die Verzögerung kann unberechenbar sein, da die Bitrate weit innerhalb eines Stroms variieren. Durch die Zugabe von Punkten in einem Stream suchen, kann diese Verzögerung erheblich reduziert werden. Jeder Suchpunkt 18 Bytes stattfindet, so dass 1% Auflösung innerhalb eines Stroms fügt weniger als 2k. Es kann nur einen SEEKTABLE in einem Strom, aber die Tabelle eine beliebige Anzahl von Suchpunkten haben. Es gibt auch ein spezielles ‚Platzhalter‘ seekpoint, die von Decodern ignoriert, aber auf maximal Reserveraum genutzt werden kann für Punkteinfügevorgangs Zukunft zu suchen.
  •   

Kurz nach der obigen Beschreibung gibt es auch die genaue Angabe des Formats von jedem dieser Blöcke. Der Link auch sagt

  

Alle Zahlen in einem FLAC-Bitstrom verwendet ganze Zahlen sind; es gibt keine Gleitkommazahl Repräsentationen. Alle Zahlen sind Big-Endian codiert. Alle Zahlen sind ohne Vorzeichen, sofern nicht anders angegeben.

Also, was fehlt Ihnen? Sie sagen,

  

ich einen nicht-Hacky Ansatz möchte Ogg-Dateien zu lesen.

Warum neu schreiben, eine Bibliothek zu tun, wenn sie bereits vorhanden ist?

Andere Tipps

Das Ogg-Datei-Format ist dokumentiert hier . Es ist eine sehr schöne grafische Darstellung, wie Sie mit einer ausführlichen schriftlichen Beschreibung angefordert werden.

Sie können auch sehen libogg , die eine Open-Source BSD-lizenzierte Bibliothek zum Lesen und Schreiben von Ogg-Dateien.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top