AudioEngine

Un article de XMIX.

(Différences entre les versions)
Jump to: navigation, search
Version du 6 novembre 2007 à 18:25
Yoann (Discuter | contribs)

← Différence précédente
Version actuelle
Yoann (Discuter | contribs)
(La configuration)
Ligne 77: Ligne 77:
===La configuration=== ===La configuration===
-Certain objets comme la session un AudioGroup sont associer a une configuration compris dans le fichier <tt>xmix-srv.xml</tt>, en voici un extrait :+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> <pre>
<xmUsers name="main"> <xmUsers name="main">

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>