Вниманию предлагается серия постов и экспериментальный плеер от Ferenc Koscsó (только Mac). Если вы все еще слушаете на компьютере и интересуетесь DSD, то некоторые интересные подробности только для вас! Впрочем, многое справедливо и для любого компьютерного аудио.
Если вы не хотите ничего читать, то просто забирайте и пробуйте софт Release v0.9.7 · ferenckoscso/bpplay · GitHub
bpplay: бескомпромиссная архитектура компьютерного аудио и минимализм программного обеспечения
Бит-перфектный музыкальный плеер для macOS и вопрос, который привёл к его созданию — часть 1
В эпоху громких, чрезмерно обработанных коммерческих записей мало что так резко противостоит мейнстриму, как обращение к практике звукозаписи 1950-х и 1960-х годов: зачастую лучшее, что можно сделать с записью, — вообще ничего с ней не делать. Мы стараемся сохранить исполнение в его первоначальном виде, используя всего несколько микрофонов, словно записываем голограмму. Для альбомов My Reel Club® это просто реальность: будь то LP, лента или даже цифровой релиз высокого разрешения, мы избегаем постобработки в любой форме, потому что каждое дополнительное вмешательство, каждое лишнее звено в цепи может лишь ухудшить результат.
Отсюда естественным образом возникает вопрос: можно ли перенести этот принцип в мир компьютерного цифрового воспроизведения?
bpplay — это эксперимент, призванный ответить на этот вопрос. Минималистичный бит-перфектный музыкальный плеер для macOS, написанный на C, с единственной целью: доставить сэмплы музыкального файла к ЦАП по максимально короткому и детерминированному пути, нетронутыми, в их исходном виде. О том, что это означает на практике и почему такой инструмент может иметь смысл — несмотря на то, что нечто подобное уже существует, — и пойдёт речь в этой статье.
Две вещи, которых мы никогда не знаем наверняка
Прежде чем перейти к технической стороне вопроса, стоит остановиться на парадоксе, который незримо присутствует во всём этом эксперименте.
Жизнь аудиофила протекает в условиях своеобразного противоречия. С одной стороны, огромные усилия направлены на то, чтобы сделать сигнал «чистым»: дорогие кабели, сетевые фильтры, генераторы тактовых импульсов без джиттера — всё это призвано защищать чистоту. С другой стороны, есть две вещи, которых мы никогда не знаем наверняка, — и именно они определяют, что вообще может означать чистота и точность воспроизведения.
Первое: мы не знаем, что именно слышали создатели записи, когда мастер был закончен. На каких мониторах, в какой комнате, при какой громкости было принято решение: «вот так правильно»? Запись представляет собой последовательность решений, принятых в конкретной ситуации прослушивания, и впоследствии получить доступ к этому эталону уже невозможно. Следовательно, точность воспроизведения — это точность по отношению к оригиналу, который никто не знает в точности.
Странно, не правда ли?
Второе: мы не знаем, что именно делает компьютер во время воспроизведения. Современная машина одновременно выполняет десятки процессов; в фоновом режиме операционная система индексирует данные, сканирует сеть, перемещает страницы памяти, а аудиомикшер выполняет ресэмплинг и микширование, как было описано несколькими строками выше. К тому моменту, когда сигнал достигает ЦАПа, он уже прошёл через непрозрачную, трудно предсказуемую программную машину, внутренние процессы которой практически невидимы для нас.
С первым парадоксом ничего не поделать. А вот второй можно устранить. Цепь нельзя сделать идеальной, но её можно сделать известной и предсказуемой. Если каждый шаг виден, можно точно проследить, что происходит между файлом и ЦАПом.
bpplay не обещает, что «звучит лучше». Он обещает, что вы можете знать, что происходит во время воспроизведения.
Что обычно делает приложение музыкального плеера?
Стоит уточнить, относительно чего именно bpplay является минималистичным.
Когда вы слушаете музыку через обычное приложение macOS, звук не поступает непосредственно в ЦАП; он проходит через системный аудиомикшер, являющийся частью подсистемы CoreAudio. Там с ним может происходить многое: ресэмплинг, микширование в формате с плавающей точкой, программная регулировка громкости. В большинстве ситуаций эти операции удобны и полезны — несколько приложений могут одновременно воспроизводить звук, громкость можно регулировать, и всё просто работает.
Поэтому, когда мы воспроизводим аудиофайл высокого разрешения на современной операционной системе, путь к цифро-аналоговому преобразователю обычно представляет собой непрозрачный чёрный ящик. В аудиофильских и инженерных кругах два фундаментальных вопроса почти никогда не получают детерминированного ответа:
-
Является ли передача бит-перфектной? Достигают ли двоичные данные, хранящиеся в исходном файле (в нашем примере — сэмплы, закодированные в PCM), аппаратного интерфейса полностью и без изменений?
-
Согласовано ли воспроизведение по времени? Вносят ли фоновые процессы операционной системы, операции с диском и планирование работы CPU микроскопические ошибки синхронизации — так называемый программный джиттер — по мере отправки сэмплов наружу?
Большинство коммерческих плееров жертвуют сквозной детерминированностью ради удобных функций. Связь между аппаратной и программной частью превращается в многоуровневый, асинхронный и непредсказуемый процесс. Чтобы понять, зачем нужен подход bpplay, полезно посмотреть, как работает «типичный» медиаплеер.
-
Непрерывная нагрузка на I/O: программа считывает аудиофайл с накопителя — пусть даже с NVMe SSD — небольшими буферами, фрагмент за фрагментом. Это порождает постоянные операции файловой системы и аппаратные прерывания (IRQ) на протяжении всего воспроизведения.
-
Декодирование в реальном времени: ядра процессора постоянно сталкиваются с небольшими скачками нагрузки, распаковывая сжатые форматы (например, FLAC, ALAC) в необработанный PCM-поток в реальном времени. Постоянное переключение контекста может влиять на системные часы и уровень шума на шинах питания.
-
Микшерные механизмы операционной системы: при настройках по умолчанию данные проходят через внутренний аудиомикшер системы (Windows Audio Engine, macOS CoreAudio или Linux PipeWire/PulseAudio). Эти программные уровни часто произвольно изменяют частоту дискретизации, применяют дитер или совместно используют аудиоресурсы со звуками системных уведомлений.
Если цель состоит в том, чтобы именно то, что было утверждено при производстве записи, достигало ЦАПа — бит в бит, сэмпл в сэмпл, — то эти же операции уже становятся помехой. Каждая из них представляет собой место, где сигнал может измениться, а обработка может породить побочный шум.
Поэтому bpplay обходит весь промежуточный слой. Он получает исключительный контроль над ЦАПом (hog mode), так что ни одно другое приложение не может получить к нему доступ, отключает микширование и передаёт сэмплы через прямой callback реального времени (IOProc), выполняя на критическом пути минимально возможное число операций. Никакой программной регулировки громкости, дитеринга или преобразования частоты дискретизации. Громкость и все дальнейшие операции передаются устройству, которое именно для этого и предназначено: ЦАПу и усилителю.
Когда преобразование всё же имеет смысл
Однако важно, чтобы это не превратилось в религиозную догму. «Полное отсутствие преобразований» само по себе не является целью; настоящая цель — чтобы ЦАП получал идеальные данные, идеальный сигнал, то есть формат, в котором он работает лучше всего. Для большинства современных ЦАПов это как раз нативный, нетронутый материал, и в таком случае подход bpplay очевиден.
Но не каждый ЦАП устроен так. Многие преобразователи всё равно выполняют внутреннее преобразование: например, delta-sigma ЦАП преобразует каждый входящий PCM-поток в собственное внутреннее представление с высокой частотой дискретизации, прежде чем превратить его в аналоговый сигнал. Если это внутреннее преобразование выполнено посредственно — вычислительные возможности чипа ЦАПа ограничены, — может оказаться, что тщательно выбранный апсемплинг на стороне компьютера или преобразование PCM→DSD даст лучший конечный результат, чем передача этой работы ЦАПу. Компьютер способен использовать на порядки больше ресурсов и более сложные алгоритмы, чем внутренняя схема ЦАПа.
На первый взгляд это противоречит принципу бит-перфектности, но на самом деле лишь переосмысливает его. Разница заключается не в наличии или отсутствии преобразования, а в том, является ли оно осознанным, контролируемым решением или скрытым, непредусмотренным вмешательством системы. Преобразование, выбранное намеренно, с учётом конкретного ЦАПа и позволяющее работать ему в оптимальном режиме, полностью соответствует философии детерминированного сигнального пути. bpplay представляет собой пуристский крайний вариант, поскольку его ценность заключается в проверяемости и эталонном характере; но более широкий принцип не состоит в отрицании преобразований. Он заключается в том, что в цепи ничего не должно происходить без нашего одобрения.
Вся музыкальная композиция загружается в память
Одно из важнейших свойств bpplay — и то, что отличает его от большинства плееров, — способ загрузки данных. Весь трек загружается в память ещё до того, как прозвучит первый звук. Нет буферизации «на лету», нет чтения с диска во время воспроизведения: весь трек (или плейлист) находится в оперативной памяти, причём закреплён там, чтобы операционная система не могла выгрузить его на диск (mlock), и оттуда поступает к ЦАПу с единственным копированием в памяти. Это можно назвать монолитной буферизацией на основе RAM.
Преимущество ощутимо. Во время воспроизведения диск молчит — нет операций I/O и мелких прерываний, вызванных активностью накопителя. В типичной тестовой конфигурации исходный SSD/HDD может находиться на той же самой цепочке Thunderbolt/USB, что и ЦАП, и это совершенно не имеет значения, поскольку во время воспроизведения нет необходимости читать данные с накопителя. К этому моменту музыка уже находится в памяти.
У всего этого есть цена, и расплачиваться приходится памятью: из-за согласования формата на этапе загрузки и, в случае DSD, упаковки DoP. Альбом высокого разрешения в DSD может занимать несколько гигабайт: файл DSD256 размером 4 ГБ после загрузки может занимать целых 7,5 ГБ. На первый взгляд это выглядит расточительством и наверняка удивляет многих. Но именно такова цена чистого, детерминированного сигнального пути — и, что особенно важно, это не ухудшает звук: сигнал остаётся нетронутым бит в бит. Почему размер увеличивается именно настолько и почему это не связано ни с какими потерями, будет одной из тем следующей, технической части этой серии.
Воспроизведение «сопровождается шумом»
Модель с полной загрузкой в RAM имеет следствие, выходящее за рамки простой предсказуемости.
Обычный плеер постоянно заставляет компьютер работать во время воспроизведения. Он читает данные с диска или SSD, декодирует сжатый формат, управляет буферами, а при нехватке памяти вынужден также выполнять подкачку. Каждая операция создаёт кратковременную импульсную нагрузку на процессор и накопитель, а через них — и на блок питания компьютера.
Здесь начинается самое интересное. Импульсные блоки питания современных компьютеров зависят от нагрузки: когда CPU внезапно начинает декодирование или SSD инициирует чтение, мгновенное потребление тока резко возрастает, а затем столь же быстро возвращается обратно.
Эти крутые переходные процессы в принципе способны генерировать высокочастотный шум — RF/EMI, — который может распространяться по шинам питания, через контур заземления или посредством излучения и становиться фактором, мешающим работе чувствительного ЦАПа, расположенного рядом с компьютером или питающегося от той же шины. Тот же эффект усиливается обработкой прерываний, пробуждением фоновых процессов и подкачкой памяти: каждая из этих операций создаёт небольшую нерегулярную нагрузку, влияющую на электрическое поведение машины.
Вызывает ли этот шум слышимую разницу в конкретной системе, в значительной степени зависит от конструкции ЦАПа. Гальванически хорошо изолированный ЦАП с собственным блоком питания как раз и создан для подавления подобных помех. Поэтому bpplay не утверждает, что «звучит лучше благодаря этому». Его утверждение скромнее и лучше защищено с технической точки зрения: модель с полной загрузкой в RAM устраняет сам источник шума, причём в самом его начале. Если трек уже находится в памяти, во время воспроизведения нет чтения с диска, декодирования или подкачки — а значит, не возникают и скачки нагрузки, которые изначально могли бы породить шум. Самый чистый способ устранить источник помех — не дать ему возникнуть вообще.
О порядках величины шума
Чтобы это явление не оставалось абстрактной спекуляцией, стоит посмотреть на реальные цифры. Возьмём современный высокоскоростной M.2 NVMe SSD — накопитель PCIe Gen 4 или Gen 5.
В энергосберегающем режиме простоя такое устройство потребляет всего около 50 милливатт, то есть примерно 0,05 Вт. Но в тот момент, когда плеер запрашивает новый блок данных, контроллер и микросхемы NAND Flash за микросекунды «раскручиваются» до полной скорости, и потребление подскакивает до 6–7 Вт, а при экстремальных пакетных операциях — даже до 9–10 Вт. Поскольку слот M.2 работает при фиксированном напряжении 3,3 В, в пересчёте на ток это означает:
- Ток в режиме простоя: около 15 мА
- Пиковый ток при активном чтении: около 2000 мА (2 А)
Однако ключевым является не само пиковое значение, а то, каким образом оно достигается. Этот примерно 130-кратный скачок происходит не постепенно, а в виде переходного процесса, практически мгновенно — примерно за одну микросекунду. Скорость изменения тока (di/dt) — решающий параметр для индуктивных колебаний напряжения и излучаемого электромагнитного шума — в таком случае составляет:
di/dt ≈ (2 A − 0.015 A) / 0.000001 s ≈ 1,985,000 A/s
Почти два миллиона ампер в секунду. С точки зрения материнской платы это мощный электромагнитный импульс, который может вызвать кратковременную просадку напряжения на локальных конденсаторах, в то время как высокочастотная составляющая, распространяющаяся по проводникам, способна модулировать окружающие цифровые и аналоговые схемы.
Именно здесь становится понятно, что даёт модель bpplay. Традиционный плеер во время одного трека продолжительностью 3–4 минуты — в зависимости от размера буфера — заставляет SSD десятки или даже сотни раз совершать резкие колебания между 15 и 2000 миллиамперами. С bpplay такой скачок по существу происходит только один раз: в первые мгновения после запуска трека, когда его содержимое считывается в память.
После этого потребление SSD стабилизируется на спокойном, почти постоянном уровне, di/dt стремится к нулю, и этот конкретный источник шума — переходные процессы накопителя — практически исчезает на время воспроизведения. Остальная часть компьютера, конечно, продолжает работать, но один из самых резких и наиболее часто повторяющихся источников электрических помех в цепи замолкает именно тогда, когда звучит музыка.
«Но это уже было сделано»
Существует как минимум ещё один плеер для macOS — VeraVox, который практически слово в слово придерживается той же философии: сигнал должен оставаться нетронутым. Hog mode, IOProc, DoP, отсутствие DSP. Однако картина сложнее, и по двум направлениям.
С одной стороны, VeraVox — отполированный, хотя всё ещё находящийся на стадии бета-тестирования продукт: графический интерфейс, измерительные инструменты, веб-управление, множество форматов — серьёзная и хорошо выполненная работа. bpplay, напротив, создавался не как продукт, а как эксперимент, proof of concept, ценность которого как раз и заключается в простоте. Один C-файл, ноль внешних зависимостей, каждая строка видна и может быть проверена. Любой, кто хочет понять, как воспроизводить музыку бит-перфектно на macOS, способен прочитать исходный код bpplay от начала до конца за один день. Важен не коммерческий успех, а понимание процессов и извлечение из них урока.
С другой стороны, у bpplay есть действительно иное и принципиально важное решение: уже упомянутая модель полной загрузки в RAM. Большинство плееров — включая VeraVox — используют так называемый кольцевой буфер и во время воспроизведения также считывают данные из файла, обычно блоками по 50–100 МБ. bpplay этого не делает: одним шагом, с заданными приоритетами, он загружает всё, после чего диск больше не выполняет никакой работы.
Это измеримое различие, а не просто вопрос вкуса.
Чего в bpplay нет?
Характер bpplay, пожалуй, проще всего понять, сравнив его с тем, что знакомо большинству пользователей. Roon, Audirvana и HQPlayer — зрелые приложения, выполняющие огромное количество задач, которых bpplay сознательно не делает:
- Никакого управления библиотекой и медиаменеджмента. Никаких обложек, просмотра метаданных, функции «Discover». bpplay воспроизводит файлы и папки — и ничего больше.
- Никакого графического интерфейса. Вместо визуального мира Roon и элегантности Audirvana — окно Terminal (а в соответствующем режиме воспроизведения и его может не быть).
- Никакого сетевого стриминга и мультирум-воспроизведения. RAAT от Roon, сетевые рендереры — всего этого нет в Core.
- Никакой обработки сигнала. Вся концепция HQPlayer построена вокруг апсемплинга, сложных цифровых фильтров и модуляторов — bpplay является полной противоположностью: нулевая обработка сигнала, и именно в этом заключается смысл.
- Никакой регулировки громкости, темброблоков и микширования. Всё это передаётся ЦАПу и усилителю.
Список поначалу может даже выглядеть удивительно. Но в действительности картина иная: каждая отсутствующая функция одновременно является местом, где сигнал может измениться, или куда между файлом и ЦАПом может вклиниться непредсказуемый программный этап — со всеми его шумовыми последствиями. В bpplay этих функций нет не потому, что на них не хватило времени, а потому, что их отсутствие и является целью.
Эталон, а не конкурент
Здесь проявляется, пожалуй, самое интересное применение bpplay — то, что отличает его от перечисленных выше программ не по функциям, а по роли.
Представим ситуацию, когда вы знакомитесь с новым ЦАПом. Вы что-то слышите: характер, окраску, ощущение пространства. Но как определить, принадлежит ли это самому ЦАПу — или записи, — а не является следом какого-то скрытого этапа обработки в программном обеспечении плеера? Большинство программ создают непрозрачную завесу между файлом и ЦАПом, и если сам путь непредсказуем, то непредсказуемым становится и мнение, которое вы формируете о ЦАПе.
С bpplay этот фактор неопределённости исчезает. Поскольку путь от файла к ЦАПу известен, детерминирован и свободен от вмешательств, то результат, который вы слышите, гораздо в большей степени является результатом работы самого ЦАПа. Программа делает цепь предсказуемой, поэтому реальные возможности ЦАПа — и его ограничения — проявляются честнее.
Эта роль точно соответствует нашему подходу к выпуску записей. Записи My Reel Club® создаются известным способом, без постобработки: точно известно, что находится в канавке или на ленте, поскольку сама запись также производится нами, обычно перед аудиторией. Теперь к ним присоединяется программный плеер с такой же строгостью и детерминированным принципом работы. Вместе они образуют полностью контролируемую тестовую цепь: известный исходный материал, предсказуемый плеер и в конце единственный неизвестный элемент, который действительно стоит исследовать, — сам новый ЦАП.
Таким образом, bpplay отказывается от красивого интерфейса и удобных функций, но взамен предлагает нечто другое: эталон. Фиксированную точку, относительно которой можно проводить измерения. Именно поэтому он не является конкурентом Roon или HQPlayer — у него другая задача. Они предназначены для комфортного повседневного прослушивания; bpplay нужен для того, чтобы можно было понять, что делает остальная часть цепи после компьютера.
Второй эксперимент внутри эксперимента
У bpplay есть слой, который вообще не имеет отношения к звуку, но представляет собой поучительную часть этой истории.
В конце концов, за проектом в привычном смысле не стоит профессиональный опыт разработки программного обеспечения: отправной точкой были инженерный опыт и опыт работы с медиатехнологиями, а не написание кода для аудио реального времени внутри CoreAudio.
bpplay был создан при участии языковой модели Claude Opus 4.8.
НО!
Задание заключалось не в том, чтобы «создать аудиофильский бит-перфектный плеер».
Архитектура была задана заранее: модель полной загрузки в RAM, hog mode, сигнальный путь без вмешательств. Были заранее определены и функции: поддержка DoP, gapless-воспроизведение, сегментация по форматам. Эти решения следовали из принципов Hi-Fi и практического опыта, а не от модели. Модель была партнёром в реализации — в лабиринте API CoreAudio, в написании бит-точного кода и отладке.
Это само по себе эксперимент, другой эксперимент внутри плеера: что происходит, когда человек с твёрдыми представлениями, но без привычки к разработке, создаёт серьёзное программное обеспечение с помощью языковой модели? Движение DIY (Do-It-Yourself) всегда было популярно среди взыскательных любителей музыки, не являющихся инженерами.
Теперь, похоже, приходит время и для DIY-софта: мы можем адаптировать важные элементы компьютерного прослушивания музыки под собственные потребности.
Этот опыт показывает, что идея работает удивительно хорошо, если у человека есть видение и способность выносить суждения. Модель не заменяет видение, а лишь ускоряет его реализацию. Решения — что исключить, что относится к чистому сигнальному пути, а что является избыточным украшательством — на протяжении всего процесса должен принимать человек. И именно эти решения делают bpplay тем, чем он является. С момента первого промпта весь процесс занял примерно две недели.
Этот опыт, вероятно, заслуживает отдельной статьи, но он уместен и здесь, потому что bpplay — не просто плеер, но и моментальный снимок того, как сегодня можно создавать программное обеспечение, а также того, насколько разработчики операционных систем поддерживают — или, наоборот, затрудняют — требовательное компьютерное прослушивание музыки.
Для кого он предназначен?
Core-версия bpplay предназначена не для всех. Как уже отмечалось несколькими строками выше, у неё нет графического интерфейса — она запускается из Terminal и управляется клавишами. Взамен она делает ровно то, что обещает, и каждое её решение прозрачно.
Она предназначена для тех, кому интересно, что на самом деле происходит между файлом и ЦАПом; кто ценит инструмент, делающий ровно столько, сколько необходимо, и ничего больше; кому нравится возможность проверить сам код. И особенно для тех, кто сравнивает ЦАПы или знакомится с ними и хочет использовать плеер, который не влияет на оценку, — фиксированную эталонную точку в собственной системе.
Что bpplay Core умеет сегодня
Это сводка текущего, проверенного на реальном оборудовании состояния Core-версии. Всё перечисленное здесь подтверждено работой с реальными ЦАПами (XMOS и интерфейсом Amanero Combo 384/768), вплоть до DSD256.
Поддерживаемые форматы
- WAV (целочисленный PCM, 16/24/32 бит)
- FLAC (без потерь, через встроенный однозаголовочный декодер)
- AIFF / AIF (PCM без потерь, big-endian, однократное преобразование при загрузке)
- DSF (DSD), воспроизводимый через DoP — DSD64, DSD128 и DSD256
- Поддерживаются варианты потоков с плавающей точкой и целочисленные варианты
- Поддерживаются многоканальные WAV и .dsf
- Поддержка MQA, включая обработку MQA на самом устройстве
Сигнальный путь
- Эксклюзивный доступ к аппаратуре (hog mode) — ни одно другое приложение не может обратиться к ЦАПу
- Прямой доступ к CoreAudio HAL через callback IOProc реального времени, выполняющий только memcpy
- Никакой программной регулировки громкости, дитеринга, ресэмплинга или DSP любого рода
- Автоматическое переключение частоты дискретизации в соответствии с файлом, поэтому системный ресэмплер не запускается
- Однократное преобразование формата без потерь при загрузке; путь реального времени остаётся чистым копированием
Модель полной загрузки в RAM
- Весь трек (или плейлист) загружается в память до начала воспроизведения
- Буфер закрепляется с помощью mlock, поэтому ОС не может выгрузить его на диск
- Нулевой дисковый I/O и нулевое декодирование во время воспроизведения
Работа с DSD
- Автоматический DoP: расширение .dsf включает упаковку DoP без необходимости устанавливать какой-либо флаг
- DSD64 / DSD128 / DSD256, независимо от частоты — частота несущей DoP масштабируется вместе с частотой
- Предупреждение на очень высоких частотах DSD на случай, если ЦАП не сможет их обработать
Воспроизведение и удобство
- Gapless-воспроизведение между треками одного формата и частоты
- Рекурсивный обход папок: достаточно указать папку (или несколько), и программа воспроизведёт всё содержимое в альбомном порядке, на неограниченную глубину
- Альбомы с разными частотами автоматически разделяются на чистые, отдельные сегменты воспроизведения
- Короткий антищелчковый ramp в начале и конце для защиты цепи
- Запрет перехода в режим сна во время воспроизведения (Mac не перейдёт в спящий режим посреди альбома)
- Управление с клавиатуры из Terminal: следующий, предыдущий, пауза, выход (расширенный пульт на базе Siri появится позже)
Инженерная сторона
- Один C-файл плюс несколько зависимостей, состоящих только из заголовков, — ноль внешних библиотек
- Чистая компиляция одной командой make, без предупреждений
- Каждая строка сигнального пути видна и доступна для аудита
- Поддержка MacOS 10.15 и новее
- Минимальный объём необходимой RAM: 8 ГБ
То, чего здесь намеренно нет, — графического интерфейса, управления библиотекой, сетевого стриминга и любой обработки сигнала — описано в статье выше; именно отсутствие этих функций и является сутью проекта.
Тем же, кто хочет функционально насыщенный плеер с красивым интерфейсом, множеством форматов для комфортного повседневного прослушивания, подойдут Roon, Audirvana, HQPlayer, VeraVox (бета-версия, но уже достаточно функциональная) или любой другой серьёзный плеер. bpplay с ними не конкурирует — его роль иная. В конечном счёте он является воплощением одного принципа: зачастую лучшее, что можно сделать с сигналом, — вообще ничего с ним не делать.
В следующей части автор заглянет под капот: разберёт, как на самом деле выглядит бит-перфектный сигнальный путь, что DoP означает для DSD, почему файл размером 4 ГБ превращается в памяти в 7,5 ГБ — и почему это не является потерей, — а также как bpplay работает с различными форматами, используя одну чистую цепь.






















