Question

Je travaille sur une bibliothèque C qui lit les informations de balise de fichiers musicaux. J'ai déjà ID3v2 pris en charge, mais je ne peux pas comprendre comment les fichiers Ogg sont structurés.

J'ai ouvert un fichier .ogg dans un éditeur hexadécimal et je pouvais trouver les données d'étiquette parce que tout était lisible par l'homme. Mais tout depuis le début du fichier aux données de l'étiquette ressemblait à ordures. Comment ces données sont codées?

Je ne pas besoin d'aide dans le code actuel, j'ai juste besoin d'aide à visualiser ce qu'est une tête Ogg ressemble et quel encodage il utilise donc je que je peux le lire. Je voudrais utiliser une approche non-aki à la lecture des fichiers Ogg.

J'ai regardé le format Flac , qui a été utile.

Le fichier Flac je regarde environ 350 octets entre l'identifiant « flac » et la section Commentaires lisible par l'homme, et rien de tout cela est lisible dans mon éditeur hexadécimal, donc je suis sûr qu'il doit être < em> quelque chose important là-dedans.

Je suis sous Linux, et je n'ai pas l'intention de portage vers Windows ou OS X. Donc, si je dois utiliser une glibc seule fonction pour convertir l'encodage, je suis très bien avec ça.

Était-ce utile?

La solution

Comme cela est décrit dans le lien que vous avez fourni, les blocs de métadonnées suivants peuvent se produire entre le marqueur « flac » et le bloc de métadonnées VORBIS_COMMENT.

  
      
  • Streaminfo: Ce bloc contient des informations sur le flux entier, comme la fréquence d'échantillonnage, nombre de canaux, le nombre total d'échantillons, etc. Il doit être présent comme le premier bloc de métadonnées dans le flux. D'autres blocs de métadonnées peuvent suivre, et ceux que le décodeur ne comprend pas, il sautera.
  •   
  • APPLICATION: Ce bloc est destiné à être utilisé par des applications tierces. Le seul champ obligatoire est un identifiant de 32 bits. Cet ID est accordé sur demande à une demande présentée par les mainteneurs FLAC. Le reste est du bloc est définie par l'application enregistrée. Visitez la page d'inscription si vous souhaitez enregistrer un identifiant pour votre application avec FLAC.
  •   
  • padding: Ce bloc permet une quantité arbitraire de rembourrage. Le contenu d'un bloc de bourrage n'a pas de sens. Ce bloc est utile quand on sait que les métadonnées sera édité après l'encodage; l'utilisateur peut demander à l'encodeur de réserver un bloc Rembourrage de taille suffisante pour que lorsque les métadonnées est ajouté, il écrasera simplement le rembourrage (qui est relativement rapide) au lieu d'avoir à l'insérer dans le bon endroit dans le fichier existant (qui exigent normalement la réécriture du fichier entier).
  •   
  • SEEKTABLE: Ceci est un bloc en option pour le stockage de rechercher des points. Il est possible de demander à un échantillon donné dans un flux FLAC sans une table rechercher, mais le délai peut être imprévisible car le débit peut varier considérablement dans un cours d'eau. En ajoutant chercher des points à un flux, ce délai peut être considérablement réduite. Chaque point de recherche prend 18 octets, donc une résolution de 1% dans un cours d'eau ajoute moins de 2k. Il ne peut y avoir qu'un seul SEEKTABLE dans un cours d'eau, mais la table peut avoir un certain nombre de rechercher des points. Il y a aussi un « espace réservé » spécial seekpoint qui seront ignorées par les décodeurs, mais qui peut être utilisé pour l'espace de réserve pour l'avenir chercher l'insertion de points.
  •   

Juste après la description ci-dessus, il y a aussi la spécification du format de chacun de ces blocs. Le lien dit aussi

  

Tous les chiffres utilisés dans un bitstream FLAC sont des nombres entiers; il n'y a pas de représentations à virgule flottante. Tous les chiffres sont big-endian codés. Tous les numéros ne sont pas signés, sauf indication contraire.

Alors, qu'est-ce que vous manque? Vous dites

  

Je voudrais une approche non-aki à la lecture des fichiers Ogg.

Pourquoi ré-écrire une bibliothèque pour le faire quand ils existent déjà?

Autres conseils

Le format de fichier Ogg est documenté . Il y a une très belle visualisation graphique que vous avez demandé une description détaillée écrite.

Vous pouvez également regarder libogg qui est une bibliothèque sous licence BSD-open source pour la lecture et l'écriture de fichiers Ogg.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top