Рушій відтворення
Контракт рушія відтворення — вірність джерелу: декодувати початкові байти користувача з власною частотою джерела, з неушкодженою структурою релізу. Ця сторінка є специфікацією за цим.
Декодування
Посилання на цей розділУсе декодування — FFmpeg, у процесі, на кожній платформі: FLAC, MP3, APE, ALAC, AAC, PCM (WAV/AIFF), Ogg Vorbis, Opus, WavPack і DSD — це те, що приймає імпорт, а codec of record є те, що FFmpeg повідомляє з байтів, а не з розширення файла. Samples виходять як 32-bit float для вихідного етапу; перетворення sample format — єдине перетворення, яке виконується.
Вивід — нативний аудіо API платформи (Core Audio через cpal на desktop та iOS, AAudio на Android). Вихідний потік налаштовується на частоту дискретизації й кількість каналів джерела: файл 96 kHz відтворюється на 96 kHz. Етапу ресемплінгу немає. Типовий пристрій виводу визначається під час кожної побудови потоку, тож відтворення слідує за перемиканнями пристроїв у системі. На Android апаратно підтримані кодеки можуть повністю обходити FFmpeg для апаратного декодування.
Читання під час передавання
Посилання на цей розділВідтворенню не потрібні цілі файли. Аудіо читається через розріджений buffer, який забирає byte ranges на вимогу з локального файла, кешу або хмари, а перемотування відображає target sample у byte position, тож перемотування в незабрану ділянку починає забір звідти. Fetch arbiter надає пріоритет читанням треку, що грає, над preload, тож майбутній трек ніколи не затримує поточний.
Треки як вікна
Посилання на цей розділТрек — це не файл; це впорядкований список sample windows над одним або кількома файлами, побудований під час імпорту з CUE sheet або власної протяжності файла. Це одне представлення несе кожну форму диска: файл на трек, увесь диск в одному образі, прегап на кінці одного файла й початку іншого, а також рипи з втратами, нарізані по одному файлу на трек.
Вікна прегапів позначені як такі. Відтворення входить у трек із його прегапу, коли він є (index 00, приховане аудіо включене), доки годинник показує час треку: position обмежується нулем, доки власне трек не почнеться, а показана тривалість не включає прегап, як у CD-програвачі.
Без пауз
Посилання на цей розділНаступний трек відкривається й буферизується, доки грає поточний. Коли обидва мають однакові частоту дискретизації й кількість каналів, рушій з’єднує їх усередині живого аудіовиклику: потік ніколи не зупиняється, а межа точна до семплу. Коли формати відрізняються, stream перебудовується; це той випадок, де зміна формату все одно робить межу чутною.
Гучність
Посилання на цей розділІмпорт вимірює інтегрована гучність (EBU R128) і істинний пік для кожного треку й альбому під час проходу перевірки декодування. Replay gain виводиться з цих вимірів під час відтворення, ніколи не записується у файли: ціль −18 LUFS, обмеження таке, щоб істинний пік не кліпував, застосовується до треку або альбому й рівно перемикається на межах без пауз. Режим наразі постачається без інтерфейсу налаштувань і типово вимкнений; його можна задати у файлі конфігурації бібліотеки.
Паузи між сторонами
Посилання на цей розділСписки треків несуть структуру сторін і дисків, і рушій може зупинятися на межі сторони, показуючи запит продовжити, коли користувач умикає pause-between-sides. Зупинка — це стан playback-service, а не декодована тиша, тож продовження відбувається відразу.