Packageflash.media
Classepublic final class SoundMixer
HéritageSoundMixer Inheritance Object

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

La classe SoundMixer contient des propriétés et des méthodes statiques permettant de contrôler globalement le son dans l'application. La classe SoundMixer contrôle les sons en flux continu intégrés dans l'application. elle ne contrôle pas dynamiquement les sons créés (c'est-à-dire les sons générés en réponse à un objet Sound qui distribue un événement sampleData).



Propriétés publiques
 PropriétéDéfini par
  bufferTime : int
[statique] Durée, en secondes, de préchargement dans une mémoire tampon d'un son en flux continu imbriqué avant que la diffusion en continu ne commence.
SoundMixer
 Inheritedconstructor : Object
Référence à l'objet de classe ou à la fonction constructeur d'une occurrence donnée d'un objet.
Object
 Inheritedprototype : Object
[statique] Référence à l'objet prototype d'un objet de classe ou fonction.
Object
  soundTransform : SoundTransform
[statique] Objet SoundTransform contrôlant les propriétés audio globales.
SoundMixer
Méthodes publiques
 MéthodeDéfini par
  
[statique] Détermine si des sons sont inaccessibles en raison de restrictions de sécurité.
SoundMixer
  
computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void
[statique] Génère un instantané de l'onde sonore actuelle et le place dans l'objet ByteArray spécifié.
SoundMixer
 Inherited
Indique si la propriété spécifiée d'un objet est définie.
Object
 Inherited
Indique si une occurrence de la classe Object figure dans la chaîne de prototype de l'objet spécifié en tant que paramètre.
Object
 Inherited
Indique si la propriété spécifiée existe et est énumérable.
Object
 Inherited
Définit la disponibilité d'une propriété dynamique pour les opérations en boucle.
Object
  
[statique] Arrête tout son en cours de lecture.
SoundMixer
 Inherited
Renvoie la représentation sous forme de chaîne de l'objet spécifié.
Object
 Inherited
Renvoie la valeur primitive de l'objet spécifié.
Object
Détails de la propriété
bufferTimepropriété
bufferTime:int  [lecture-écriture]

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

Durée, en secondes, de préchargement dans une mémoire tampon d'un son en flux continu imbriqué avant que la diffusion en continu ne commence. Les données d’un son chargé, y compris sa durée de préchargement en mémoire tampon, ne sont pas accessibles par un fichier SWF appartenant à un autre domaine, sauf si vous mettez en place un fichier de régulation interdomaines. Pour plus d'informations sur la sécurité et le son, consultez la description de la classe Sound. au flux ÇÇÇ Les données d’un son chargé, y compris sa durée de préchargement en mémoire tampon, ne sont pas accessibles par le code d'un fichier appartenant à un autre domaine, sauf si vous mettez en place un fichier de régulation interdomaines. Néanmoins, dans le sandbox d'application d'une application AIR, le code peut accéder aux données dans des fichiers de son à partir de n'importe quelle source. Pour plus d'informations sur la sécurité et le son, consultez la description de la classe Sound.

La propriété SoundMixer.bufferTime affecte uniquement la durée de mise en mémoire tampon des sons en flux continu imbriqués dans un fichier SWF. Elle n’a aucune incidence sur les objets Sound créés dynamiquement (autrement dit, créés dans ActionScript). La valeur de SoundMixer.bufferTime ne peut pas remplacer ni définir la durée de mise en mémoire tampon par défaut spécifiée dans l'objet SoundLoaderContext qui est transmis à la méthode Sound.load().



Implémentation
    public static function get bufferTime():int
    public function set bufferTime(value:int):void

Voir aussi

soundTransformpropriété 
soundTransform:SoundTransform  [lecture-écriture]

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

Objet SoundTransform contrôlant les propriétés audio globales. Un objet SoundTransform comprend les propriétés de réglage du volume, du déplacement panoramique, ainsi que des haut-parleurs gauche et droit. L’objet SoundTransform utilisé dans cette propriété fournit des paramètres audio finaux qui sont appliqués à la totalité des sons après l’application de paramètres audio individuels.



Implémentation
    public static function get soundTransform():SoundTransform
    public function set soundTransform(value:SoundTransform):void

Voir aussi

Détails de la méthode
areSoundsInaccessible()méthode
public static function areSoundsInaccessible():Boolean

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

Détermine si des sons sont inaccessibles en raison de restrictions de sécurité. Par exemple, un son chargé à partir d'un domaine différent de celui du contenu appelant cette méthode est inaccessible si le serveur du son ne possède pas de fichier de régulation d'URL autorisant l'accès au domaine de ce domaine. Le son peut cependant être chargé et lu, mais les opérations de bas niveau, telles que l'extraction de métadonnées ID3 pour le son, ne peuvent pas être exécutées sur des sons inaccessibles.

Pour le contenu d'une application AIR dans le sandbox de sécurité de l'application, l'appel à cette méthode renvoie toujours false. Tous les sons, y compris ceux chargés d'autres domaines, sont accessibles au contenu dans le sandbox de sécurité de l'application.

Valeur renvoyée
Boolean — Représentation de la chaîne de la valeur booléenne.

Voir aussi

computeSpectrum()méthode 
public static function computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

Génère un instantané de l'onde sonore actuelle et le place dans l'objet ByteArray spécifié. Les valeurs sont mises en forme comme des valeurs à virgule flottante normalisées allant de -1,0 à 1,0. L'objet ByteArray transmis au paramètre outputArray est remplacé par de nouvelles valeurs. La taille de l’objet ByteArray créé est fixée à 512 valeurs à virgule flottante, les 256 premières représentant le canal gauche et les autres le canal droit.

Remarque : cette méthode est soumise aux restrictions relatives à la sécurité des fichiers locaux et aux restrictions concernant le chargement interdomaines. Si vous utilisez des fichiers locaux ou des sons chargés à partir d’un serveur appartenant à un autre domaine que le contenu appelant, vous devez peut-être contourner les restrictions liées au sandbox par le biais d’un fichier de régulation interdomaines. Pour plus d'informations, consultez la description de la classe Sound. En outre, cette méthode ne permet pas d’extraire des données de flux RTMP, même si elle est appelée par un contenu résidant dans le même domaine que le serveur RTMP.

Cette méthode est prise en charge sur RTMP dans Flash Player 9.0.115.0 et versions ultérieures, ainsi que dans Adobe AIR. Vous pouvez contrôler l'accès aux flux sur un serveur FMS (Flash Media Server) dans un script coté serveur. Pour plus de détails, consultez les propriétés Client.audioSampleAccess et Client.videoSampleAccess dans le Guide de référence ActionScript d'Adobe Flash Media Server côté serveur.

Paramètres

outputArray:ByteArray — Objet ByteArray qui contient les valeurs associées au son. Si certains sons ne sont pas disponibles en raison des restrictions de sécurité (areSoundsInaccessible == true), l'objet outputArray ne subit aucune modification. Si tous les sons sont arrêtés, l'objet outputArray est rempli de zéros.
 
FFTMode:Boolean (default = false) — Valeur booléenne indiquant si les données audio sont d'abord soumises à une transformation de Fourier. Lorsque ce paramètre correspond à true, la méthode renvoie un spectre de fréquences, plutôt que l'onde sonore brute. Dans le spectre de fréquences, les basses fréquences sont représentées sur la gauche et les hautes fréquences sur la droite.
 
stretchFactor:int (default = 0) — Résolution des échantillons audio. Si vous réglez la valeur stretchFactor sur 0, les données sont échantillonnées à 44,1 KHz. Réglez-la sur 1 et elles sont échantillonnées à 22,05 KHz ; sur 2 et elles sont échantillonnées à 11,025 KHz, etc.

Voir aussi


Exemple

Dans l'exemple suivant, la méthode computeSpectrum() est utilisée pour produire une représentation graphique des données d'ondes acoustiques.

Dans le constructeur, un fichier audio est chargé et défini sur lecture. (Il n'y a pas de gestion d'erreur dans cet exemple, et le fichier audio est supposé être dans le même répertoire que le fichier SWF.) Cet exemple est à l'écoute de l'événement Event.ENTER_FRAME pendant la lecture du son, ce qui déclenche de façon répétée la méthode onEnterFrame() pour le traçage du graphique des valeurs de données audio. Lorsque la lecture d'un son est terminée, la méthode onPlaybackComplete() arrête le processus de dessin en supprimant l'écouteur de l'événement Event.ENTER_FRAME.

Dans la méthode onEnterFrame(), la méthode computeSpectrum() stocke le son brut dans l'objet tableau d'octets bytes. Les données sont échantillonnées à 44,1 KHz. Le tableau d'octets contient 512 octets de données, chacun contenant une valeur à virgule flottante comprise entre -1 et 1. Les 256 premières valeurs représentent le canal gauche et les autres le canal droit. La première boucle for lit les 256 premières valeurs (canal stéréo gauche ) et trace chaque fois une ligne d'un point à l'autre via la méthode Graphics.lineTo(). (L'affichage du graphique vectoriel de l'onde acoustique est directement écrit dans l'objet Sprite de la classe.) Les octets du son sont lus sous forme de nombre à virgule flottante 32 bits dans le flux d'octets et multipliés par la hauteur du point pour autoriser la plage verticale du graphique. La largeur est définie sur le double de la longueur du canal. La seconde boucle for lit les 256 valeurs suivantes (canal stéréo droit) et trace les lignes en ordre inverse. Les méthodes g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); et g.lineTo(0, PLOT_HEIGHT); tracent la base des ondes. Le dessin de la courbe audio qui en résulte produit un effet miroir.

package {
    import flash.display.Sprite;
    import flash.display.Graphics;
    import flash.events.Event;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.media.SoundMixer;
    import flash.net.URLRequest;
    import flash.utils.ByteArray;
    import flash.text.TextField;

    public class SoundMixer_computeSpectrumExample extends Sprite {

        public function SoundMixer_computeSpectrumExample() {
            var snd:Sound = new Sound();
            var req:URLRequest = new URLRequest("Song1.mp3");
            snd.load(req);
            
            var channel:SoundChannel;
            channel = snd.play();
            addEventListener(Event.ENTER_FRAME, onEnterFrame);
            channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete);
        }

        private function onEnterFrame(event:Event):void {
            var bytes:ByteArray = new ByteArray();
            const PLOT_HEIGHT:int = 200;
            const CHANNEL_LENGTH:int = 256;

            SoundMixer.computeSpectrum(bytes, false, 0);
            
            var g:Graphics = this.graphics;
            
            g.clear();
       
            g.lineStyle(0, 0x6600CC);
            g.beginFill(0x6600CC);
            g.moveTo(0, PLOT_HEIGHT);
            
            var n:Number = 0;
            
            for (var i:int = 0; i < CHANNEL_LENGTH; i++) {
                n = (bytes.readFloat() * PLOT_HEIGHT);
                g.lineTo(i * 2, PLOT_HEIGHT - n);
            }

            g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);
            g.endFill();
 
            g.lineStyle(0, 0xCC0066);
            g.beginFill(0xCC0066, 0.5);
            g.moveTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT);
            
            for (i = CHANNEL_LENGTH; i > 0; i--) {
                n = (bytes.readFloat() * PLOT_HEIGHT);
                g.lineTo(i * 2, PLOT_HEIGHT - n);
            }
  
            g.lineTo(0, PLOT_HEIGHT);
            g.endFill();
        }
        
        private function onPlaybackComplete(event:Event):void {
            removeEventListener(Event.ENTER_FRAME, onEnterFrame);
        }
    }
}
stopAll()méthode 
public static function stopAll():void

Version du langage: ActionScript 3.0
Versions du moteur d'exécution: AIR 1.0 Flash Player 9

Arrête tout son en cours de lecture.

Cette méthode n'arrête pas la tête de lecture. Les sons diffusés en continu sont émis de nouveau lorsque la tête de lecture passe au-dessus des images les contenant.

Pour utiliser cette propriété, tenez compte du modèle de sécurité suivant :

Cependant, dans Adobe AIR, le contenu du sandbox de sécurité de l'application (contenu installé avec l'application AIR) n'est pas restreint par ces limites de sécurité.

Pour plus d'informations, consultez les références suivantes :


Exemple

Dans l'exemple suivant, la méthode stopAll() est utilisée pour désactiver deux sons lus en même temps.

Dans le constructeur, deux fichiers audio différents sont chargés et définis sur la lecture. Le premier est chargé localement et attribué à un canal audio. (Ce fichier est supposé être dans le même répertoire que le fichier SWF.) Le second fichier est chargé et diffusé en continu depuis le site d'Adobe. Pour utiliser la méthode SoundMixer.stopAll(), tous les sons doivent être accessibles. (Un objet SoundLoaderContext peut être utilisé pour rechercher le fichier de régulation interdomaines.) Chaque son doit également posséder un écouteur d'événement invoqué lorsqu'une erreur d'E/S survient lors du chargement du fichier audio. Un champ de texte muteButton est également créé. Il est à l'écoute d'un clic de souris, qui invoque la méthode muteButtonClickHandler().

Dans la méthode muteButtonClickHandler(), si le contenu du champ de texte est "MUTE", la méthode areSoundsInaccessible() vérifie que le mélangeur de sons a accès aux fichiers. Si les fichiers sont accessibles, la méthode stopAll() interrompt les sons. En cas de nouveau clic sur le champ de texte, la lecture du premier son commence et le contenu du champ de texte redevient "MUTE". Cette fois la méthode stopAll() désactive le son en cours de lecture. Notez que la méthode stop() du canal audio peut également être utilisée pour arrêter un son spécifique attribué au canal. (Pour utiliser la fonctionnalité du canal, le son doit être réaffecté à ce canal à chaque appel de la méthode play().)

package {
    import flash.display.Sprite;
    import flash.net.URLRequest;
    import flash.media.Sound;
    import flash.media.SoundLoaderContext;
    import flash.media.SoundChannel;
    import flash.media.SoundMixer;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.events.MouseEvent;
    import flash.events.IOErrorEvent;

    public class SoundMixer_stopAllExample extends Sprite  {
        private var firstSound:Sound = new Sound();
        private var secondSound:Sound = new Sound();
        private var muteButton:TextField = new TextField();
        private var channel1:SoundChannel = new SoundChannel();
        
        public function SoundMixer_stopAllExample() {
            firstSound.load(new URLRequest("mySound.mp3"));
            secondSound.load(new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3"));

            firstSound.addEventListener(IOErrorEvent.IO_ERROR, firstSoundErrorHandler);
            secondSound.addEventListener(IOErrorEvent.IO_ERROR, secondSoundErrorHandler);
            
            channel1 = firstSound.play();
            secondSound.play();
            
            muteButton.autoSize = TextFieldAutoSize.LEFT;
            muteButton.border = true;
            muteButton.background = true;
            muteButton.text = "MUTE";
        
            muteButton.addEventListener(MouseEvent.CLICK, muteButtonClickHandler);         
        
            this.addChild(muteButton);
        }

        private function muteButtonClickHandler(event:MouseEvent):void {

            if(muteButton.text == "MUTE") {        
  
                if(SoundMixer.areSoundsInaccessible() == false) {
                    SoundMixer.stopAll();
                    muteButton.text = "click to play only one of sound.";
                }
                else {
                    muteButton.text = "The sounds are not accessible.";
                }
            }
           else {
                firstSound.play();        
                muteButton.text = "MUTE";
           }
        } 

        private function firstSoundErrorHandler(errorEvent:IOErrorEvent):void {
            trace(errorEvent.text);
        }

        private function secondSoundErrorHandler(errorEvent:IOErrorEvent):void {
            trace(errorEvent.text);
        }
    }
}