Question

Je sais que c'est un sujet très large, mais j'ai patauge autour avec des démos et mes propres tests et ne suis pas sûr si j'attaquer le problème correctement. Donc, toutes les pistes sur l'endroit où je devrais commencer serait apprécié.

Le but est d'avoir l'application de produire des sons synthétisés, par les paramètres de l'utilisateur. (Ce n'est pas la seule fonction de l'application, je ne suis pas recréer Korg, mais synthé en fait partie.) L'utilisateur de définir les paramètres de synthé typiques comme vague, réverbération, etc. puis choisirais quand la note serait jouer, probablement avec un modificateur de hauteur et de la vitesse.

Je l'ai joué un peu avec l'unité audio et RemoteIO, mais seulement à peine comprendre ce que je fais. Avant que je vais trop loin dans cette trou de lapin, je voudrais savoir si je suis encore dans le bon ordre de grandeur. Je sais synth audio va être faible, mais j'espère que peut-être il y a des bibliothèques de haut niveau là-bas que je peux utiliser.

Si vous avez des conseils sur où commencer, et que la technologie iOS que je devrais lire au sujet de plus, s'il vous plaît laissez-moi savoir.

Merci!

EDIT:. Laissez-moi résumer mieux les questions

Y a-t-il des bibliothèques de synthé déjà construit pour iOS? (Commercial ou Open Source -. Je n'ai pas trouvé de nombreuses recherches, mais peut-être que je suis absent il)

Y a-t-il des API de plus haut niveau qui peuvent aider à générer des tampons plus facile?

En supposant que je peux déjà générer des tampons, est-il une meilleure / plus facile de soumettre ces tampons à l'appareil audio iOS que l'unité audio RemoteIO?

Était-ce utile?

La solution

Ceci est une très bonne question. Je me demande parfois les mêmes choses et je finis toujours en utilisant le MoMu Toolkit des gars de Stanford. Cette bibliothèque offre une belle fonction de rappel qui se connecte à AudioUnits / AudioToolbox (pas sûr), de sorte que tout ce que vous aimez est de fixer le taux d'échantillonnage, la taille du tampon, et la profondeur de bits des échantillons audio, et vous pouvez facilement synthétisent / quoi que ce soit de processus vous aimez dans la fonction de rappel.

Je recommande également Synthèse ToolKit (STK) pour iOS qui a également été libéré par Ge Wang à Stanford. vraiment cool choses à son synthétisent / processus.

Chaque fois que Apple lance une nouvelle version iOS je vérifie la nouvelle documentation afin de trouver un meilleur (ou plus simple) de façon audio synthétisent, mais toujours pas de chance.

EDIT: Je veux ajouter un lien vers le code source de AudioGraph: https://github.com/tkzic/ audiograph Ceci est une application très intéressante pour montrer le potentiel de AudioUnits, réalisé par Tom Zicarelli. Le code est vraiment facile à suivre, et une excellente façon d'en apprendre davantage sur ce --Certains serait say-- alambiqué processus de traitement des audio de faible niveau dans iOS.

Autres conseils

Swift & Objective C

Il y a un grand projet open source qui est bien documenté avec des vidéos et des tutoriels pour les deux Objective-C & Swift.

AudioKit.io

Le chemin de niveau le plus bas pour obtenir les tampons à la carte son est par l'api AudioUnit, et en particulier la AudioUnit remoteIO. Ceci est un tas de charabia, mais il y a quelques exemples dispersés sur le web. http://atastypixel.com/blog/using-remoteio-audio-unit/ est une.

J'imagine qu'il ya d'autres façons de remplir des tampons, soit en utilisant le cadre de AVFoundation, mais je l'ai jamais fait eux.

L'autre façon de le faire est d'utiliser openFrameworks pour tous vos trucs audio, mais cela suppose aussi que vous voulez faire votre dessin en openGL. Arracher la mise en œuvre de AudioUnit ne devrait pas être trop d'un problème cependant, si vous ne voulez faire d'une autre manière votre dessin. Cette mise en œuvre est particulièrement agréable car il vous jette tout à -1..1 flotteurs pour remplir.

Enfin, si vous voulez un début de saut sur un groupe d'oscillateurs / filtres / lignes de retard que vous pouvez brancher dans le openFrameworks système audio (ou tout autre système qui utilise des tableaux de -1..1 flotteurs), vous pouvez vérifier http://www.maximilian.strangeloop.co.uk .

Il y a deux parties à ceci: tout d'abord, vous devez générer des tampons de synthèse audio - c'est à peu près plate-forme agnostique et vous aurez besoin d'une bonne compréhension de la synthèse audio pour écrire cette partie. La seconde partie passe ces tampons à une API OS spécifique appropriée pour que le son est réellement joué. La plupart des API pour le support de lecture audio double buffering ou même plusieurs tampons afin que vous puissiez synthétiser des tampons futurs tout en jouant le tampon courant. Quant à iOS qui API à utiliser, cela dépendra probablement de ce type d'architecture globale que vous avez pour votre application, mais cela est vraiment la partie facile. La partie de synthèse est l'endroit où vous aurez besoin de faire la plupart des travaux.

Je sais que c'est un peu vieux, mais cela semble être une mauvaise approche de moi - ce que vous devriez probablement faire est de trouver un synthétiseur de l'unité audio qui modélise le genre de changements que vous voulez faire. Il y a beaucoup d'entre eux, certains d'entre eux open source, d'autres peut-être licenciable - et hôte les unités audio de votre code. Les mécanismes décrits ci-dessus semblent comme ils travailleraient très bien, mais ils vont pas vraiment être optimisé pour la plate-forme ios.

Je sais que ce sujet est vieux, et je suis étonné de voir que la situation sur iOS n'a toujours pas améliorée quand il est à l'audio.

Cependant, il y a une ligne d'argent à l'horizon: iOS 6 en charge l'API WebAudio. Je réussi à avoir un beau synthé Polyphoniques avec à peine quelques lignes JavaScript. Au moins il y a des choses de base comme à la disposition préamplificateurs de la boîte:

https://dvcs.w3.org/ hg / audio / fichier brut / conseil / WebAudio / specification.html

et (juste pour choisir un exemple parmi tant d'autres)

Je sais que c'est un ancien poste, mais vérifiez The Amazing Audio Engine .

  

The Amazing Audio Engine est un cadre sophistiqué pour les applications audio iOS, construit de sorte que vous n'avez pas to.It est conçu pour être très facile à travailler, et gère toutes les subtilités de son iOS en votre nom.

est venu former le développeur de AudioBus pour iOS.

Fondamentalement, il va être un toss entre les files d'attente audio et les unités audio. si vous avez besoin de se rapprocher en temps réel, par exemple si vous avez besoin d'entrée du microphone de processus, les unités audio sont votre chemin pour obtenir une latence minimale.

cependant, il y a une limitation à la quantité de traitement que vous pouvez faire dans le rappel rendu - à savoir un morceau de données arrive sur un fil de système de priorité extrêmement élevée. Et si vous essayez d'en faire trop dans ce fil, il Chugg de l'OS.

vous devez donc le code intelligent dans ce rappel. il y a quelques pièges, comme l'utilisation de NSLog et d'accéder aux propriétés d'un autre objet qui ont été déclarées sans (c.-à-ils non atomiques seront implicitement les verrous) créent.

est la principale raison pour laquelle Apple a construit un prendre ce faible niveau des affaires rusées cadre de niveau supérieur (AQ). AQ vous permet de recevoir et processus crachez tampons audio sur un fil où il n'a pas d'importance si vous causez temps d'attente.

Cependant, vous pouvez vous en sortir avec beaucoup de traitement, en particulier si vous utilisez accélérer cadre pour accélérer vos manipulations mathématiques.

En fait, il suffit d'aller avec des unités audio - commencer par cette Jonbro de lien que vous avez donné. même si AQ est un cadre de niveau supérieur, il est plus à utiliser des maux de tête, et l'unité audio RemoteIO est l'outil idéal pour ce travail.

J'utilise l'exemple de sortie audio de cadres ouverts et la bibliothèque de synthèse de stanford au travail sur l'application de mes iOS.

Je suis expérimenté avec Tonic bibliothèque audio . Propre et facile à comprendre avec le code prêt à compiler des exemples macos et iOS.

À un certain moment, j'ai commencé à générer mes propres tampons avec simple code C à partir de zéro pour faire des choses de base comme des générateurs de sinus, de ADSR et des retards, ce qui était très satisfaisant d'expérimenter.

Je poussais mes tableaux flottants à l'aide de haut-parleurs de contre-Tonic, Novocaine .

Par exemple 256k utiliser ces pour toute la musique qu'il génère.

Tout récemment, je trouve AVAudioUnitSampler , un moyen très facile à l'échantillon de lecture en fonction audio à différentes hauteurs avec une faible latence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top