AudioEngine

Un article de XMIX.

(Différences entre les versions)
Jump to: navigation, search
Version du 31 mars 2007 à 03:08
Yoann (Discuter | contribs)
(Les objets exposés)
← Différence précédente
Version actuelle
Yoann (Discuter | contribs)
(La configuration)
Ligne 1: Ligne 1:
L'AudioEngine est le système qui assure la gestion de tout les objets audio du serveur. Nous l'utiliserons au moyen d'une session. L'AudioEngine est le système qui assure la gestion de tout les objets audio du serveur. Nous l'utiliserons au moyen d'une session.
-==Les objets exposés==+==Présentation==
-* Les [[Les Sessions|sessions]] (TAS)+
-* [[Les AudioGroupe]] (TAG)+
-* [[Les Chanel]] (TChannel)+
-==Les objets serveurs==+Le moteur Audio (alias AudioEngine) et l'un des composants du projet XMIX. C'est lui qui prend en charge la lecture des différentes sources audios définit dans le système.
-* Le controleur de NameSpace+
-* Le routeur d'événement+
-* L'arbre des objets+
-==Les objets drivers (TAD/TAR)==+
-Les objets drivers assure l'implémentation des librairie audios externe comme Bass et FMod+
-* Les AudioDriver (TAD)+
-* Les AudioReader (TAR)+
-==Les objets techniques (TAE)==+L'AudioEngine est capable de lire les formats suivants :
-* Instanciation d'une DLL+* Fichier Locaux (ou LAN)
 +** WAV
 +** MP3
 +** OGG
 +** XM
 +** MOD
 +* Fichier WAN (sur serveur distant)
 +** MP3 over HTTP
 +** OGG over HTTP
 +* Radios
 +** LastFM
-==Modèle objet==+L'AudioEngine peut gérer plusieurs cartes audios simultanément, dans la terminologie XMIX nous nommons l'association d'une interface physique (carte audio) et d'une librairie de rendu (FMOD ou BASS) un AudioGroup.
 +Chaque AudioGroup pourra heberger plusieurs Cannaux qui permettrons la lecture d'une source audio supportée
-==Convention de nomage==+L'AudioEngine intègre également un language de script permettant l'exécution de différentes actions sur la lecture des morceaux, vous trouverez plus ample information sur le XMIX Script [[script_syntaxe | ici]].
-===Objet TAEDll=== 
-Cette objet gère le chargement et le déchargement d'une DLL de type TAudioEngine (pour l'instant comme FMod ou BASS). Il gère également le rennomage de la DLL afin de palier au problème de multiple instance au sein de Windows sans partager le même espace mémoire. 
-{| rules="all" style="border: 1px solid #999; padding-right: 0.5em;" cellspacing="0" cellpadding="3" 
-|-bgcolor="#DFDFDF" 
-! Quoi!! Valeur 
-|- 
-| Diminutif || TAE 
-|- 
-| Dérivée|| TAEBass, TAEFMod 
-|} 
-===Objet TAudioDriver===+==La Session==
-Cette objet permet la gestion d'un gestionnaire audio externe comme FMod ou BASS. Cette objet utilise un TAEDll pour le chargement d'une instance d'un moteur audio externe, assure le paramétrage du moteur audio.+Une session est le point d'entrée de l'utilisation du moteur audio.
-{| rules="all" style="border: 1px solid #999; padding-right: 0.5em;" cellspacing="0" cellpadding="3"+L'ouvertue d'une session, assure :
-|-bgcolor="#DFDFDF"+# Accès au moteur d'exécution des commandes du script
-! Quoi!! Valeur+# Accès au données des variables AudioEngine créées
-|-+# Instancier les objets définit dans le fichier de config
-| Diminutif || TAD+
-|-+
-| Dérivée || TADBass, TADFMod+
-|}+
-===Objet TAudioGroup===+===Le Scipt===
-Cette objet gère la création d'une table de mixage de un ou plusieurs canaux associé à un TAudioDriver initialisé sur une interface audio précise.+La première fonction de la session est de permettre d'exécuter un instruction XMIX. Ces intructions permettent de créer des objets audio et de les manipuler.<br>
 +Le principe d'un instruction est inspirée de la méthode utilisé dans la programation assembleur. L'idée est d'y aller vite, donc nous avons choisi d'utiliser la méthode d'interprétation la plus simple, à savoir sans structure et chaque instruction est décrite en une ligne.<br>
 +Il est ''orienté temps'', c'est à dire que chaque instruction est programme pour s'exécuter à un timecode précis, ou immédiatement.
 +L'instruction est donc composée d'un timecode, d'une variable ''objet'', d'une instruction appliquée à l'objet, et de n paramètres.
-===Objet TAudioReader===+Voici un petite exemple
-Cette objet assure l'implémentation d'une interface de lecture pour des données audios. Cette objet est dépendant de la nature des données (Net, Stream ou module) et du driver audio qui a été instancié (TAE*)+
-Des sous classe de cet objet ont été défini afin de spécialiser les contrôle en fonction des type de données audio : TARStream, TARMod, TARNet etc...+
-===Objet TSChannel et TChannel===+ // Création d'un AudioGroupe
-La classe TChannel représente le contrôle final d'un canal audio (une piste de la table de mixage TAudioGroup). Sa version « lecture-seule » TSChannel permet l'accès à la structure de donnée en lecture seule. TSChannel à pour vocation à être utilisé au niveau du GUI.+ *:*:CREATEAUDIOGROUP:AG1
 + // Création d’un cannal audio nommé A
 + *:AG1:CREATECHANNEL:A
 + // Activation de la mise à jour (mode Fast)
 + *:AG1/A:MONITOR:FAST
 + // Affectation du fichier ID=MON_FICHIER_1 à l’objet A
 + *:AG1/A:SETFILEID:"MON_FICHIER_1"
 + // Début de lecture du fichier après la quatrième seconde depuis le début
 + // de l’exécution du script
 + 4000:AG1/A:PLAY
 + // Création d’un objet stream nommé B
 + *:AG1:CREATECHANNEL:B
 + // Affectation du fichier ID=MON_FICHIER_2 à l’objet B
 + *:AG1/B:SETFILEID:"MON_FICHIER_2"
 + // lecture du second fichier dans 5 secondes
 + +5000:AG1/A:PLAY
 + // Attendre 30 secondes
 + +30000:*:NOP
 + // Libération des canaux A et B
 + +100:AG1:FREE:A
 + +100:AG1:FREE:B
 + // Fin du script
-==Dynamique des classes==+* [[script_syntaxe | La syntaxe]]
 + 
 +===L'accès aux variables===
 +La session permet également d'accéder aux valeurs des objets créés. Pour cela une fonction permet récupérer une Class TAEVarDump contenant les informations de l'objet. Un mécanisme permet la mise à jour des informations synchrosé un sur un timer externe. La fréquence de mise à jour est divisée en 2 catégories :
 +* Fast : Mise à jour de données quasi temp réel,
 +* Std : Mise à jour plus lent pour des contrôle évoluant lentement.
 +* None : Aucune mise à jour.
 +Exemple
 + Label1.Caption := IntToStr((__GetXmAUHeap.GetVal('/TestSession/AG1/A') AS TAEVChannel).BytePos);
 + 
 +===Les événements===
 +La session permet d'enregistrer une fonction callback pour récupérer les évenements.
 + 
 +===La configuration===
 +Certain objets comme la session un AudioGroup sont associer a une configuration compris dans le fichier <tt>xmAudioEngine.xml</tt>, en voici un extrait :
 +<pre>
 + <xmUsers name="main">
 + <!-- Definition d'un utilisateur pouvant ouvrir une session -->
 + <xmUser name="yoyo" pwd="yoyo!">
 + <!-- Configuration d'un AudioGroup, non instancié
 + à l'ouverture de la session -->
 + <xmAudioGroup name="Salon" active="false">
 + <xmAudioDriver name="default" driver="fmod">
 + <xmFModDriver name="fmod" Interface="1">
 + <xmProperty name="MixRate" value="44000"/>
 + </xmFModDriver>
 + </xmAudioDriver>
 + </xmAudioGroup>
 + <!-- Un autre AudioGroup initialisé à l'ouverture de la session -->
 + <xmAudioGroup name="AG1" active="true" driver="bass">
 + <xmBassDriver name="bass" Interface="1">
 + <xmProperty name="MixRate" value="44000"/>
 + <xmProperty name="ModOption" value="3F00"/>
 + </xmBassDriver>
 + <xmProperty name="Volume" value="128"/>
 + <xmProperty name="Mute" value="false"/>
 + </xmAudioGroup>
 + </xmUser>
 + </xmUsers>
 +</pre>

Version actuelle

L'AudioEngine est le système qui assure la gestion de tout les objets audio du serveur. Nous l'utiliserons au moyen d'une session.

Sommaire

Présentation

Le moteur Audio (alias AudioEngine) et l'un des composants du projet XMIX. C'est lui qui prend en charge la lecture des différentes sources audios définit dans le système.

L'AudioEngine est capable de lire les formats suivants :

  • Fichier Locaux (ou LAN)
    • WAV
    • MP3
    • OGG
    • XM
    • MOD
  • Fichier WAN (sur serveur distant)
    • MP3 over HTTP
    • OGG over HTTP
  • Radios
    • LastFM

L'AudioEngine peut gérer plusieurs cartes audios simultanément, dans la terminologie XMIX nous nommons l'association d'une interface physique (carte audio) et d'une librairie de rendu (FMOD ou BASS) un AudioGroup. Chaque AudioGroup pourra heberger plusieurs Cannaux qui permettrons la lecture d'une source audio supportée

L'AudioEngine intègre également un language de script permettant l'exécution de différentes actions sur la lecture des morceaux, vous trouverez plus ample information sur le XMIX Script ici.


La Session

Une session est le point d'entrée de l'utilisation du moteur audio. L'ouvertue d'une session, assure :

  1. Accès au moteur d'exécution des commandes du script
  2. Accès au données des variables AudioEngine créées
  3. Instancier les objets définit dans le fichier de config

Le Scipt

La première fonction de la session est de permettre d'exécuter un instruction XMIX. Ces intructions permettent de créer des objets audio et de les manipuler.
Le principe d'un instruction est inspirée de la méthode utilisé dans la programation assembleur. L'idée est d'y aller vite, donc nous avons choisi d'utiliser la méthode d'interprétation la plus simple, à savoir sans structure et chaque instruction est décrite en une ligne.
Il est orienté temps, c'est à dire que chaque instruction est programme pour s'exécuter à un timecode précis, ou immédiatement. L'instruction est donc composée d'un timecode, d'une variable objet, d'une instruction appliquée à l'objet, et de n paramètres.

Voici un petite exemple

// Création d'un AudioGroupe
*:*:CREATEAUDIOGROUP:AG1
// Création d’un cannal audio nommé A
*:AG1:CREATECHANNEL:A
// Activation de la mise à jour (mode Fast)
*:AG1/A:MONITOR:FAST
// Affectation du fichier ID=MON_FICHIER_1 à l’objet A
*:AG1/A:SETFILEID:"MON_FICHIER_1"
// Début de lecture du fichier après la quatrième seconde depuis le début
// de l’exécution du script
4000:AG1/A:PLAY
// Création d’un objet stream nommé B
*:AG1:CREATECHANNEL:B
// Affectation du fichier ID=MON_FICHIER_2 à l’objet B
*:AG1/B:SETFILEID:"MON_FICHIER_2"
// lecture du second fichier dans 5 secondes
+5000:AG1/A:PLAY
// Attendre 30 secondes
+30000:*:NOP
// Libération des canaux A et B
+100:AG1:FREE:A
+100:AG1:FREE:B
// Fin du script

L'accès aux variables

La session permet également d'accéder aux valeurs des objets créés. Pour cela une fonction permet récupérer une Class TAEVarDump contenant les informations de l'objet. Un mécanisme permet la mise à jour des informations synchrosé un sur un timer externe. La fréquence de mise à jour est divisée en 2 catégories :

  • Fast : Mise à jour de données quasi temp réel,
  • Std  : Mise à jour plus lent pour des contrôle évoluant lentement.
  • None : Aucune mise à jour.

Exemple

 Label1.Caption := IntToStr((__GetXmAUHeap.GetVal('/TestSession/AG1/A') AS TAEVChannel).BytePos);

Les événements

La session permet d'enregistrer une fonction callback pour récupérer les évenements.

La configuration

Certain objets comme la session un AudioGroup sont associer a une configuration compris dans le fichier xmAudioEngine.xml, en voici un extrait :

   <xmUsers name="main">
      <!-- Definition d'un utilisateur pouvant ouvrir une session -->
      <xmUser name="yoyo" pwd="yoyo!">
         <!-- Configuration d'un AudioGroup, non instancié 
              à l'ouverture de la session  -->
         <xmAudioGroup name="Salon" active="false">
            <xmAudioDriver name="default" driver="fmod">
               <xmFModDriver name="fmod" Interface="1">
                  <xmProperty name="MixRate" value="44000"/>
               </xmFModDriver>
            </xmAudioDriver>
         </xmAudioGroup>
        <!-- Un autre AudioGroup initialisé à l'ouverture de la session -->
	<xmAudioGroup name="AG1" active="true" driver="bass">
	 <xmBassDriver name="bass" Interface="1">
	    <xmProperty name="MixRate" value="44000"/>
	    <xmProperty name="ModOption" value="3F00"/>
	 </xmBassDriver>
	 <xmProperty name="Volume" value="128"/>
	 <xmProperty name="Mute" value="false"/>
	</xmAudioGroup>
      </xmUser>
   </xmUsers>