ios - plug - garageband gratis
¿Por dónde empezar en el sintetizador de audio iOS? (10)
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.
Esta es una muy buena pregunta. A veces me pregunto lo mismo y siempre termino usando el MoMu Toolkit de los chicos de Stanford. Esta biblioteca proporciona una agradable función de devolución de llamada que se conecta a AudioUnits / AudioToolbox (no está seguro), de modo que lo único que importa es establecer la frecuencia de muestreo, el tamaño del búfer y la profundidad de bits de las muestras de audio, y puede sintetizar fácilmente / procesa lo que quieras dentro de la función de devolución de llamada.
También recomiendo Synthesis ToolKit (STK) para iOS que también fue lanzado por Ge Wang en Stanford. Cosas realmente geniales para sintetizar / procesar audio.
Cada vez que Apple lanza una nueva versión de iOS, reviso la nueva documentación para encontrar una forma mejor (o más simple) de sintetizar audio, pero siempre sin suerte.
EDITAR: Quiero agregar un enlace al código fuente de AudioGraph: https://github.com/tkzic/audiograph Esta es una aplicación realmente interesante para mostrar el potencial de AudioUnits, hecho por Tom Zicarelli. El código es realmente fácil de seguir, y una gran manera de aprender sobre este proceso de manejo de audio de bajo nivel en iOS.
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.
He estado usando el ejemplo de salida de audio de frameworks abiertos y la biblioteca de síntesis stanford stk para trabajar en mi aplicación de sintetizador iOS.
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 este tema es antiguo y me sorprende que la situación en iOS aún no haya mejorado en lo que respecta al audio.
Sin embargo, hay una línea plateada en el horizonte: iOS 6 es compatible con la API de WebAudio. Conseguí con éxito tener un buen sintetizador de teléfono con apenas unas líneas en JavaScript. Al menos hay cosas básicas como Osciladores disponibles de fábrica:
https://dvcs.w3.org/hg/audio/raw-file/tip/webaudio/specification.html
y (solo para elegir un ejemplo entre muchos)
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.