Как стать автором
Обновить
120.1
Рейтинг
Аудиомания
Одна из крупнейших Hi-Fi, High End компаний в СНГ

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

Блог компании Аудиомания Open source *Программирование *C++ *Звук

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

Подобрали три библиотеки на C++ для звукового синтеза.

Фотография: Richard Horvath. Источник: Unsplash.com
Фотография: Richard Horvath. Источник: Unsplash.com

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, а также многопроцессорную обработку. В этом режиме стоит уделить внимание разделению памяти — менеджмент ресурсов позволит воспроизводить звук без потерь.

Фотография: Pawel Czerwinski. Источник: Unsplash.com
Фотография: Pawel Czerwinski. Источник: Unsplash.com

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

Q

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

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

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


Больше подборок в нашем блоге на Хабре:


О чем еще мы пишем в нашем «Мире Hi-Fi»:


Теги: аудиоманияцифровая обработка сигналовdspqGammaMadronalibбиблиотекиc++
Хабы: Блог компании Аудиомания Open source Программирование C++ Звук
Всего голосов 12: ↑11 и ↓1 +10
Комментарии 0
Комментарии Комментировать

Похожие публикации

Лучшие публикации за сутки