Библиотеки для цифровой обработки сигналов на C++

Мы уже рассказывали о книгах, которые помогут взять старт в цифровой обработке сигналов. Сегодня продолжим тему и поговорим о практических ресурсах.
Подобрали три библиотеки на C++ для звукового синтеза.



Сохранить и прочитать потом —       

Красная и синяя волны на чёрном фоне

Gamma

Это — кроссплатформенная библиотека для синтеза и фильтрации цифровых сигналов. Её разработал инженер и композитор Лэнс Патнем, который сегодня занимает должность научного сотрудника в Голдсмитском колледже. Он также является автором серии расширений для фреймворка SuperCollider, позволяющего проводить аудиосинтез в реальном времени [подробнее об инструменте].

В состав Gamma входят разного рода математические функции и генераторы последовательностей. Особые классы реализуют аккумуляторы фаз для значений с фиксированной и плавающей запятой, фильтры с бесконечной импульсной характеристикой (БИХ-фильтры), а также всепропускающие фильтры, которые находят применение в эквалайзерах.

Изначально библиотека была разработана для задач генерации звука в реальном времени, таких как музыкальное программирование. Однако в Gamma алгоритмы обработки данных не зависят от их типа, что позволяет работать как со звуком, так и графикой. Сам Лэнс Патнем применил Gamma в эмбиент-роликах «Adrift», «Wrapture» и «S Phase», где сгенерировал музыкальный и визуальный ряды при помощи рекурсивного алгоритма умножения матриц.

Если вас заинтересовал этот инструмент, его исходники есть в репозитории на GitHub. На официальном сайте проекта — документация с описанием всех доступных функций и объектов, а также руководство по быстрому старту.

Madronalib

Это — открытый фреймворк, ориентированный на разработку приложений для обработки сигналов от компании Madrona Labs, проектирующей цифровые инструменты для музыкантов. Например, в их портфолио есть полумодульный программный синтезатор, процессор эффектов и даже физическое устройство — музыкальный контроллер, который, в отличие от MIDI-клавиатуры, регистрирует силу нажатия (прямо как «Континуум» Липпольда Хакена).

Инженеры Madronalib сделали упор на скорость обработки сигналов. Они реализовали SIMD-инструкции для тригонометрических и трансцендентных функций — sin, cos,log и exp — которые показывают большую производительность, по сравнению с решениями в нативных математических библиотеках C++.

Фреймворк поддерживает SSE для Intel и NEON для Apple Silicon, а также многопроцессорную обработку. В этом режиме стоит уделить внимание разделению памяти — менеджмент ресурсов позволит воспроизводить звук без потерь.

Красная и синяя линии на чёрном фоне

Исходный код Madronalib вы можете найти на GitHub. Он распространяется по лицензии MIT, поэтому его можно свободно использовать в своих проектах (в том числе коммерческих). В том же репозитории есть примеры инструментов, реализованных с помощью этого фреймворка — например, простой плагин для обработки звука VST3, способный генерировать синусоиды.

Q

Еще одна кроссплатформенная библиотека для цифровой обработки сигналов в нашей подборке. Она получила свое название в честь показателя добротности колебательного контура, который определяет ширину резонанса. Её написал инженер Джоэл Де Гузман из Cycfi Research — компании, занимающейся разработкой опенсорсных музыкальных инструментов (как программных, так и физических).

Q — «легкое» решение, которое делает упор на переиспользуемые функциональные объекты и подходит для программирования микроконтроллеров. В его основе лежат две «подбиблиотеки» — q_lib и q_io. Первая отвечает за обработку сигналов, а вторая — за прием и вывод звука (в том числе с цифрового и аналогового MIDI-контроллера). Последняя построена на базе сторонних открытых библиотек portaudio и portmidi.

Q уже используют для решения задач, связанных с выделением основного тона и оценкой динамических характеристик звучания музыкальных инструментов. Чтобы познакомиться с библиотекой поближе, вы можете обратиться к официальной документации, где проведен разбор общей структуры утилиты, даны инструкции по настройке и описан классический пример «Hello World!». Там реализована простая функция, которая на вход получает WAV-файл и воспроизводит его с задержкой.

Эту статью прочитали 582 раза
Статья входит в разделы:Интересное о звуке

Поделитесь статьёй:
Обсуждение данного материала
Комментариев пока нет. Станьте первым!
Написать свой комментарий