Към съдържанието

Двигател за възпроизвеждане

Договорът на двигателя за възпроизвеждане е вярност към източника: да декодира оригиналните байтове на потребителя, със собствената честота на източника, със запазена структура на изданието. Тази страница е спецификацията зад това.

Цялото декодиране е FFmpeg, вътре в процеса, на всяка платформа: FLAC, MP3, APE, ALAC, AAC, PCM (WAV/AIFF), Ogg Vorbis, Opus, WavPack и DSD са това, което импортът приема, а каквото FFmpeg докладва от байтовете, не файловото разширение, е записаният кодек. Семплите излизат като 32-bit float за изходния етап; преобразуването на формата на семплите е единственото преобразуване, което се извършва.

Изходът е нативният аудио API на платформата (Core Audio чрез cpal на настолни системи и iOS, AAudio на Android). Изходният поток се конфигурира към честотата на дискретизация и броя канали на източника: файл с 96 kHz се възпроизвежда на 96 kHz. Няма етап за преизчисляване на честотата. Устройството за изход по подразбиране се избира при всяко изграждане на поток, така че възпроизвеждането следва смяната на системните устройства. На Android кодеци, поддържани от хардуера, могат изцяло да заобиколят FFmpeg за изнесено декодиране.

Възпроизвеждането не се нуждае от цели файлове. Аудиото се чете през разреден буфер, който изтегля диапазони от байтове при нужда, от локален файл, кеша или облака, а търсенето съпоставя целевия семпъл към позиция в байтове, така че търсене в неизтеглена област изтегля оттам. Разпределителят на изтегляния дава приоритет на четенията на текущата песен пред предварителното зареждане, така че предстояща песен никога не забавя текущата.

Песните като прозорци

Връзка към този раздел

Песен не е файл; тя е подреден списък от прозорци от семпли върху един или повече файлове, изграден при импорт от CUE sheet или от собствения обхват на файла. Това едно представяне носи всяка форма на диск: файл за всяка песен, цял диск в един образ, pregap, който живее в края на един файл и началото на друг, и рипове със загуба, нарязани по един файл на песен.

Pregap прозорците са маркирани като такива. Възпроизвеждането влиза в песен през pregap, когато има такъв (index 00, включително скрито аудио), докато часовникът показва време на песента: позицията се задържа на нула, докато започне самата песен, а показваната продължителност изключва pregap, както при CD плейър.

Без паузи между песните

Връзка към този раздел

Следващата песен се отваря и буферира, докато текущата звучи. Когато двете споделят честота на дискретизация и брой канали, двигателят ги свързва вътре в активното аудио обратно извикване: потокът никога не спира, а границата е точна до семпъл. Когато форматите се различават, потокът се изгражда отново, което е случаят, в който смяната на формат така или иначе прави границата чуваема.

Импортът измерва integrated loudness (EBU R128) и true peak за всяка песен и за албума по време на прохода за проверка на декодирането. Replay gain се извежда от тези измервания при възпроизвеждане, никога не се записва във файловете: цел −18 LUFS, ограничена така, че true peak да не клипира, приложена по песен или по албум, със смяна на границите при възпроизвеждане без паузи. Режимът в момента се доставя без интерфейс в настройките и е изключен по подразбиране; може да се зададе в конфигурационния файл на библиотеката.

Паузи между страни

Връзка към този раздел

Списъците с песни носят структурата на страните и дисковете си, а двигателят може да задържи на граница между страни и да покаже подкана за продължаване, когато потребителят включи pause-between-sides. Задържането е състояние на услугата за възпроизвеждане, не декодирана тишина, така че продължаването е незабавно.