Comment utiliser les AUGraph dans les AudioUnit component?

HerveHerve Membre
12:11 modifié dans API AppKit #1
Bonjour,

Je commence à  comprendre comment fonctionnent Core Audio et Audio Unit. J'arrive à  modifier les Audio Component de base, y ajouter des paramètres, y modifier les calculs, etc.  Je viens de faire un petit synthé en synthèse additive par exemple ...

J'ai vu aussi que Core Audio avait des méthodes de traitement de fichiers sonores similaires aux filtres de Core Image sans doute. Je parle de ceci :
http://developer.apple.com/library/mac/#documentation/MusicAudio/Conceptual/CoreAudioOverview/SystemAudioUnits/SystemAudioUnits.html#//apple_ref/doc/uid/TP40003577-CH8-SW2

on a évidemment envie d'essayer ces effets très performants dans son plug in.

J'ai compris qu'il fallait créer un AUGraph pour les mettre dedans, mais comment intégrer les calculs de mon plug dans cet AUGraph? Il faudrait que ma méthode de génération sonore soit un AudioUnit aussi, non?
J'ai vu des exemples d'association de modules (AUTimePitchTest par exemple), mais ce sont des applications Cocoa, pas des plug in.

Sauriez-vous m'aiguiller sur la bonne voix?

Je trouve la doc des classes AU franchement peu fournie, bien moins claire que celle des classes NS. A part un long tutoriel (très bien, mais qui donne peu de détails sur les méthodes de classe) et quelques feuillets, cela a l'air pauvre... 
Mon idée est qu'il faudrait que mes calculs soient une méthode de classe, mais les effets qui me font envie en sont-ils? Je ne trouve pas non plus comment les paramétrer: aucune doc par exemple sur ce qu'ils prennent comme argument.

Merci d'avance...

Réponses

  • laudemalaudema Membre
    12:11 modifié #2
    dans 1303564393:

    Bonjour,
    aucune doc par exemple sur ce qu'ils prennent comme argument.

    Bonjour à  toi,

        Malheureusement je ne pourrais pas t'aider pour ton problème spécifique mais, sait on jamais, je me permets de te rappeler les "headers" des "frameworks". Les fichiers d'entête comme AudioUnitProperties.h et quelques uns de ses camarades de la librairie AudioUnit.framework ont beaucoup de commentaires où sont expliqué un peu plus en détail les méthodes et fonctions ( +/- arguments ) rencontrées. C'est un peu pareil avec ICA_Application pour les scanners..
    Pour les consulter soit tu fais "Open Quickly..." du menu Fichier d'Xcode, soit tu déplies les triangles du répertoire Frameworks de ton projet (la colonne de gauche) pour arriver à  ceux qui t'intéressent particulièrement puis tu cliques sur un de ceux là  pour l'afficher dans l'éditeur.

    <br />/*!<br />&nbsp; &nbsp; @header <br />		AUGraph<br />&nbsp; &nbsp; <br />	@abstract <br />		This header defines the types, constants, data structures and functions of the AUGraph API. <br />		The AUGraph API is used for for maintaining arbitrary graphs of AudioUnits.<br /><br />	@discussion<br />		The AUGraph APIs are responsible for representing the description of a set<br />		of AudioUnits, audio connections between their inputs and outputs, and any <br />		callbacks used to provide inputs. It also allows the embedding of sub (or child)<br />		graphs within parent graphs to allow for a logical organisation of parts<br />		of an overall signal chain. Of course, the AudioUnits do the actual audio processing. <br />		Thus the AUGraph is a description of the various AudioUnits and their<br />		connections, but also may manage the actual instantiated AudioUnits if<br />		AUGraphOpen() is actually called. The AUGraph, in essence, is a complete<br />		description of an audio signal processing network.<br /><br />		The AUGraph may be introspected, in order to get complete information about<br />		all of the AudioUnits in the graph.&nbsp; The various nodes (AUNode) in the<br />		AUGraph representing AudioUnits or sub graphs may be added or removed, and the interactions<br />		between them modified.<br />				<br />		An AUGraph&#039;s state can be manipulated in both the rendering thread and in<br />		other threads. Consequently, any activities that effect the state of the<br />		graph are guarded with locks and a messaging model between any calling thread<br />		and the thread upon which the AUGraph&#039;s output unit is called (the render thread).<br />		<br />		An AUGraph will have a single head node - what is referred to below as its<br />		output unit. The output unit is used to both start and stop the rendering<br />		operations of a graph, and as the dispatch point for the safe manipulation<br />		of the state of the graph while it is running.<br />*/<br /><br />/*!<br />	@typedef	AUGraph<br />	@abstract	A reference to an AUGraph object.<br />
    

    etc ... etc ...
    hth
  • HerveHerve Membre
    12:11 modifié #3
    En effet. C'est pas facile à  lire, mais on les y trouve. Merci pour l'info.

    Je manque aussi de bases en C++. Il y a des signes comme :
    -> 
    ex : Globals () -> UseIndexedParameters (kNumberOfParameters);
    que je ne comprends pas. Ce doit être une forme d'incrémentation comme une boucle "for".

    La fonction :
    enum  comme dans : enum {                                                                   
        kParameter_Frequency  = 0,
      (...)
    };
    semble être une fonction d'assignation et d'incrémentation à  la fois. Elle est liée à  " -> " d'ailleurs.

    Bon, je vais voir ce que je trouve et comprends.
    A mon avis, soit je fais des fonctions comme une dans le tutoriel "TremoloUnit" qui crée le LFO à  part du "process", et je les fais travailler ensemble, soit j'assemble des AU comme dans un modulaire "classique". Mais là ...

    Merci encore laudema.
  • laudemalaudema Membre
    12:11 modifié #4
    dans 1303575678:

    En effet. C'est pas facile à  lire, mais on les y trouve. Merci pour l'info.

    Je manque aussi de bases en C++. Il y a des signes comme :
    -> 

    ça il me semble qu'en C ça signifie un pointeur sur une structure, on le retrouve chez nous aussi
    <br />NSRange r =&nbsp; NSMakeRange(0, 0);<br />NSRangePointer pr = &amp;r;<br />pr-&gt;length = 4;<br />printf(&quot;%i&quot;,(int) pr-&gt;location);<br />
    
  • zoczoc Membre
    avril 2011 modifié #5
    dans 1303575678:

    Je manque aussi de bases en C++. Il y a des signes comme :
    -> 
    ex : Globals () -> UseIndexedParameters (kNumberOfParameters);
    que je ne comprends pas. Ce doit être une forme d'incrémentation comme une boucle "for".



    Glurps !!!!  :o


    Cette ligne a pour effet d'appeler la méthode UseIndexedParameters sur l'objet retourné "par adresse" (parce qu'en C++ un objet n'est pas toujours représenté par un pointeur, il peut être passé "par valeur" ou "par référence") par la fonction Globals().


    Ceci dit, l'opérateur "->" existe également en C (et donc en Objective C) même si son utilisation est étendue en C++ pour l'appel de méthodes.



    La fonction :
    enum  comme dans : enum {                                                                   
        kParameter_Frequency  = 0,
      (...)
    };
    semble être une fonction d'assignation et d'incrémentation à  la fois.



    Re Glurps !!!


    enum n'est pas une fonction... enum sert à  définir des constantes (des enumeration) typées. D'ailleurs ca existe aussi en C et en Objective C, hein...


    Elle est liée à  " -> " d'ailleurs.

    Non, pas spécialement

    Bon, je vais voir ce que je trouve et comprends.

    Il faudrait se former plutôt que d'avancer à  l'aveugle droit dans le mur...

  • laudemalaudema Membre
    avril 2011 modifié #6
    Pour les enum par exemple ? où l'on trouve aussi une description de l'accession aux éléments d'une structure pointée
    Il y en a bien d'autres dont des plus globaux Tout dépend de ton niveau...
  • HerveHerve Membre
    12:11 modifié #7
    Merci laudema et zoc pour ces liens et réponses. Je vais lire tout ça.

    dans 1303582173:


    Il faudrait se former plutôt que d'avancer à  l'aveugle droit dans le mur...


    Oui, sauf que c'est en forgeant que l'on devient forgeron, et c'est en "fonçant dans le mur" que j'ai pu apprendre le Java et l'Objectiv C. Je perds un temps fou au début à  solutionner les problèmes, mais après, je sais. J'ai un peu plus de 40 ans, quand j'étais étudiant, c'était le Basic et le Pascal. (si si!)  J'ai appris seul les langages orienté objet.

    Les forums comme celui-ci sont d'ailleurs précieux pour y voir plus clair.
  • HerveHerve Membre
    12:11 modifié #8
    Pour en revenir à  mon problème principal de montage d'audio unit perso + d'audio unit déjà  faits, il me semble après avoir lu la doc des effets qu'il vaut mieux opter pour une application Cocoa dans laquelle j'intègre les classes AudioUnit. Je vais essayer de comprendre comment utiliser mon code de synthé additif dans ce cadre durant les jours qui viennent...

    (pardon pour mon vocabulaire parfois, je viens de la musique électronique et du synthé modulaire...)
Connectez-vous ou Inscrivez-vous pour répondre.