2009-08-10 10 views
7

He buscado en la red pero no encontré nada interesante. Tal vez estoy haciendo algo mal.Sound Synthesis Framework en C/C++/Objective-C?

Estoy buscando API de síntesis de sonido escrita en C, C++ o incluso Objective-C, que puede sintetizar diferentes tipos de ondas, los efectos son opcionales.

Respuesta

9

Aquí es una biblioteca completa/kit de herramientas para FM (frecuencia modulada) síntesis:

link1 link2

Si usted tiene tiempo de sobra ... la creación de síntesis de sonido sencilla a partir de cero es en realidad una tarea divertida. Si crea un pequeño buffer de 256 muestras de 16 bits que representan un seno. un diente de sierra, bloque o pulso, puede copiarlos en un audiobuffer en vivo (por ejemplo, un pequeño búfer (digamos 16kb)) que se repite constantemente. Al permanecer delante de la posición de juego y llenar constantemente el búfer con nuevos valores, puede crear la salida de sonido. Puede usar los pequeños búferes para combinarlos de maneras interesantes (lo más simple es simplemente sumarlos (síntesis aditiva)).

La frecuencia del tono se puede manipular mediante un paso de muestreo más grande o más pequeño a través de los pequeños búferes. La amplitud se puede manipular escalando las muestras antes de ponerlas en el buffer de salida.

¡Muy divertido experimentar con esto!

Si ha clavado este paso, se puede añadir efectos más sofisticados como filtros (paso bajo, paso alto, etc) y efectos (reverberaciones, ecos, etc.)

R

-1

¿Ha mirado CSound? Es una plataforma de generación de audio increíblemente flexible, y puede manejar todo, desde la generación de formas de onda simples hasta la síntesis FM y todo tipo de filtros. También proporciona soporte MIDI, y puede ampliarlo escribiendo códigos de operación personalizados. También hay un full C API y varias API de C++.

2

Escribir algoritmos de síntesis de audio en C/obj-C es bastante difícil en mi opinión. Yo recomendaría escribir sus algoritmos de procesamiento de señal usando PureData y luego usar ZenGarden o libpd para incrustar e interpretar los parches de PD en su aplicación.

4

¿Has mirado el juego de herramientas de síntesis (STK)? Está en C++ (No creo que ObjC sea el lenguaje correcto para la síntesis de audio, de hecho unidades de audio, la forma en que Apple hace las cosas de audio, incluidos los generadores/filtros/efectos ... está en C++).

STK se ejecutará en Mac OS X, y iOS no hay problema (CoreAudio es compatible), pero también se ejecutará en Linux y Windows (sonido directo y ASIO), utilizando RtAudio. Está muy bien hecho y es ligero, estos chicos han pasado mucho tiempo pensando en ello y definitivamente te dará una gran ventaja. Puede manejar montones de diferentes formatos de archivos de audio + midi (y con suerte OSC pronto ...).

También hay Create y CLAM que es enorme, estos incluyen componentes de la GUI y muchas otras cosas que puede o no desear. Si solo estás interesado en hacer síntesis de sonido, realmente recomiendo STK.

+0

¿Hay alguna manera de crear un instrumento con este que tenga un tic() que funcione en datos/muestras de datos sin procesar? – paulm

+1

@paulm Creo que esta es una pregunta muy completa, STK tiene un lector de archivos wav https://ccrma.stanford.edu/software/stk/classstk_1_1FileRead.html – jbat100

+0

gracias, parece que puede ser solo un caso de poblado Cuadros STK a partir de datos de audio en bruto :) – paulm

4

PortAudio es también una gran API de C que utilizamos el último semestre en un curso de programación de audio. Proporciona una devolución de llamada de audio ... ¿qué más podría necesitar?

No he tratado de incorporarlo con nada en Objective-C todavía, pero informaré cuando lo haga.

1

Otra biblioteca de C++ es Nsound:

http://nsound.sourceforge.net

Uno puede generar cualquier tipo de señal modulada mediante la clase del generador o el uso de la clase Sine proporcionado. Cada paso de tiempo puede tener su propia frecuencia instantánea y desplazamiento de fase.

También puede experimentar con el módulo de Python para prototipar su algoritmo rápidamente y luego implementarlo en C++. ¡Puede producir tramas bonitas de matplotlib desde Python e incluso desde C++!