Структура синтеза звука в C / C++ / Objective-C?

Я искал в сети, но не нашел ничего интересного. Может, я делаю что-то не так.

Я ищу API синтеза звука, написанный на C, C++ или даже Objective-C, который может синтезировать различные типы волн, эффекты не являются обязательными.

6 ответов


вот полная библиотека / инструментарий для синтеза FM (частотная модуляция):

link1 и link2

Если у вас есть свободное время... создание простого синтеза звука с нуля на самом деле весело усилия. Если вы создаете небольшой буфер из 256 16-битных образцов, которые представляют собой либо синус. пилообразный, блок или импульс, вы можете скопировать их в живой аудиобуфер (например, небольшой буфер (скажем, 16kb)), который постоянно петляет. Оставаясь впереди playposition, и постоянно заполняя буфер новыми значениями, вы можете создать soundoutput. Вы можете использовать небольшие буферы, чтобы объединить их интересными способами (Проще всего просто добавить их вместе (аддитивный синтез)).

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

большое удовольствие экспериментировать с этим!

Если у вас есть этот шаг прибил, вы можете добавить более сложные эффекты, такие как фильтры (низких частот, высоких частот и т. д.) и эффектов (ревербераторы, эхо и т. д.)

R


вы смотрели на инструментарий синтеза (STK)? Это на C++ (я не думаю, что ObjC-правильный язык для синтеза звука, на самом деле аудио-блоки, собственный способ Apple делать аудио-вещи, включая генераторы/фильтры/эффекты... это в C++).

STK будет работать на Mac OS X и iOS без проблем (CoreAudio поддерживается), но также будет работать на Linux и Windows (Direct sound и ASIO), используя RtAudio. Это действительно красиво сделано и легко, эти ребята потратили много времени думать об этом и это, безусловно, даст вам большую фору. Он может обрабатывать нагрузки различных форматов аудиофайлов + midi (и, надеюсь, OSC в ближайшее время...).

есть еще создать и моллюск, который огромен, они включают компоненты GUI и многие другие вещи, которые вы можете или не хотите. Если вы заинтересованы только в звуковом синтезе, я действительно рекомендую STK.


PortAudio также является отличным C API, который мы использовали в прошлом семестре в курсе аудио программирования. Он обеспечивает аудио обратный вызов...что еще тебе нужно??

Я еще не пробовал включить его ни с чем в Objective-C, но сообщу, когда я это сделаю.


написание алгоритмов синтеза звука в C / obj-C, на мой взгляд, довольно сложно. Я бы рекомендовал написать ваши алгоритмы обработки сигналов, используя PureData и затем использовать ZenGarden или libpd для внедрения и интерпретации патчей pd в вашем приложении.


другая библиотека C++ - nsound:

http://nsound.sourceforge.net

можно генерировать любой вид модулированного сигнала, используя класс генератора или используя предоставленный класс синуса. Каждый временн-шаг может иметь его собственные мгновенные частоту и смещение участка.

вы также можете поэкспериментировать с модулем Python, чтобы быстро создать прототип вашего алгоритма, а затем реализовать его на C++. Он может производить довольно matplotlib сюжеты из Python и даже из C++!


вы смотрели CSound? Это невероятно гибкая платформа для генерации звука и может обрабатывать все: от простого генерирования сигналов до синтеза FM и всех видов фильтров. Он также обеспечивает поддержку MIDI, и вы можете расширить его, написав пользовательские коды операций. Есть полный C API и несколько API c++.