Nouveau gestionnaire de son pour le lecteur Flash

Nouveau gestionnaire de son pour le lecteur Flash

Pour faire suite à la nouvelle de l'intégration du support de l'H.264 et de l'AAC dans la dernière version bêta du lecteur Flash 9, Tinic Uro nous informe que le gestionnaire de son du lecteur va être intégralement récrit pour améliorer le support de l'AAC.

Ainsi, d'après ses dires, l'introduction future d'un support le plus complet possible du standard AAC deviendra l'occasion rêvée de récrire intégralement le gestionnaire de son du lecteur Flash actuel qui n'a pas été changé depuis l'année 1996.

Cette réécriture complète n'est prévue, traduit mot à mot : "que pour une des prochaines versions majeures du lecteur". On doit donc comprendre à cela que ce ne sera effectif au mieux qu'à la sortie du lecteur Flash 10. En effet même si la bêta actuelle du lecteur Flash 9 permet de lire l'AAC lors de la lecture des vidéos au format H.264, cela ne s'effectue encore qu'avec le gestionnaire de son actuel et uniquement sur deux canaux.

Cette réécriture apportera également le support de l'AAC multi-canal. On parle ici de bien plus que du 5.1 ou 7.1 puisque le format AAC est pensé pour supporter jusqu'à 48 canaux. Il est donc logique de supposer que le gestionnaire de son offrira une API qui les rendra accessibles en Actionscript (même si il est tout aussi logique de penser que le lecteur ne supporte au final pas un nombre aussi important de canaux).

La lecture des fichiers MP3 ou AAC encodés pour être lus avec toutes les fréquences standards entre 8Khz et 96Khz sera enfin possible. Mieux encore, ce n'est pas peu fier que Tinic nous informe que le moteur de son actuel du lecteur Flash 9 bêta 2 profite déjà du code qu'utilisera le future gestionnaire de son aprés sa réécriture. Ce n'est pas forcement une nouvelle révolutionnaire, mais cela suppose que dés la prochaine mise à jour du lecteur Flash, il ne sera plus possible d'avoir la mauvaise surprise de lire des fichiers accélérés par deux parce que la fréquence de lecture attendue n'est pas supportée.

Tinic Uro laisse le plus intéressant dans le flou, mais j'aime à penser que le nouveau moteur de son et sa nouvelle API permettront bien plus que l'actuel. Comme en tout premier lieu la possibilité d'envoyer directement des tableaux de bytes en entrée du moteur. Mais aussi la possibilité d'ajouter des effets standards ou personalisés, de les mixer, d'avoir des facilités dans l'édition des ondes sonores autrement qu'en travaillant directement sur les tableaux de bytes. En tout cas, même si ce n'est pas pour tout de suite on peut être sûr que la réécriture du moteur ouvrira la possibilité de ces implémentations à l'avenir. C'est donc une très bonne nouvelle pour nous tous.

Commentaires

Cool ! :)
Espérons aussi une meilleurs synchronisation des évènements, ainsi que du bouclage (qui ne s’est jamais emm***** à essayer de faire bien tourner une boucle ?)

Est-il possible de lire actuellement un fichier aac?
Un bout de code pour explication en gros m’aiderait grandement merci.

Marc, normalement il te suffit de lire un fichier vidéo .MP4 encodé avec le support de l’AAC comme tu lirais n’importe quel fichier FLV. Mais le rendu sonore sera fait en simple stéréo avec la version 9 du lecteur Flash si j’ai bien suivi.

Je n’ai pas réussi à accéder à l’API du lecteur Flash 10 en release candidate, mais tu pourrais aussi essayer de lire ton fichier avec ce lecteur, peut-être que comme l’avais promis Tinic, la lecture se fera réellement sur autant de pistes que le fichier le détermine.

Tiens nous au courant si tu as des infos.

Merci tek, pour ta réponse pour information coté AS3 :

Le format MPEG-4 Audio
La version 9.0.115 du lecteur Flash 9 intègre une compatibilité
MPEG-4 et permet la lecture de fichiers audio encodés avec
l’algorithme Advanced Audio Coding plus communément appelé
AAC.
Format compressé il est considéré comme le remplaçant du célèbre codec de compression MP3.
A qualité d’écoute égale, le format AAC est environ 30% plus
légér que le format MP3.
Cette optimisation du poids des fichiers audio permet donc une
réduction de la bande passante utilisée par les sons sur un site à large
trafic. Des portails audio comme I-Tunes utilisent déjà le format AAC
comme format de distribution. Des périphériques tels le I-Phone, la
PlayStation Portable ainsi qu’un grand nombre de téléphones
portables sont aussi compatibles avec ce format.

Coté code AS3 :

flash.net.NetConnection : la classe NetConnection est
utilisée pour le chargement de fichiers audio MPEG-4.

flash.net.NetStream : la classe NetStream est utilisée pour la
manipulation de fichiers audio MPEG-4.

Le tableau suivant recense les différentes extensions de fichiers
MPEG-4 permettant de contenir du son au format AAC compatible
avec le lecteur Flash 9 :
Extension Description
.M4A Fichier audio
.M4V Fichier video i-Tunes
.AAC Fichier audio AAC
.3GP Fichier audio et vidéo utilisé sur les téléphones 3G
.MP4 Fichier video

Notons que le lecteur Flash ne gère pas la lecture de fichiers AAC
contenant une piste MP3, ni les fichiers AAC protégés téléchargés
depuis des plates-formes telles I-Tunes. De la même manière, les
fichiers audio AAC protégés par la technologie de gestion des droits
numériques FairPlay ne sont pas compatibles.

Dans le code suivant nous chargeons un fichier son MPEG-4 AAC :

// instanciation d’un objet NetConnection
var chargeurSon:NetConnection = new NetConnection();

// lors d’un chargement de fichier local nous nous connectons à null
chargeurSon.connect(null);

// création d’un objet NetStream
var fluxAudio:NetStream = new NetStream ( chargeurSon );

// lecture du son
fluxAudio.play (“son.m4a”);

Bien que cela puisse vous surprendre, sachez que la lecture de fichiers
audio au format AAC n’est pas assurée par la classe Sound mais par
les classes NetStream et NetConnection.

Celles-ci sont utilisées dans le cas d’applications connectée à un
serveur de type Flash Media Server ou dans le cas de lecture de vidéos
au format FLV.

En testant le code précédent, le fichier son est lu mais l’erreur suivante
est levée et affichée dans la fenêtre de sortie :

Error #2044: AsyncErrorEvent non pris en charge : text=Error #2095:
flash.net.NetStream n’a pas été en mesure d’appeler l’élément de rappel
onMetaData.

Dans le cas de chargement de fichiers à l’aide de la classe
NetStream, il convient de toujours définir la propriété client avant
d’appeler la méthode play().

La propriété client, permet de préciser l’objet sur lequel est définie
la méthode onMetaData.
Aussi étrange que cela puisse paraître, l’objet NetStream ne diffuse pas d’événement lié aux métasdonnées du média chargé.
Nous retrouvons ci le modèle événementiel présent en ActionScript 1 et 2.

Dans le code suivant, nous utilisons le scénario principal comme
client :

// instanciation d’un objet NetConnection
var chargeurSon:NetConnection = new NetConnection();

// lors d’un chargement de fichier local nous nous connectons à null
chargeurSon.connect(null);

// création d’un objet NetStream
var fluxAudio:NetStream = new NetStream ( chargeurSon );

// lecture du son
fluxAudio.play (“son.m4a”);

// le scénario joue le rôle du client
fluxAudio.client = this;

/// méthode onMetaData définie sur le scénario principal
function onMetaData ( pMeta ):void
{

/*
duration : 395.90022675736964
trackinfo : [object Object]
audiochannels : 2
aacaot : 2
audiosamplerate : 44100
tags :
moovposition : 40
audiocodecid : mp4a
*/
for ( var p in pMeta ) trace( p + ” : ” + pMeta[p] );
}

Le paramètre pMeta reçoit un objet contenant différentes propriétés
liées aux métasdonnés du média chargé.

Voici en détail chacune des propriétés :

· aacaot : le type de fichier audio AAC, cette propriété peut avoir la
valeur 0 pour AAC Main, 1 pour AAC LC et 2 pour SBR audio types.

· audiochannels : le nombre de canaux du média chargé. Dans le cas
de fichiers audio AAC multicanaux, ces derniers sont décodés sur deux
canaux seulement par le lecteur Flash.

· audiocodecid : le codec audio utilisé du média chargé. La chaîne de
caractères mp4a est utilisée pour le format AAC, et .mp3 pour les
fichiers MP3.

· audiosamplerate : fréquence d’échantillonnage du fichier audio.

· duration : la durée en secondes du média chargé.

· moovposition : La position de l’atome moov au sein du média chargé.

· tags : un objet comprenant différentes informations liées au média
chargé. L’équivalent des données ID3 du format MP3.

· trackinfo : un objet contenant les eventuelles illustrations liées au
média (pochettes, photos) sous la forme de ByteArray.

Au cas où le fichier MPEG-4 n’est pas compatible nous pouvons
écouter l’événement NetStatusEvent.NET_STATUS :

// instanciation d’un objet NetConnection
var chargeurSon:NetConnection = new NetConnection();

// lors d’un chargement de fichier local nous nous connectons à null
chargeurSon.connect(null);

// création d’un objet NetStream
var fluxAudio:NetStream = new NetStream ( chargeurSon );

// écoute de l’événement NetStatusEvent.NET_STATUS
fluxAudio.addEventListener( NetStatusEvent.NET_STATUS, etatLecture );

function etatLecture ( pEvt:NetStatusEvent ):void
{
if ( pEvt.info.code == “NetStream.FileStructureInvalid” ) trace(“fichier
non compatible”);
else if ( pEvt.info.code == “NetStream.NoSupportedTrackFound” )
trace(“aucune piste trouvée”);
}
// lecture du son
fluxAudio.play (“son.m4a”);
// le scénario joue le rôle du client
fluxAudio.client = this;
/// méthode onMetaData définie sur le scénario principal
function onMetaData ( pMeta ):void
{
/*
duration : 395.90022675736964
trackinfo : [object Object]
audiochannels : 2
aacaot : 2
audiosamplerate : 44100
tags :
moovposition : 40
audiocodecid : mp4a
*/
for ( var p in pMeta ) trace( p + ” : ” + pMeta );
}

L’objet événementiel diffusé par l’événement
NetStatusEvent.NET_STATUS possède une propriété info
contenant un objet disposant d’informations sur l’état de la connexion.

Cet objet possède les deux propriétés suivantes :

· code : une chaîne de caractères indiquant l’état de la connexion.
Consultez la documentation pour connaître les différentes valeurs
renvoyées.

· level : renvoie la chaîne de caractère status si la connexion est
réussie ou error si celle-ci échoue.

Malheureusement, il n’existe pas de propriétés constantes de classe
afin de tester les valeurs retournées par les propriétés code et level.

Merci à Thibault Imbert
Pour c’est information précieuse, j’espère que ca répondera aux demandes d’information sur ces sujets un peu mal documenté et avec trés peu d’exemple…

Laisser un commentaire

Javascript doit être activé pour pouvoir poster

  rss rss english xhtml 1.1 css 2.0 wdg