usar - ¿Por dónde empezar en el sintetizador de audio iOS?




plug key korg (7)

Swift y Objective C

Hay un gran proyecto de código abierto que está bien documentado con videos y tutoriales para Objective-C y Swift.

AudioKit.io

Sé que este es un tema muy amplio, pero he estado dando vueltas con demos y mis propias pruebas y no estoy seguro de si estoy atacando el problema correctamente. Así que cualquier pista sobre dónde debería comenzar sería apreciada.

El objetivo es hacer que la aplicación genere algunos sonidos sintetizados, según la configuración del usuario. (Esta no es la única función de la aplicación, no estoy recreando Korg aquí, pero el sintetizador es parte de esto.) El usuario configuraría los ajustes típicos de sintetizador como onda, reverberación, etc., y luego seleccionaría cuándo tocaría la nota, probablemente con un modificador de tono y velocidad.

He jugado un poco con la unidad de audio y RemoteIO, pero apenas entiendo lo que estoy haciendo. Antes de ir demasiado lejos en ese agujero de conejo, me gustaría saber si estoy en el estadio correcto. Sé que el sintetizador de audio va a ser de bajo nivel, pero espero que haya bibliotecas de nivel superior que pueda usar.

Si tiene alguna indicación sobre dónde comenzar y sobre qué tecnología de iOS debería leer más, hágamelo saber.

¡Gracias!

EDITAR: déjenme resumir mejor las preguntas.

¿Ya hay alguna biblioteca de sintetizadores creada para iOS? (comercial o de código abierto: no he encontrado ninguno con numerosas búsquedas, pero tal vez me lo estoy perdiendo).

¿Hay alguna API de nivel superior que pueda ayudar a generar búferes más fácilmente?

Suponiendo que ya puedo generar almacenamientos intermedios, ¿hay una forma mejor / más fácil de enviar esos almacenamientos intermedios al dispositivo de audio iOS que a la Unidad de audio RemoteIO?


Básicamente va a ser un lanzamiento entre colas de audio y unidades de audio. si necesita acercarse al tiempo real, por ejemplo, si necesita procesar la entrada del micrófono, las unidades de audio son su forma de lograr una latencia mínima.

sin embargo, hay cierta limitación en cuanto a la cantidad de procesamiento que puede hacer dentro de la devolución de llamada de render, es decir, un fragmento de datos llega a una secuencia de sistema de prioridad ultra alta. Y si intenta hacer demasiado en este hilo, se ejecutará todo el sistema operativo.

entonces necesitas codificar inteligentemente dentro de esta devolución de llamada. existen pocas dificultades, como el uso de NSLog y el acceso a las propiedades de otro objeto que fueron declaradas sin carácter no atómico (es decir, estarán implícitamente creando bloqueos).

esta es la razón principal por la que Apple construyó un marco de nivel superior (AQ) para eliminar este complicado negocio de bajo nivel. AQ le permite recibir proceso y escupir búferes de audio en un hilo donde no importa si causa latencia.

Sin embargo, puede salirse con la suya con un montón de procesamiento, especialmente si está utilizando el marco de aceleración para acelerar sus manipulaciones matemáticas.

De hecho, solo ve con unidades de audio: comienza con ese enlace que jonbro te dio. aunque AQ es un marco de nivel superior, es más dolor de cabeza usarlo, y la unidad de audio RemoteIO es la herramienta adecuada para este trabajo.


Hay dos partes en esto: en primer lugar, necesita generar almacenamientos intermedios de audio sintetizado; esto es bastante independiente de la plataforma y necesitará una buena comprensión de la síntesis de audio para escribir esta parte. La segunda parte pasa estos búferes a una API específica del sistema operativo adecuada para que el sonido realmente se reproduzca. La mayoría de las API para la reproducción de audio admiten el almacenamiento en búfer doble o incluso varios búferes para que pueda sintetizar búferes futuros mientras se reproduce el búfer en uso. En cuanto a qué API de iOS usar, eso probablemente dependerá del tipo de arquitectura general que tengas para tu aplicación, pero esta es realmente la parte fácil. La parte de la síntesis es donde tendrás que hacer la mayor parte del trabajo.


He estado experimentando con la biblioteca de sintetizadores Tonic Audio . Código limpio y fácil de entender con ejemplos listos para compilar macOS e iOS.

En algún momento comencé a generar mis propios buffers con código C simple desde cero para hacer cosas básicas como generadores de seno, ADSR y retrasos, lo cual fue muy satisfactorio para experimentar.

Empujé mis matrices flotantes a los altavoces usando la contraparte de Tonic, Novocaine .

Por ejemplo, 256k usa para toda la música que genera.

Recientemente encontré AVAudioUnitSampler , una manera súper fácil de reproducir audio basado en muestras en diferentes tonos con baja latencia.


La forma de nivel más bajo para obtener los almacenamientos intermedios en la tarjeta de sonido es a través de la API de audiounit, y particularmente la unidad de audio remoteIO. Esto es un montón de galimatías, pero hay algunos ejemplos dispersos por la web. http://atastypixel.com/blog/using-remoteio-audio-unit/ es uno.

Imagino que hay otras maneras de llenar los almacenamientos intermedios, ya sea utilizando el marco AVFoundation, pero nunca los he hecho.

La otra forma de hacerlo es utilizar openframeworks para todos sus elementos de audio, pero eso también supone que desea hacer su dibujo en OpenGL. Sin embargo, eliminar la implementación de la unidad de audio no debería ser un problema, si desea hacer su dibujo de otra manera. Esta implementación en particular es agradable porque arroja todo a -1..1 flota para que llene.

Finalmente, si quiere un comienzo de salto en un grupo de osciladores / filtros / líneas de retardo que puede enganchar en el sistema de audio de marco abierto (o en cualquier sistema que use matrices de flotadores -1..1), puede consultar http: //www.maximilian.strangeloop.co.uk .


Sé que esta es una publicación antigua, pero echa un vistazo a The Amazing Audio Engine .

Amazing Audio Engine es un marco sofisticado para aplicaciones de audio iOS, construido para que no tengas que hacerlo. Está diseñado para ser muy fácil de usar y maneja todas las complejidades del audio iOS en tu nombre.

Esto vino del desarrollador de AudioBus para iOS.


Sé que esto es un poco viejo, pero este parece ser el enfoque equivocado para mí, lo que probablemente deberías hacer es encontrar un sintetizador de unidad de audio que modele el tipo de cambios que deseas hacer. Hay muchos de ellos, algunos de ellos de código abierto, otros posiblemente con licencia, y alojan las unidades de audio de tu código. Los mecanismos descritos anteriormente parecen funcionar bien, pero en realidad no van a ser optimizados para la plataforma ios.





sound-synthesis