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

Foi útil?

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".

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