Eu notei um comportamento ligeiramente estranho enquanto brincava com alguns arquivos MP3 no Windows 7 (32 bits) que comprei recentemente na Amazon. Eles são armazenados em um compartilhamento de rede (Samba) e, em essência, parece haver um atraso significativo ao iniciar a reprodução deles. Eu tinha assumido, desde que eu estava usando meu próprio software aqui, que era mais do que provável algo que eu estava fazendo; no entanto, o atraso está aparecendo na chamada real fopen
(estendendo isso ainda mais, isso também acontece com a caixa de diálogo GetOpenFileName, há uma pausa perceptível após o arquivo ser selecionado, antes que a caixa de diálogo seja fechada e o controle seja retornado para o código). Este último comportamento sugere que o compilador / toolchain é irrelevante aqui, já que esta é uma chamada nativa do Win32.
Um rastreamento Wireshark rápido mostra que a chamada aberta (ou GetOpenFileName) está acionando a leitura de todo o arquivo. O problema também aparece se o arquivo está localizado em outra caixa do Windows (por isso não é uma peculiaridade do Samba aqui). Parece estar relacionado aos metadados anexados ao arquivo; se eu despir, o arquivo é aberto quase instantaneamente. De interesse é que, em um arquivo que não apresenta esse problema, o Wireshark mostra que, mesmo assim, o Windows lerá ~ 64K na frente do arquivo e, em seguida, ~ 32K no final. Como você pode ter tags ID3 no início e no final do arquivo, parece que o Windows está pré-lendo a tag para seus próprios fins e, por algum motivo, as tags desses arquivos particulares fazem com que ele verifique todo o arquivo.
Meu Google até agora me levou a procurar manipuladores de propriedade e, especificamente, este link tinha muita informação útil sobre o assunto. Um pequeno problema - eu não tenho nenhum manipulador de propriedade definido para .mp3, ou qualquer outro conteúdo de áudio, por isso, estou com uma pequena perda para explicar esse comportamento.
Eu tinha um pensamento que possivelmente essa era uma tag ID3v4, já que me lembro de que isso poderia (em teoria) estar espalhado por todo o arquivo, o que explicaria o motivo pelo qual o Windows leria o arquivo inteiro. Não é, é ID2v3.