Перейти до вмісту

Конвеєр імпорту

Імпорт перетворює папку файлів на запис каталогу, точний до релізу, не змінюючи жодного байта файлів. Ця сторінка описує конвеєр за перебігом із посібника користувача.

Відстежувані папки моніторяться платформними file-system events, із відкладеним запуском, і перескановуються під час зміни; сканування узгоджується з наявним списком кандидатів, а не починає все заново. Сканер класифікує папку як один реліз (аудіо прямо всередині або дископодібні підпапки на кшталт CD1/CD2) або рекурсивно заходить у неї як у збірку. Файли класифікуються за розширенням на аудіо, зображення й документи, потім аудіо перевіряється: важливий codec — той, який FFmpeg знаходить у байтах, а не розширення файла. Папки з маркерами часткового завантаження виключаються до завершення завантаження.

CUE sheet перетворює один аудіообраз на список треків. Parser обробляє pregaps і postgaps, performers та ISRCs для окремих треків, а також CUE-структури з одним файлом-образом і з одним файлом на трек. Межі треків перетворюються з CUE frames (1/75 секунди) на точні позиції samples, які пізніше стають байтові й семплові вікна для відтворення.

Ідентифікація за один прохід читає з папки три типи доказів:

  • disc ID, MusicBrainz-відбиток точної структури треків CD, обчислений із журналу рипу або CUE sheet;
  • штрихкоди, декодовані зі сканів обкладинок платформним vision framework і прочитані з полів CUE catalog;
  • текст: номери каталогу й вільний текст із зображення OCR, імен папок і файлів та текстових файлів у рипі.

Вбудовані аудіотеги навмисно не є доказами: вони описують те, у що повірив тегер, а не те, чим є видання. (Вони наповнюють резервні метадані, коли користувач імпортує реліз як невідомий.)

Disc ID і штрихкод шукаються паралельно: Disc ID у MusicBrainz, штрихкод у MusicBrainz і Discogs одночасно, а результати зіставляються: результати, що сходяться на групі релізів, збігаються; збіги номера каталогу звужують список видань; розбіжність між сигналами показується користувачу як явний конфлікт, а не як тиха найкраща здогадка. Кожен результат несе походження (знайдено за Disc ID, за штрихкодом, за збігом каталогу), щоб інтерфейс міг сказати, чому пропонується рядок.

MusicBrainz опитується анонімно з суворим темпом один запит на секунду. Discogs автентифікується особистим token користувача зі сховища ключів, працює в межах своїх обмежень частоти з повторами, а відхилений token повідомляється як такий, щоб інтерфейс міг позначити це, а не тихо провалювати пошуки. Відповіді кешуються на сесію, а сирий JSON джерела, що перемогло, архівується в базі даних для майбутньої переінтерпретації.

Підтвердження імпорту виконує, по черзі:

  1. Перевірка декодування: кожен трек декодується від початку до кінця; рип, який не може повністю декодуватися, провалює імпорт до будь-якого запису (config flag може вимкнути це).
  2. Аналіз гучності: інтегрована гучність і істинний пік вимірюються для кожного треку й альбому під час того самого проходу декодування, зберігаються для replay-gain.
  3. Вибір обкладинки: вибране зображення (remote, зображення з папки або вбудоване) перемальовується в мініатюру для показу; оригінал зберігається серед файлів релізу, якщо він прийшов із папки.
  4. Атомарний запис: release, tracks, credits, identities, formats, segments, files і cover записуються однією transaction. Напівімпортованого стану немає.

Реліз з’являється з посиланням на файли користувача на місці. Якщо користувач вибрав керування у хмарі, завантаження відбувається після запису як перехід сховища, а початкові байти файлів лишаються джерелом істини весь час; нічого з того, що користувач дав bae, ніколи не видаляється й не змінюється.

Розпізнавання рипів

Посилання на цей розділ

Кожен реліз записує content hash структури імпортованої папки (відносні шляхи й розміри, незалежно від розташування). Повторні сканування використовують його, щоб позначати папки, які вже є в бібліотеці, а повторні імпорти того самого рипу знаходять і замінюють свій попередній реліз замість дублювання.