Главная / Action Script 3
Пакетflash.media
Классpublic final class SoundMixer
НаследованиеSoundMixer Inheritance Object

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Класс SoundMixer содержит статические свойства и методы для глобального управления звуком в SWF-файле. Класс SoundMixer управляет встроенными потоковыми звуками в SWF; он не управляет динамическими созданными объектами Sound (то есть, объектами Sound созданными в ActionScript).



Общедоступные свойства
 СвойствоОпределено
  bufferTime : int
[статические] Число секунд для предварительной загрузки внедренного потокового звука в буфер перед началом передачи звука в поток.
SoundMixer
 Inheritedconstructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта.
Object
 Inheritedprototype : Object
[статические] Ссылка на модель объекта класса или функции.
Object
  soundTransform : SoundTransform
[статические] Объект SoundTransform, управляющий глобальными свойствами звука.
SoundMixer
Общедоступные методы
 МетодОпределено
  
[статические] Определяет, являются ли какие-либо звуки недоступными из-за ограничений безопасности.
SoundMixer
  
computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void
[статические] Создает снимок текущей звуковой волны и помещает его в заданный объект ByteArray.
SoundMixer
 Inherited
Показывает, определено ли заданное свойство для объекта.
Object
 Inherited
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра.
Object
 Inherited
Показывает наличие заданного свойства и его перечисляемость.
Object
 Inherited
Задает доступность динамического свойства для операций цикла.
Object
  
[статические] Останавливает воспроизведение всех звуков, воспроизводимых в данный момент.
SoundMixer
 Inherited
Возвращает строковое представление заданного объекта.
Object
 Inherited
Возвращает элементарное значение заданного объекта.
Object
Сведения о свойстве
bufferTimeсвойство
bufferTime:int  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Число секунд для предварительной загрузки внедренного потокового звука в буфер перед началом передачи звука в поток. Данные в загруженном звуке, включая время буферизации, не могут быть получены SWF-файлом, находящимся в другом домене, если не используется файл политики URL-адресов. Дополнительные сведения о безопасности и звуке см. в описании класса Sound.

Свойство SoundMixer.bufferTime затрагивает только время буферизации для встроенных потоковых звуков в SWF-файле и не зависит от динамически созданных объектов Sound (то есть, объектов Sound, созданных в ActionScript). Значение свойства SoundMixer.bufferTime не может переопределять или задавать значение по умолчанию для времени буферизации, заданного объектом SoundLoaderContext, который передан методу Sound.load().



Реализация
    public static function get bufferTime():int
    public function set bufferTime(value:int):void

См. также

soundTransformсвойство 
soundTransform:SoundTransform  [чтение и запись]

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Объект SoundTransform, управляющий глобальными свойствами звука. Объект SoundTransform включает свойства для настройки громкости, панорамы, назначения левого и правого динамиков. Объект SoundTransform затрагивает только звуки, встроенные в SWF-файл. Объект SoundTransform, использованный в данном свойстве, передает окончательные параметры звука, которые применяются ко всем звукам после задания отдельных параметров звука.



Реализация
    public static function get soundTransform():SoundTransform
    public function set soundTransform(value:SoundTransform):void

См. также

Сведения о методе
areSoundsInaccessible()метод
public static function areSoundsInaccessible():Boolean

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Определяет, являются ли какие-либо звуки недоступными из-за ограничений безопасности. Например, звук, загруженный не с того же домена, на котором находится SWF-файл, будет недоступен, если на его сервере нет файла политики URL-адресов, предоставляющего доступ к домену SWF-файла. Звук будет загружен и воспроизведен, но для недоступных звуков не выполняются операции более низкого уровня, такие как получение метаданных ID3 для звука.

Возвращает
Boolean — Строковое представление логического значения.

См. также

computeSpectrum()метод 
public static function computeSpectrum(outputArray:ByteArray, FFTMode:Boolean = false, stretchFactor:int = 0):void

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Создает снимок текущей звуковой волны и помещает его в заданный объект ByteArray. Значения форматируются как нормализованные значения с плавающей запятой в диапазоне от -1 до 1. Объект ByteArray, передаваемый параметру outputArray, перезаписывается и получает новые значения. Размер созданного объекта ByteArray фиксируется на 512 значениях с плавающей запятой, где первые 256 значения представляют левый канал, а вторые 256 значений — правый.

Примечание. Этот метод учитывает ограничения безопасности для локального файла и для междоменной загрузки. При работе с локальными SWF-файлами или звуками, загруженными с сервера, находящегося не в том же домене, что вызывающий SWF-файл, возможно, потребуется создать файл политики URL-адресов, чтобы преодолеть ограничения изолированной программной среды. Дополнительные сведения см. в описании класса Sound.

Этот метод поддерживается через RTMP в Flash Player 9.0.115.0 и более поздних версий. Можно контролировать потоки на сервере Flash Media Server в сценарии, выполняемом на стороне сервера. Дополнительные сведения см. в разделах о свойствах Client.audioSampleAccess и Client.videoSampleAccess в документе Ссылка на языке ActionScript на стороне сервера для Adobe Flash Media Server.

Параметры

outputArray:ByteArray — Объект ByteArray, содержащий значения, связанные со звуком. Если какие-то звуки недоступны вследствие ограничений безопасности (areSoundsInaccessible == true), объект outputArray остается без изменений. Если выключены все звуки, объект outputArray заполняется нулями.
 
FFTMode:Boolean (default = false) — Логическое значение, указывающее на то, подвергается ли звук сначала преобразованию Фурье. Если этому параметру задать значение true, вместо необработанной звуковой волны метод возвращает спектр частот. В спектре низкие частоты представлены слева, а высокие — справа.
 
stretchFactor:int (default = 0) — Разрешение звуковых образцов. Если задать для stretchFactor значение 0, образцы создаются с использованием частоты 44,1 кГц, при значении 1 используется частота 22,05 кГц, при значении 2 используется частота 11, 025 кГц и т.д.

См. также


Пример

В следующем примере метод computeSpectrum() используется для создания графического представления данных звуковой волны.

Конструктор загружает и запускает звуковой файл. (В данном примере ошибки не обрабатываются, и предполагается, что звуковой файл находится в том же каталоге, что и SWF-файл.) При воспроизведении звука прослушивается событие Event.ENTER_FRAME, в результате чего многократно вызывается метод onEnterFrame() для рисования графика значений звуковых данных. После завершения воспроизведения звука метод onPlaybackComplete() останавливает рисование, удалив прослушиватель события Event.ENTER_FRAME.

В методе onEnterFrame() метод computeSpectrum() сохраняет необработанный звук в объекте массива байт bytes. Образец создается с использованием частоты 44,1 кГц. Массив байт, содержащий 512 байт данных, каждый из которых содержит значение с плавающей запятой от -1 до 1. Первые 256 значений представляют левый канал, а вторые 256 значений — правый. Первый цикл for считывает первые 256 значений (левый стереоканал) и рисует линию от одной точки к другой с помощью метода Graphics.lineTo(). (Векторное графическое представление звуковой волны записывается непосредственно на объекте Sprite класса.) Байты звука считываются как 32-разрядное число с плавающей запятой из потока байт и умножаются на высоту графика, чтобы получить вертикальный диапазон кривой. Ширина равна удвоенной ширине длины канала. Второй цикл for считывает следующие 256 значений (правый стереоканал) и строит кривую в обратном порядке. Методы g.lineTo(CHANNEL_LENGTH * 2, PLOT_HEIGHT); и g.lineTo(0, PLOT_HEIGHT); рисуют основную линию для графиков волн. Полученная кривая волны похожа на зеркальное отражение первой.

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()метод 
public static function stopAll():void

Язык версии : ActionScript 3.0
Версии среды выполнения:  1.0 9

Останавливает воспроизведение всех звуков, воспроизводимых в данный момент.

При использовании данного свойства необходимо продумать модель безопасности проигрывателя Flash Player.

Дополнительные сведения см. в следующих источниках.


Пример

В следующем примере метод stopAll() используется для отключения двух звуков, воспроизводимых одновременно.

В конструкторе загружаются и запускаются два разных звуковых файла. Первый звук загружается локально и назначается звуковому каналу. (Предполагается, что файл находится в том же каталоге, что и SWF-файл.) Второй файл загружается и передается в виде потока с сайта Adobe. Для использования метода SoundMixer.stopAll() должны быть доступными все звуки. (Для проверки файла междоменной политики может использоваться объект SoundLoaderContext.) Для каждого звука настроен прослушиватель событий, который вызывается в случае возникновения ошибки ввода/вывода при загрузке звукового файла. Также создается текстовое поле muteButton. Оно прослушивает щелчки мыши, при которых вызывается метод muteButtonClickHandler().

Если в методе muteButtonClickHandler() текстовое поле содержит "ВЫКЛ", то метод areSoundsInaccessible() проверяет, имеет ли микшер доступ к файлам. Если файлы доступны, метод stopAll() выключает звуки. При повторном щелчке по текстовому полю возобновляется воспроизведение первого звука, а в текстовом поле снова отображается "ВЫКЛ". На этот раз метод stopAll() выключает один воспроизводимый звук. Обратите внимание, что метод stop() звукового канала также можно использовать для выключения определенного звука, назначенного каналу. (Для функционального использования канала звук необходимо повторно назначать каналу при каждом вызове метода 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);
        }
    }
}