Pergunta

Eu estou trabalhando em uma biblioteca C que lê as informações de tag de arquivos de música. Eu já tenho ID3v2 cuidado, mas eu não consigo descobrir como Ogg são estruturados.

Eu abri um arquivo .ogg em um editor hexadecimal e eu poderia encontrar os dados de tag porque era legível todos humanos. Mas tudo, desde o início do arquivo com os dados de tag parecia lixo. Como é que esta dados codificados?

Eu não preciso de qualquer ajuda no código real, eu só preciso de ajuda visualizando o que um Ogg olhares cabeçalho gostam e que codificação ele usa para que eu que eu possa lê-lo. Eu gostaria de usar uma abordagem não-hacky para leitura de arquivos Ogg.

Eu estive olhando para o Flac formato , que tenha sido útil.

O arquivo Flac Eu estou olhando tem cerca de 350 bytes entre o identificador "FLAC" ea seção Comentários legível, e nenhum dos que é legível no meu editor hex, então eu tenho certeza que tem de ser < em> algo importante lá dentro.

Eu estou usando Linux, e não tenho nenhuma intenção de portar para Windows ou OS X. Então, se eu precisar usar um glibc única função para converter a codificação, eu estou bem com isso.

Foi útil?

Solução

Como é descrito no link fornecido, os seguintes blocos de metadados pode ocorrer entre o marcador "FLAC" eo bloco VORBIS_COMMENT metadados.

  • STREAMINFO: Este bloco tem a informação sobre todo o fluxo, como taxa de amostra, o número de canais, o número total de amostras, etc Deve estar presente como o primeiro bloco de metadados na corrente. Outros blocos de metadados podem seguir, e os que o decodificador não entende, ele vai pular.
  • APLICAÇÃO: Este bloco é para uso por aplicativos de terceiros. O campo só obrigatória é um identificador de 32 bits. Este ID é concedida, a pedido de uma aplicação pelos mantenedores da FLAC. O restante é de que o bloco é definido pela aplicação registada. Visite a página de registro se você gostaria de registrar um ID para a sua aplicação com FLAC.
  • padding: Este bloco permite uma quantidade arbitrária de preenchimento. O conteúdo de um bloco PADDING não têm significado. Este bloco é útil quando se sabe que os metadados vai ser editado após a codificação; o usuário pode instruir o codificador para reservar um bloco PADDING de tamanho suficiente para que, quando metadados é adicionado, ele vai simplesmente substituir o preenchimento (que é relativamente rápido) em vez de ter que inseri-lo no lugar certo no arquivo existente (que faria normalmente requerem reescrever o arquivo inteiro).
  • SEEKTABLE: Este é um bloco opcional para armazenar buscar pontos. É possível procurar qualquer amostra em um fluxo FLAC sem buscar mesa, mas o atraso pode ser imprevisível desde o bitrate podem variar amplamente dentro de um córrego. Ao adicionar buscar aponta para um fluxo, este atraso pode ser significativamente reduzido. Cada procurar ponto leva 18 bytes, de modo resolução de 1% dentro de um fluxo acrescenta menos de 2k. Pode haver apenas um SEEKTABLE em um córrego, mas a tabela pode ter qualquer número de buscar pontos. Há também um especial 'espaço reservado' seekpoint que será ignorado pelos decodificadores, mas que pode ser usado para reservar espaço para futuras buscar a inserção ponto.

Logo após a descrição acima, há também a especificação do formato de cada um desses blocos. O link também diz

Todos os números usados ??em um bitstream FLAC são inteiros; não há representações de ponto flutuante. Todos os números são big-endian codificada. Todos os números não são assinados salvo indicação em contrário.

Então, o que está faltando? Você diz

Eu gostaria de uma abordagem não-hacky para leitura de arquivos Ogg.

Por que re-escrever uma biblioteca para fazer isso quando eles já existem?

Outras dicas

O formato de arquivo Ogg está documentado aqui . Há uma visualização gráfica muito agradável como você pediu com uma descrição detalhada por escrito.

Você também pode querer olhar em libogg que é uma biblioteca licença BSD de código aberto para leitura e gravação de arquivos Ogg.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top