AudioEngine
Un article de XMIX.
← Version précédente | Version suivante →
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 |
La Session
Une session est le point d'entrée de l'utilisation du moteur audio. L'ouvertue d'une session, assure :
- Accès au moteur d'exécution des commandes du script
- Accès au données des variables AudioEngine créées
- 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 des instructions XMIX. Ces intructions permettent de créer des objets audios et de les manipuler.
Le principe d'une instruction est inspirée de la méthode utilisée 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 programmée 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.
Chaque instruction retourne un code d'exécution (au moment où elle s'exécute), ce code sera disponnible au niveau de la fenêtre (ou du callback) StdCon. Ce pendant il est également prosible d'activer le déclanchement d'un événement lorsque le code de retour est connu: Pour cela il faudra préfixer l'instrunction des signes [ et ]. Si un code (hexadécimal sur 4 digits) est précisé entre les crochets alors il sera considéré comme un tag et sera également retourné lors du déclanchement de l'évenement.
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 xmix-srv.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>
Les objets exposés
- Le moteur Audio (TAudioEngine)
- Les Sessions (TAudioSession)
- Les objets Valeurs (TAEVal)
Les objets variables
Les objets variables sont les objets qui sont utilisable via le script
- Les AudioGroups (TAudioGroup)
- Les pistes (TChannel)
Les objets serveurs (TAE)
- L'arbre des variables (CAEVar)
- Les objets VarDump (CAEVarDump)
- Le gestionaire de session (CAESessionMgr)
Les objets drivers (TAD/TAR)
Les objets drivers assure l'implémentation des librairie audios externe comme Bass et FMod
- Les AudioDriver (TAudioDriver)
- Les AudioReader (TAudioReader)
Les objets techniques (TAE)
- Instanciation d'une DLL (TAEDll)