Cue sheets, e rips que se comportam como álbuns
Se você ripou CDs antes de dividir virar o padrão, um pedaço da sua coleção é um FLAC por disco com um arquivo de texto ao lado. A maioria dos players ou ignora o sheet, ou trata o que ele descreve como coisa de segunda classe. Eis o que o rox faz com isso.
O que um rip em cue realmente é
Um arquivo de áudio com um disco inteiro dentro, e um sheet .cue listando onde cada faixa começa. É o jeito fiel de preservar um CD, porque as pausas entre as faixas fazem parte do disco e dividir joga isso fora. É também o formato que quebra a premissa sobre a qual toda biblioteca de música é construída: a de que um arquivo é uma faixa.
Os players resolvem isso de uma entre três maneiras. Ignorar o sheet e mostrar uma faixa de setenta minutos. Mostrar as faixas do sheet, mas mantidas separadas da biblioteca de verdade, de modo que busca, ordenação e playlists se comportam diferente com elas. Ou levar a quebra a sério e absorvê-la de uma vez.
Linhas de verdade, não fragmentos
O rox indexa cada trecho do sheet como uma linha comum da biblioteca, identificada pelo arquivo dela mais o número da faixa. Tudo lá adiante lê aquilo como uma faixa, porque para tudo lá adiante é uma faixa. As playlists a registram, as audições grudam nela, a busca a encontra, as colunas de ordenação a ordenam, e nenhuma delas sabe que onze linhas apontam para o mesmo FLAC.
A alternativa que a maioria das implementações escolhe é um caminho sintético, album.flac#3, que mantém o banco de dados arrumado e passa o problema para cada pedaço de código que depois abrir aquele caminho. Um corte esquecido ali é um bug silencioso que lê bytes de tag do nada. Uma coleção sem cue sheet nenhum não paga nada por isso: os trechos vivem numa tabela lateral, e nada nos caminhos quentes os lê.
Tocando um trecho como um arquivo
A engine trata um trecho como o mundo inteiro daquela faixa: uma busca precisa até o começo dele, um corte com precisão de amostra nas duas pontas, e um limite de fim que toma o mesmo caminho de um fim de arquivo de verdade. Reprodução sem intervalo, crossfade, parar depois da atual e repetir funcionam todos sem saber que trechos existem.
O corte da cabeça é o detalhe que importa. Uma busca precisa cai num limite de pacote e não na amostra exata. Sem descartar os quadros entre a aterrissagem e o começo do trecho, toda faixa abre com o rabo da anterior. É esse o som de uma implementação de cue que ninguém terminou.
Faixas consecutivas de um rip dividem um grupo de álbum, e é isso que impede o crossfade de passar por cima das emendas sem intervalo do próprio disco. Um rip toca como o disco de onde foi cortado.
Escaneando, e mudando de ideia
O sheet reivindica a imagem dele. Enquanto um cue lista um arquivo, aquele arquivo não ganha linha própria, então você não acaba com onze faixas mais uma duplicata de setenta minutos. A atualidade se guia por qual dos dois foi modificado por último, então editar o sheet ou o áudio recorta o rip na próxima varredura. Apague o sheet e a imagem volta a ser uma única linha comum.
Os metadados preferem o sheet e caem nas tags da própria imagem. Sheets escritos antes de a disciplina de UTF-8 existir ganham um fallback em cp1252, porque rips antigos são exatamente o público para o qual este recurso existe.
Avaliações que não carimbam o disco inteiro
O rox normalmente escreve as avaliações nos próprios arquivos, o que é o certo quando um arquivo é uma faixa. Num rip em cue não é: a imagem pertence às onze faixas, então uma escrita por faixa carimbaria todas elas com as mesmas estrelas.
O escritor recusa a metade em arquivo para essas linhas e o banco de dados guarda o valor. O mesmo vale para edições de tag. Você fica com avaliações por faixa num rip, e sua imagem sai disso idêntica byte a byte.
As partes que você só notaria depois
- A exportação m3u escreve os trechos como
path#N, e a importação prefere uma correspondência exata de caminho, então uma lista faz a ida e volta por outro software sem colapsar na imagem. - O scrobbling e o aviso de faixa tocando deduplicam no par, então as onze faixas de um disco viram onze scrobbles em vez de um só, bem comprido.
- As audições voltam a grudar no trecho certo depois de uma nova varredura, então um disco mantém o histórico de reprodução por faixa mesmo quando todos os trechos carregam tags idênticas.
- Só o par de valores de álbum do ReplayGain é aproveitado. Valores de faixa escritos contra uma imagem de disco inteiro descrevem o disco, então são ignorados em vez de acreditados.
A medida disto não é se um rip toca. É se, um mês depois, alguma coisa na biblioteca ainda se comporta diferente por ter vindo de uma imagem.
Aponte para a prateleira que você nunca dividiu
O scanner pega os sheets já na primeira passagem, junto com todo o resto. Mais sobre o que quebra em escala de biblioteca.