Como posso determinar o comprimento do cabeçalho de um arquivo MP3?
Pergunta
Estou escrevendo um programa para diferenciar e copiar arquivos ou segmentos inteiros com base em alterações em cada extremidade (RSYNC-Sque ... mas mais como uníssono). A idéia principal é manter minha pasta de música (todos os MP3s) atualizados em vários locais.
Gostaria de enviar atualizações segmentadas se apenas pequenas partes do arquivo tivessem mudado, em vez de copiar o arquivo inteiro. Para isso, preciso de uma maneira de diferenciar segmentos do arquivo.
Inicialmente, tentei gerar hashes para blocos de cada arquivo (todos os n bytes eu hash o segmento). Percebi que, quando mudei um atributo (tag ID3v2 em um MP3), todos os blocos de hash mudariam. Isso faz sentido, como eu acho que o cabeçalho está crescendo ao adquirir novas informações.
Isso me leva à minha pergunta real. Eu gostaria de saber como determinar o comprimento do cabeçalho de um MP3, para que eu pudesse criar 2 hashes comparáveis.
1) A meta informação do arquivo (cabeçalho)
2) O fluxo MPEG real com áudio (este hash deve permanecer inalterado se tudo o que faço é alterar as informações de tags)
Estou perdendo mais alguma coisa?
Obrigado!
Ty
Solução 3
Eu acabei usando o taglibsharp. desenvolvedor.novell.com/wiki/index.php/taglib_sharp
Outras dicas
Se você deseja determinar as informações do cabeçalho, você também:
- a) precisa usar uma biblioteca de MP3 que possa fazer a análise para você, ou
- b) Vá para o Especificação MP3 e analisá -lo conforme necessário.
Se tudo o que você deseja verificar o comprimento das tags ID3V2, você pode descobrir informações sobre sua estrutura em http://www.id3.org/id3v2.4.0-Structure.
Se você ler os três primeiros bytes e eles são iguais a "ID3", pule para o 7º byte e leia o tamanho do cabeçalho. Tenha cuidado, porque o tamanho é armazenado como um "inteiro sincronizado".