2009-08-10 2 views
7

Я искал сеть, но не нашел ничего интересного. Может быть, я делаю что-то неправильно.Структура синтеза звука в C/C++/Objective-C?

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

ответ

9

Вот полная библиотека/инструментарий для FM (Frequency Modulation) синтез:

link1 link2

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

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

Большое удовольствие, экспериментирующее с этим!

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

R

-1

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

2

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

4

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

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

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

+0

Есть ли способ создать инструмент с этим, у которого есть галочка(), которая работает с необработанными данными/образцами wav? – paulm

+1

@paulm Я думаю, что это полноразмерный вопрос SO, у STK есть читатель wav-файлов https://ccrma.stanford.edu/software/stk/classstk_1_1FileRead.html – jbat100

+0

спасибо, похоже, это может быть просто случай заполнения Кадры STK из исходных аудиоданных :) – paulm

4

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

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

1

Другая библиотека С ++ nsound:

http://nsound.sourceforge.net

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

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