Cue-листи і рипи, які поводяться як альбоми
Якщо ви рипали CD до того, як розбиття стало нормою, частина вашої медіатеки - це один FLAC на диск із текстовим файлом поруч. Більшість програвачів або ігнорують лист, або вважають описане в ньому другосортним. Ось що з цим робить rox.
Що таке cue-рип насправді
Один звуковий файл на цілий диск і лист .cue, де написано, де починається кожен трек. Це точний спосіб зберегти CD, бо проміжки між треками - частина диска, а розбиття їх викидає. І це ж формат, який ламає припущення, на якому побудована будь-яка музична медіатека: що один файл - це один трек.
Програвачі вирішують це одним із трьох способів. Ігнорують лист і показують семидесятихвилинний трек. Показують треки листа, але тримають їх окремо від справжньої медіатеки, тож пошук, сортування й списки відтворення поводяться з ними інакше. Або роблять розрив справжнім і приймають його один раз.
Справжні рядки, а не уламки
rox індексує кожен проміжок листа як звичайний рядок медіатеки, впізнаваний за файлом плюс номером треку. Усе далі ланцюжком читає його як трек, бо для всього далі ланцюжком він треком і є. Списки відтворення знімають його знімком, прослуховування чіпляються до нього, пошук його знаходить, стовпці сортування його сортують, і жоден із них не знає, що одинадцять рядків указують на один FLAC.
Альтернатива, яку обирає більшість реалізацій, - це синтетичний шлях, album.flac#3, який тримає базу в порядку і перекладає задачу на кожен шматок коду, який потім цей шлях відкриє. Один пропущений розбір там - це тиха помилка, яка читає байти тегів із нізвідки. Медіатека без cue-листів не платить за це нічого: проміжки живуть в окремій таблиці, і на гарячих шляхах їх ніхто не читає.
Проміжок грає як файл
Рушій бере проміжок як цілий світ для цього треку: точна перемотка до його початку, точна за семплами підрізка з обох країв і межа кінця, яка йде тим самим шляхом, що й справжній кінець файлу. Відсутність пауз, кросфейд, «стоп після поточного» і повтор працюють, не знаючи, що проміжки існують.
Підрізка голови - та деталь, яка має значення. Точна перемотка потрапляє на межу пакета, а не на конкретний семпл, тож без скидання кадрів між потраплянням і початком проміжку кожен трек відкривається хвостом попереднього. Це і є звук недоробленої реалізації cue.
Треки одного рипа, що йдуть підряд, ділять альбомну групу, і це те, що не дає кросфейду розмивати власні безшовні склейки диска. Рип грає як той запис, з якого його зняли.
Сканування і зміна рішення
Лист забирає свій образ. Поки cue згадує файл, у цього файлу немає власного рядка, тож ви не отримуєте одинадцять треків плюс семидесятихвилинний дублікат. Свіжість рахується за тим із двох, що змінювався пізніше, тож правка листа або звуку заново нарізає рип при наступному скануванні. Видаліть лист, і образ згорнеться назад в один звичайний рядок.
Метадані віддають перевагу листу і відкочуються на власні теги образу. Листи, написані до того, як дисципліна UTF-8 стала нормою, отримують відкат на cp1252, бо старі рипи - це рівно та публіка, заради якої ця штука й зроблена.
Оцінки, які не штампують увесь диск
rox зазвичай пише оцінки в самі файли, і це правильний вибір, коли файл - це трек. На cue-рипі це не так: образ належить усім одинадцяти трекам, тож запис за треком проштампував би кожен із них тими самими зірками.
Записувач відмовляється від файлової половини для таких рядків, і значення тримає база. Те саме з правкою тегів. Ви отримуєте оцінки за треками на рипі, а ваш образ виходить із цього байт у байт тим самим.
Те, що ви помітите лише потім
- Експорт m3u пише проміжки як
path#N, а імпорт віддає перевагу точному збігу шляху, тож список ходить туди-назад через чужий софт, не згортаючись в образ. - Скробл і «зараз грає» дедуплікуються за парою, тож одинадцять треків диска скробляться як одинадцять треків, а не як один дуже довгий.
- Прослуховування заново чіпляються до проміжків після пересканування, тож диск зберігає історію за треками, навіть коли всі проміжки несуть однакові теги.
- Переноситься лише альбомна пара значень ReplayGain. Значення треку, зняті з образу цілого диска, описують диск, тому вони ігноруються, а не приймаються на віру.
Мірило тут не в тому, чи грає рип. Воно в тому, чи поводиться бодай щось у медіатеці місяць потому інакше лише тому, що це прийшло з образу.
Спрямуйте його на ту полицю, яку ви так і не розрізали
Сканер підхоплює листи на першому ж проході, нарівні з усім іншим. Докладніше про те, що ламається на масштабі медіатеки.