В прошлый раз мы рассказали о библиотеках для аудиосинтеза на C++. Сегодня поговорим об альтернативных инструментах, которые заточены под работу с объемным звуком и подходят для коррекции акустики помещения, — библиотеках CamillaDSP и DaisySP, а также фреймворке Spatial Audio.
CamillaDSP
Это — открытая rust-библиотека, предназначенная для разработки цифровых кроссоверов и акустических фильтров. Её представил программист Хенрик Энквист, который долгое время использовал утилиту BruteFIR для обработки многоканального аудио, но устал от регулярных вылетов и ограничений — в частности, программа умела работать только с КИХ-фильтрами. Собственное решение Хенрика поддерживает цифровые биквадратные (рекурсивные) и нерекурсивные фильтры, использующие свертку в реальном времени методом БПФ. Также присутствует поддержка миксеров для передачи звука между акустическими каналами.
CamillaDSP — это кроссплатформенное решение, которое можно запустить на Windows, Linux и macOS. Пайплайн обработки звука состоит из трех потоков. Первый отвечает за захват аудио и конвертирует семплы в 64-битные файлы с плавающей точкой, второй содержит необходимые фильтры, а третий — передает информацию в буфер звуковоспроизводящего устройства (например, ALSA, PulseAudio, WASAPI или CoreAudio). Также в составе библиотеки присутствует python-скрипт, визуализирующий сформированный пайплайн.
Проект развивается всего пару лет, и в его работе встречаются баги, однако автор быстро исправляет недостатки и добавляет функциональность — обновления выходят примерно раз в месяц. Если вы хотите познакомиться с библиотекой поближе, обратите внимание на документацию. Там есть не только гайды по быстрому старту, но и рекомендации по настройке утилиты для работы на слабых устройствах.
Spatial Audio Framework
Фреймворк представили инженеры из финского университета Аалто. Изначально он предназначался для разработки алгоритмов имитации пространственного звучания, однако со временем функциональность расширили. Сегодня Spatial Audio Framework совместными усилиями развивают не только разработчики, но и специалисты в области пространственных аудиотехнологий.
Среди ключевых модулей в составе фреймворка можно выделить функции векторного амплитудного панорамирования (saf_vbap), а также наборы алгоритмов реверберации для акустического моделирования помещения (saf_reverb) и работы со сферическими антенными решётками (saf_sh). Стоит отметить, что в основу фреймворка положены библиотеки MKL, Apple Accelerate и OpenBLAS, которые содержат методы для решения задач линейной алгебры и используются в высокопроизводительных вычислениях, а также наборы инструкций SIMD вроде SSE, AVX и AVX-512.
Разработчики Spatial Audio Framework рекомендуют начинать знакомство с инструментом на примерах — они собраны в репозитории на GitHub. Например, там представлен код, реализующий кодировщик для работы с амбиофоническим звуком (ambi_enc), или генератор виртуального микрофонного массива с изменяемой диаграммой направленности (beamformer).
DaisySP
Библиотека цифровой обработки сигналов, заточенная под платы Daisy (или Arduino). Это — многофункциональная платформа, которую можно использовать как настольный синтезатор, гитарную педаль или коммутационную плату. Девайс разработала команда программистов из компании Electrosmith, проектирующей софт и инструменты для музыкантов. Платы Daisy можно или приобрести на официальном сайте (стоит $30), или спаять самостоятельно, так как все необходимые схематики и даташиты переданы в open source. В частности, в репозитории на GitHub можно найти файлы для проектировочных программ EAGLE и Fritzing.
Инструмент поддерживает достаточно большое количество синтезаторов звука и фильтров — например, биквадратный, переменного состояния и с гребнеобразным частотным спектром. Из доступных эффект-процессоров можно выделить реверберацию, задержку и децимацию. В то же время DaisySP совместим с фреймворком JUCE для разработки плагинов и GUI-приложений. Кстати, автор JUCE также создал предметно-ориентированный язык для цифровой обработки сигналов, который называется SOUL. О нем мы рассказывали в прошлом материале.
В целом вокруг инструмента формируется активное сообщество. Его участники ведут обсуждение на официальном форуме и в Slack-канале, где делятся собственными проектами на базе DaisySP. Например, один энтузиаст смоделировал монофонический генератор переменной частоты с MIDI-входом.
Дополнительное чтение из нашего «Мира Hi-Fi»:
«Послушай, чтобы найти поломку»: аудио неисправных индустриальных машин
Где взять аудио для машинного обучения: открытые библиотеки с лицензией CC
Книги для тех, кто неравнодушен к музыке — от классики до хип-хопа
Refridgerator
Могу поспорить, что вы сами цифровой обработкой сигналов не занимались никогда. Потому что выбрать фреймворк для обработки сигналов — это проблема уровня выбора цвета носков — таких библиотек миллион, их пишут все, кому не лень (да, и я тоже писал), но функционал их совершенно однообразный и примитивный.
В реальных задачах возникают проблемы, которые ни один из этих фреймворков не решает. Ну есть там поддержка биквад фильтров, ну ок. А как получить коэффициенты для этих фильтров из заданного АЧХ/ФЧХ? Нужно использовать метод наименьших квадратов и факторизацию полиномов. Есть такое? Нет там такого. Потому что это задача совершенно другого уровня сложности, реализация которой требует совсем другого уровня квалификации.
С FIR ситуация получше — можно нарисовать АЧХ мышкой и сделать обратное БПФ с оконной функцией. Однако такой подход не прокатит с ФЧХ, и с таким подходом фазо-корректирующий фильтр с линейной АЧХ не построить. Можно найти вспомогательный инструментал типа Rephase — но и там всё те же стандартные фильтры с ручной подгонкой параметров, а для кроссоверов вы по-прежнему не найдёте ничего сложнее Линквитца-Рейли.
Помимо фильтров, есть и другие задачи в обработке сигналов — например, извлечения центра из стерео сигнала. С этим тоже всё печально и во всех этих фреймворках подобные возможности отсутствуют. Или синтез/обработка ЛЧМ, или AM/FM/QAM и прочие (де)модуляции. Да даже банальное преобразование Гильберта, корректно реализованное — ни разу не попадалось.
Ну а задача коррекции акустики помещения — так и вообще математически не решаема, и об этом полезно знать перед тем, как за неё браться.
dmitrykabanov
Получается, нужна библиотека, которая решает все возможные задачи? Или выпускать и использовать библиотеки не стоит вообще, пока они не достигнут идеального состояния?
Refridgerator
Нет. Получается, что содержание обзора библиотек сильно зависит от того, имел человек опыт работы с ними или нет. Вот допустим, вам потребовалась самая популярная операция — свёртка сигнала с импульсной характеристикой, то бишь FIR-фильтрация. А теперь из этого обзора найдите ответ на следующие вопросы:
1) какая из этих библиотек даёт наиболее удобный интерфейс для этого?
2) какая из этих библиотек поддерживает Dataflow (как наиболее естественный для DSP) интерфейс?
3) какая из этих библиотек поддерживает быструю свёртку с нулевой задержкой?
4) какая из этих библиотек поддерживает (ли) загрузку импульса из .wav, какая из .txt?
5) какой в этих библиотеках предельный размер импульса?
6) какая из этих библиотек поддерживает произвольный размер импульса, а не только степени 2?
7) какая у этих библиотек точность вычислений?
8) какая у этих библиотек производительность?
9) какие из них поддерживают VST, DirectX и прочие плагины?
10) какие из этих библиотек поддерживают многоканальную, а не только стерео, обработку?
Плюс в обзор почему-то не попали намного более популярные библиотеки — NAudio и BASS.dll.
dmitrykabanov
Мне кажется, что если чего-то определённого нет в посте, это не означает, что продолжения не последует в очередной публикации. Здесь нет заявки на всеобъемлющий разбор всех существующих/популярных/лучших библиотек.
Кстати, вывод о том, что много кто из их разработчиков ерундой занимается, это тоже преувеличение с вашей стороны. А вот формат и подача материала для знакомства с темой и для опытных специалистов правда могут отличаться, хотя тут никто и не делал замах на какой-то определённый заход.
Однако всегда можно показать класс самостоятельно, если такое желание у вас будет.
Refridgerator
Стоит ли это понимать как официальное предложение писать в блоге Аудиомании?
dmitrykabanov
Тему можно обсуждать и комментариях, и публиковаться в профильных хабах вроде Звука, Программирования, Алгоритмов и других на Хабре. Думаю, это логично. Да и опыт написания материалов у вас есть.
Мое мнение заключается в том, что разработчики библиотек в этой области имеют право развивать свои продукты в своём темпе. И они могут обладать своими особенностями. Означает ли это, что о библиотеках не стоит говорить — не думаю. Как именно это делать — вопрос открытый. Ваши аргументы мне понятны, как и стремление к максимально детальному разбору возможностей отдельных библиотек. Это только поприветствовать можно
akhkmed
Не подскажете, почему?
Refridgerator
Потому, что даже в одномерном случае корректирующий фильтр в общем случае является неустойчивым, амплитуда импульса которого увеличивается со временем. Точно так же вы не сможете посчитать значение функции 1/(1+x) для x>=1 через его разложение в ряд — математика процесса здесь идентична. Ну а одномерным сигналом невозможно скорректировать 3-мерную интерференционную картину просто из-за нехватки степеней свободы — также, как и нельзя решить систему из 3-х уравнений с одной переменной.
akhkmed
Спасибо. Позвольте уточню, речь ведь не про корректировку во всём помещении, а только в одной точке прослушивания. Эта задача также не имеет (устойчивого) решения?
Refridgerator
Здесь основная проблема — это корректно снять замер в точке из-за наличия интерференционных провалов. Вот в одномерном случае:
Если мерить посередине — амплитуда синей частоты будет околонулевой, если на 1/3 — жёлтой, хотя их амплитуды по факту равны. Сейчас это решают просто сглаживанием АЧХ — хотя понятно, что оно ничем не обусловлено. Нужно делать несколько замеров и усреднять опираясь на математическое обоснование. Как именно — у меня готового решения пока нет, но уверен, что оно должно решаться через вейвлет-преобразование.