Пакетflash.media
Классpublic class Sound
НаследованиеSound Inheritance EventDispatcher Inheritance Object

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

Класс Sound позволяет работать со звуком в приложении. Класс Sound позволяет создавать новые объекты Sound, загружать в него и воспроизводить внешние МР3-файлы, закрывать поток звука и получать данные о звуке, такие как сведения о количестве байт в потоке и метаданные ID3. Более детальное управление звуком выполняется через источник звука (объект SoundChannel или Microphone звука) и через свойства класса SoundTransform, управляющего выводом звука на динамики компьютера.

В проигрывателе Flash Player 10 и более новой версии также можно использовать этот класс для работы с динамически создаваемым звуком. В таком случае Flash Player использует функцию, назначенную обработчику события sampleData, для выполнения опроса на наличие звуковых данных. Звук воспроизводится по мере его извлечения из объекта ByteArray, наполненного звуковыми данными. Можно также использовать метод Sound.extract() для извлечения данных из объекта Sound, которые можно обработать перед записыванием в поток для воспроизведения.

Для управления звуками, встроенными в SWF-файл используются свойства класса SoundMixer.

Примечание. Звуковой API-интерфейс в ActionScript 3.0 отличается от ActionScript 2.0. В ActionScript 3.0 нельзя организовывать объекты Sound в виде иерархии для управления их свойствами.

При использовании данного класса необходимо учесть модель безопасности проигрывателя Flash Player (параметры безопасности не применяются к динамически создаваемым звуковым данным):

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

Посмотреть примеры

См. также

flash.net.NetStream
Microphone
SoundChannel
SoundMixer
SoundTransform


Общедоступные свойства
 СвойствоОпределено
  bytesLoaded : uint
[только для чтения] Возвращает число байт, доступных в настоящий момент в данном объекте Sound.
Sound
  bytesTotal : int
[только для чтения] Возвращает общее число байт в данном объекте Sound.
Sound
 Inheritedconstructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта.
Object
  id3 : ID3Info
[только для чтения] Обеспечивает доступ к метаданным, которые являются частью MP3-файла.
Sound
  isBuffering : Boolean
[только для чтения] Возвращает состояние буферизации внешних файлов MP3.
Sound
  length : Number
[только для чтения] Длина текущего звука в миллисекундах.
Sound
 Inheritedprototype : Object
[статические] Ссылка на модель объекта класса или функции.
Object
  url : String
[только для чтения] URL-адрес, с которого был загружен звук.
Sound
Общедоступные методы
 МетодОпределено
  
Sound(stream:URLRequest = null, context:SoundLoaderContext = null)
Создает новый объект Sound.
Sound
 Inherited
addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Регистрирует объект прослушивателя события в объекте EventDispatcher, в результате чего прослушиватель будет получать уведомления о событиях.
EventDispatcher
  
Закрывает поток, в результате чего загрузка данных прекращается.
Sound
 Inherited
Передает событие в поток событий.
EventDispatcher
  
extract(target:ByteArray, length:Number, startPosition:Number = -1):Number
Извлекает необработанные звуковые данные из объекта Sound.
Sound
 Inherited
Проверяет наличие у объекта EventDispatcher прослушивателей событий, которые зарегистрированы для получения уведомлений о событиях определенного типа.
EventDispatcher
 Inherited
Показывает, определено ли заданное свойство для объекта.
Object
 Inherited
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра.
Object
  
load(stream:URLRequest, context:SoundLoaderContext = null):void
Инициирует загрузку внешнего MP3-файла с заданного URL-адреса.
Sound
  
play(startTime:Number = 0, loops:int = 0, sndTransform:SoundTransform = null):SoundChannel
Создает новый объект SoundChannel для воспроизведения звука.
Sound
 Inherited
Показывает наличие заданного свойства и его перечисляемость.
Object
 Inherited
removeEventListener(type:String, listener:Function, useCapture:Boolean = false):void
Удаляет прослушиватель из объекта EventDispatcher.
EventDispatcher
 Inherited
Задает доступность динамического свойства для операций цикла.
Object
 Inherited
Возвращает строковое представление заданного объекта.
Object
 Inherited
Возвращает элементарное значение заданного объекта.
Object
 Inherited
Проверяет, зарегистрирован ли прослушиватель событий в объекте EventDispatcher или в любом из его предков для получения уведомлений о событиях определенного типа.
EventDispatcher
События
 Событие Сводка Определено
 Inherited[многоадресное событие] Отправляется, когда проигрыватель Flash Player перемещается в фокус операционной системы и становится активным.EventDispatcher
  Отправляется после успешной загрузки данных.Sound
 Inherited[многоадресное событие] Отправляется, когда проигрыватель Flash Player покидает фокус операционной системы и становится неактивным.EventDispatcher
  Отправляется объектом Sound, если для звука в формате MP3 доступны данные ID3.Sound
  Отправляется, когда происходит ошибка ввода-вывода, приводящая к сбою операции загрузки.Sound
  Отправляется при запуске операции загрузки.Sound
  Отправляется в случае получения данных в ходе операции загрузки.Sound
  Отправляется при запросе проигрывателем новых аудиоданных.Sound
Сведения о свойстве
bytesLoadedсвойство
bytesLoaded:uint  [только для чтения]

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

Возвращает число байт, доступных в настоящий момент в данном объекте Sound. Как правило, используется только для файлов, загружаемых из внешних источников.


Реализация
    public function get bytesLoaded():uint
bytesTotalсвойство 
bytesTotal:int  [только для чтения]

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

Возвращает общее число байт в данном объекте Sound.


Реализация
    public function get bytesTotal():int
id3свойство 
id3:ID3Info  [только для чтения]

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

Обеспечивает доступ к метаданным, которые являются частью MP3-файла.

Звуковые МР3-файлы могут содержать теги ID3, передающие метаданные о файле. Если звук MP3, загружаемый с помощью метода Sound.load(), содержит теги ID3, эти свойства можно запрашивать. Поддерживаются только теги ID3, которые могут использовать набор символов UTF-8.

Flash Player 9 более поздних версий поддерживает теги ID3 2.0, а именно 2.3 и 2.4. В следующих таблицах перечислены стандартные теги ID3 2.0 и представляемые ими типы содержимого. Свойство Sound.id3 обеспечивает доступ к этим тегам посредством формата my_sound.id3.COMM, my_sound.id3.TIME и т.д. В первой таблице описываются теги, к которым можно обратиться и через имя свойства ID3 2.0 и через имя свойства ActionScript. Во второй таблице описаны теги ID3, которые поддерживаются, но не имеют предварительно определенных свойств в ActionScript.

Тег ID3 2.0Соответствующее свойство ActionScript
COMMSound.id3.comment
TALBSound.id3.album
TCONSound.id3.genre
TIT2Sound.id3.songName
TPE1Sound.id3.artist
TRCKSound.id3.track
TYERSound.id3.year

Во следующей таблице описаны теги ID3, которые поддерживаются, но не имеют предварительно определенных свойств в ActionScript. Для обращения к ним требуется вызватьmySound.id3.TFLT, mySound.id3.TIMEи т.д.

СвойствоОписание
TFLTТип файла
TIMEВремя
TIT1Описание группы содержимого
TIT2Описание заголовка, названия песни и содержимого
TIT3Уточнение подзаголовка и описания
TKEYКлавиша запуска
TLANЯзыки
TLENДлина
TMEDТип материала
TOALНазвание альбома, ролика и изображения
TOFNИмя исходного файла
TOLYИсходные поэты и авторы текста
TOPEИсходные артисты и исполнители
TORYГод исходного выпуска
TOWNВладелец файла или лицензиат
TPE1Ведущие исполнители и солисты
TPE2 Ансамбль, оркестр или аккомпанемент
TPE3Уточнение дирижера или исполнителя
TPE4Автор интерпретации, ремикса или другого вида модификации
TPOSЧасть набора
TPUBИздатель
TRCKНомер дорожки или позиции в наборе
TRDAДаты записи
TRSNНазвание Интернет-радиостанции
TRSOВладелец Интернет-радиостанции
TSIZРазмер
TSRCМеждународный стандартный код записи (ISRC)
TSSEПрограммные/аппаратные средства и их параметры, используемые для кодирования
TYERГод
WXXXКадр ссылки на URL-адрес

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

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


Реализация
    public function get id3():ID3Info

См. также


Пример
В следующем примере данные ID3 считываются из звукового файла и отображаются в текстовом поле.

Конструктор загружает звуковой файл, но на запускает его воспроизведение. Предполагается, что файл находится в том же каталоге, что и SWF-файл. Система должна иметь разрешение, чтобы считывать теги ID3 из загруженного звукового файла. Если в файле есть данные ID3 и программа получает разрешение на их чтение, отправляется событие Event.ID3, и заполняется свойство id3 звукового файла. Свойство id3 содержит объект ID3Info со всеми данными ID3.

В методе id3Handler() теги ID3 файла сохраняются в объекте класса ID3Info с именем id3. Инициируется текстовое поле для отображения списка тегов ID3. Цикл for повторяется для отображения всех тегов ID3 2.0 и добавляет имя и значение к содержимому текстового поля С помощью свойств данных ID3 (ID3Info) также добавляется имя исполнителя, название песни и альбома. ActionScript 3.0 и Flash Player 9 и более поздних версий поддерживают теги ID3 2.0, а именно 2.3 и 2.4. Если выполнять итерацию для свойств, как в цикле for, будут отображаться только теги ID3 2.0. Однако данные из более ранних версий также сохраняются в свойстве id3 песни: их можно получить с помощью свойств класса ID3 info. Теги для ID3 1.0 помещаются в конце файла, а теги ID3 2.0 — в начале. (Иногда файлы могут содержать теги и старых и новых версий в одном месте.) Если файл закодирован с использованием тегов двух версий (1.0 и 2.0) в начале и в конце, метод id3Handler() вызывается два раза. Сначала считываются теги версии 2.0, а затем версии 1.0. Если имеются только теги ID3 1.0, то эту информацию можно получить через свойства данных ID3, такие как id3.songname. Для ID3 2.0 свойство id3.TITS возвратить название песни с помощью нового тега (TITS).

Обратите внимание, что в данном примере не применяется обработка ошибок и, если содержимое ID3 имеет большую длину, результат может выходить за пределами видимой области.

package {
    import flash.display.Sprite;
    import flash.media.Sound;
    import flash.net.URLRequest;
    import flash.media.ID3Info;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.events.Event;

    public class Sound_id3Example extends Sprite {
        private var snd:Sound = new Sound();       
        private var myTextField:TextField = new TextField();

        public function Sound_id3Example() {
            snd.addEventListener(Event.ID3, id3Handler);
            snd.load(new URLRequest("mySound.mp3"));
        }
    
        private function id3Handler(event:Event):void {
            var id3:ID3Info = snd.id3;

            myTextField.autoSize = TextFieldAutoSize.LEFT;
            myTextField.border = true;

            myTextField.appendText("Received ID3 Info: \n");
              
            for (var propName:String in id3) {
                myTextField.appendText(propName + " = " + id3[propName] + "\n");
            }
 
            myTextField.appendText("\n" + "Artist: " + id3.artist + "\n");
            myTextField.appendText("Song name: " + id3.songName + "\n");
            myTextField.appendText("Album: " + id3.album + "\n\n"); 
 
            this.addChild(myTextField);
        }
    }
}
isBufferingсвойство 
isBuffering:Boolean  [только для чтения]

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

Возвращает состояние буферизации внешних файлов MP3. Если значение — true, воспроизведение приостанавливается, пока объект ожидает загрузки дополнительных данных.


Реализация
    public function get isBuffering():Boolean
lengthсвойство 
length:Number  [только для чтения]

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

Длина текущего звука в миллисекундах.


Реализация
    public function get length():Number
urlсвойство 
url:String  [только для чтения]

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

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

При первом вызове Sound.load(), свойство url сначала имеет значение null, так как окончательный URL еще неизвестен. Свойство url получит другое значение, как только объект Sound отправит событие open.

Свойство url содержит окончательный абсолютный URL, с которого загружался звук. Как правило, значение url совпадает со значением параметра stream метода Sound.load(). Однако, если методу Sound.load() был передан относительный URL-адрес, то значение свойства url будет представлять абсолютный URL-адрес. А если исходный запрос URL переадресуется HTTP-сервером, то свойство url отражает конечный URL, с которого фактически был загружен файл. Такое сообщение абсолютного конечного URL эквивалентно поведению метода LoaderInfo.url.


Реализация
    public function get url():String

См. также

Сведения о конструкторе
Sound()Конструктор
public function Sound(stream:URLRequest = null, context:SoundLoaderContext = null)

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

Создает новый объект Sound. При передаче действительного объекта URLRequest конструктору Sound он автоматически вызывает функцию load() для объекта Sound. Если конструктору Sound не передается действительный объект URLRequest, необходимо самостоятельно вызвать функцию load() для объекта Sound, иначе поток не загрузится.

После вызова load() для объекта Sound нельзя загрузить другой звуковой файл в этот объект. Чтобы загрузить другой звуковой файл, нужно создать новый объект Sound.

В Flash Player 10 более поздних версий вместо метода load() можно использовать обработчик события sampleData для динамической загрузки звука в объект Sound.

Параметры
stream:URLRequest (default = null) — URL-адрес, указывающий на внешний МР3-файл.
 
context:SoundLoaderContext (default = null) — Минимальное число миллисекунд МР3-данных, которое должно храниться в буфере объекта Sound. Объект Sound ждет, показ не будет загружено как минимум столько данных, прежде чем начинать воспроизведение и возобновлять воспроизведение после прерывания подключения к сети. Значение по умолчанию — 1000 (одна секунда).
Сведения о методе
close()метод
public function close():void

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

Закрывает поток, в результате чего загрузка данных прекращается. После вызова метода close() данные из потока не считываются.


Выдает
IOError — Не удалось закрыть поток или поток не был открыт.

Пример

В следующем примере, когда пользователь нажимает кнопку "Стоп", вызывается метод Sound.close() и поток звука останавливается.

В конструкторе создается текстовое поле для кнопки "Пуск" и "Стоп". Когда пользователь щелкает текстовое поле, вызывается метод clickHandler(). Он обрабатывает запуск и остановку воспроизведения звукового файла. Обратите внимание, что в зависимости от сетевого подключения или времени нажатия кнопки "Стоп" большая часть файла может быть уже загружена и на остановку воспроизведения звукового файла может потребоваться время. Для перехвата возможных ошибок ввода/вывода при закрытии потока используется блок try...catch. Например, если звук загружается из локального каталога и поток не передается, перехватывается ошибка 2029 с сообщением "Объект URLStream не имеет открытого канала".

 
package {
    import flash.display.Sprite;
    import flash.net.URLRequest;
    import flash.media.Sound;    
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.events.MouseEvent;
    import flash.errors.IOError;
    import flash.events.IOErrorEvent;

    public class Sound_closeExample extends Sprite {
        private var snd:Sound = new Sound();
        private var button:TextField = new TextField();
        private var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3");
        
        public function Sound_closeExample() {
            button.x = 10;
            button.y = 10;
            button.text = "START";
            button.border = true;
            button.background = true;
            button.selectable = false;
            button.autoSize = TextFieldAutoSize.LEFT;

            button.addEventListener(MouseEvent.CLICK, clickHandler);

            this.addChild(button);
        }

        private function clickHandler(e:MouseEvent):void {

            if(button.text == "START") {

                snd.load(req);
                snd.play();        

                snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);

                button.text = "STOP";
            }
            else if(button.text == "STOP") {
                    
                try {
                    snd.close();
                    button.text = "Wait for loaded stream to finish.";
                }
                catch (error:IOError) {
                    button.text = "Couldn't close stream " + error.message;    
                }
            }
        }
        
        private function errorHandler(event:IOErrorEvent):void {
                button.text = "Couldn't load the file " + event.text;
        }
    }
}


extract()метод 
flash10 function extract(target:ByteArray, length:Number, startPosition:Number = -1):Number

Язык версии : ActionScript 3.0
Версии среды выполнения: Flash Player 10

Извлекает необработанные звуковые данные из объекта Sound.

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

Звуковые данные будут помещены в целевой массив байтов, начиная с текущей позиции массива. Аудиоданные всегда представлены в формате стерео-звучания с частотой дискретизации 44100 Гц. Образец имеет значение типа 32-разрядного числа с плавающей запятой, которое может быть преобразовано в значение типа "число" при помощи метода ByteArray.readFloat().

Параметры

target:ByteArray — Объект ByteArray, в котором размещаются извлеченные звуковые образцы.
 
length:Number — Количество звуковых образцов для извлечения. Образец содержит и левый, и правый канал — т. е. два 32-разрядных значения с плавающей запятой.
 
startPosition:Number (default = -1) — Образец, с которого начинается извлечение. Если не указать значение, первый вызов метода Sound.extract() начнет извлечение с начала звука; последующие вызовы метода startPosition без указания значения продолжат последовательное извлечение данных из файла.

Возвращает
Number — Количество доступных образцов в объекте Sound.

См. также

load()метод 
public function load(stream:URLRequest, context:SoundLoaderContext = null):void

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

Инициирует загрузку внешнего MP3-файла с заданного URL-адреса. При передаче действительного объекта URLRequest конструктору Sound он сам вызывает Sound.load(). Вызывать Sound.load() самостоятельно нужно только тогда, когда классу Sound не передан объект URLRequest или передано значение null.

После вызова load() для объекта Sound нельзя загрузить другой звуковой файл в этот объект. Чтобы загрузить другой звуковой файл, нужно создать новый объект Sound.

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

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

Параметры

stream:URLRequest — URL-адрес, указывающий на внешний МР3-файл.
 
context:SoundLoaderContext (default = null) — Минимальное число миллисекунд МР3-данных, которое должно храниться в буфере объекта Sound. Объект Sound ждет, показ не будет загружено как минимум столько данных, прежде чем начинать воспроизведение и возобновлять воспроизведение после прерывания подключения к сети. Значение по умолчанию — 1000 (одна секунда).


Выдает
IOError — Сетевая ошибка помешала загрузке файла.
 
SecurityError — Локальные ненадежные SWF-файлы могут быть изолированы от Интернета. Этого можно избежать, если переклассифицировать этот SWF-файл как "local-with-networking" или доверенный.
 
SecurityError — Если вы пытаетесь подключиться к обычно зарезервированному порту. Полный список заблокированных портов см. в разделе "Ограничение сетевых API-интерфейсов" в главе "Безопасность" книги Программирование на ActionScript 3.0.

Пример

В следующем примере демонстрируется процесс загрузки звукового файла.

В конструкторе создается объект URLRequest, чтобы указать местоположение звукового файла — подкаста компании Adobe. Файл загружается в блок try...catch, чтобы перехватить возможные ошибки при загрузке. В случае ошибки ввода/вывода вызывается метод errorHandler(), и в текстовом поле отчета о прогрессе отображается сообщение об ошибке. По мере выполнения загрузки отправляется событие ProgressEvent.PROGRESS, и вызывается метод progressHandler(). В данном случае событие ProgressEvent.PROGRESS используется в качестве таймера для расчета прогресса загрузки.

Метод progressHandler() делит значение bytesLoaded, переданное с объектом ProgressEvent, на значение bytesTotal, чтобы вычислить процент загружаемых звуковых данных. Затем эти значения отображаются в текстовом поле. (Обратите внимание, что если файл небольшой, сохранен в кэше или находится в локальном каталоге, то прогресс может быть незаметным.)

package {
    import flash.display.Sprite;
    import flash.net.URLRequest;
    import flash.media.Sound;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.events.ProgressEvent;
    import flash.events.IOErrorEvent;
    
    public class Sound_loadExample extends Sprite {
        private var snd:Sound = new Sound();
        private var statusTextField:TextField  = new TextField();

        public function Sound_loadExample(){

            statusTextField.autoSize = TextFieldAutoSize.LEFT;
            var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3");
            
            try {
            snd.load(req);
            
            snd.play();
            }
            catch (err:Error) {
                trace(err.message);
            }
 
            snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
            snd.addEventListener(ProgressEvent.PROGRESS, progressHandler);
                     
            this.addChild(statusTextField);
        }
    
        private function progressHandler(event:ProgressEvent):void {
            var loadTime:Number = event.bytesLoaded / event.bytesTotal;
            var LoadPercent:uint = Math.round(100 * loadTime);
              
            statusTextField.text = "Sound file's size in bytes: " + event.bytesTotal + "\n" 
                                 + "Bytes being loaded: " + event.bytesLoaded + "\n" 
                                 + "Percentage of sound file that is loaded " + LoadPercent + "%.\n";
        }
 
        private function errorHandler(errorEvent:IOErrorEvent):void {
            statusTextField.text = "The sound could not be loaded: " + errorEvent.text;
        }
    }
}
play()метод 
public function play(startTime:Number = 0, loops:int = 0, sndTransform:SoundTransform = null):SoundChannel

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

Создает новый объект SoundChannel для воспроизведения звука. Этот метод возвращает объект SoundChannel, к которому нужно обращаться, чтобы остановить воспроизведение или отрегулировать громкость. (Чтобы управлять громкостью, панорамой и балансом, необходимо использовать объект SoundTransform, назначенный звуковому каналу.)

Параметры

startTime:Number (default = 0) — Исходное положение в миллисекундах, с которого должно начинаться воспроизведение.
 
loops:int (default = 0) — Определяет, сколько раз звук возвращается к значению startTime, прежде чем прекратится воспроизведение звукового канала.
 
sndTransform:SoundTransform (default = null) — Исходный объект SoundTransform, назначенный для звукового канала.

Возвращает
SoundChannel — Объект SoundChannel, используемый для управления звуком. Этот метод возвращает значение null, если не установлена звуковая карта или нет доступных каналов. Одновременно доступно не больше 32 каналов.

См. также


Пример

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

Конструктор вызывает метод Sound.load(), чтобы начать загрузку звуковых данных. Затем вызывается метод Sound.play(), который начнет воспроизведение, как только будет загружено достаточно данных. Метод Sound.play() возвращает объект SoundChannel, с помощью которого можно управлять воспроизведением звука. В текстовом поле отображаются инструкции. Чтобы убедиться, что содержимое, с которого пользователь хочет начать воспроизведение звука, уже загружено, создается объект Sprite с именем bar и отображается после завершения загрузки файла. После успешной загрузки файла отправляется событие Event.COMPLETE, которое запускает метод completeHandler(). Затем метод completeHandler() создает полоску и добавляет ее в список отображения. (Чтобы обеспечить интерактивные возможности, вместо объекта Shape используется объект Sprite.) Когда пользователь щелкает по полоске, запускается метод clickHandler().

В методе clickHandler() положение щелчка пользователя по оси Х (event.localX) используется для определения начальной точки воспроизведения. Так как длина полосы составляет 100 пикселов, и она начинается в точке 100 по оси Х, нетрудно вычислить процентное соотношение начальной точки. Кроме того, файл уже загружен, и поэтому свойство length звукового файла будет иметь значение длины полного файла в миллисекундах. Имея длину файла и положение на линии, можно определить начальное положение для звукового файла. После остановки воспроизведения звука файл запускается снова с выбранного начального положения, переданного в качестве параметра startTime метода play().

 
package {
    import flash.display.Sprite;
    import flash.display.Graphics;
    import flash.events.MouseEvent;
    import flash.media.Sound;;
    import flash.net.URLRequest;
    import flash.media.SoundChannel;
    import flash.events.ProgressEvent;
    import flash.events.Event;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.events.IOErrorEvent;
    
    public class Sound_playExample1 extends Sprite {
        private var snd:Sound = new Sound();
        private var channel:SoundChannel = new SoundChannel();
        private var infoTextField:TextField = new TextField();
    
        public function Sound_playExample1() {

            var req:URLRequest = new URLRequest("MySound.mp3");
            
            infoTextField.autoSize = TextFieldAutoSize.LEFT;
            infoTextField.text = "Please wait for the file to be loaded.\n" 
                                + "Then select from the bar to decide where the file should start.";
            
            snd.load(req);               
            channel = snd.play();

            snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
            snd.addEventListener(Event.COMPLETE, completeHandler);


            this.addChild(infoTextField);
        }

        private function completeHandler(event:Event):void {                
            infoTextField.text = "File is ready.";

            var bar:Sprite = new Sprite();

            bar.graphics.lineStyle(5, 0xFF0000);
            bar.graphics.moveTo(100, 100);
            bar.graphics.lineTo(200, 100);

            bar.addEventListener(MouseEvent.CLICK, clickHandler);

            this.addChild(bar);
        }
    
        private function clickHandler(event:MouseEvent):void {
            
                var position:uint = event.localX;
                var percent:uint = Math.round(position) - 100;   
                var cue:uint = (percent / 100) * snd.length;

                channel.stop();
                channel = snd.play(cue);    
        }

        private function errorHandler(errorEvent:IOErrorEvent):void {
            infoTextField.text = "The sound could not be loaded: " + errorEvent.text;
        }
    }
}

В следующем примере звук должен воспроизводиться один или два раза в зависимости от того, нажмет пользователь кнопку одним или двойным щелчком.

В конструкторе загружается звук, и создается простой прямоугольный объект Sprite с именем button. (Чтобы обеспечить интерактивные возможности, вместо объекта Shape используется объект Sprite.) Предполагается, что звуковой файл находится в том же каталоге, что и SWF-файл. (В данном примере не используется код обработки событий.)

Настраиваются два прослушивателя событий для нажатий кнопки одним или двойным щелчком мыши. Если пользователь щелкает один раз, вызывается метод clickHandler(), который воспроизводит звук. Если пользователь дважды щелкает кнопку, вызывается метод doubleClickHandler(), который воспроизводит звук два раза. Второму аргументу метода play() задается значение 1, в результате чего звук будет возвращаться к времени начала один раз для повторного воспроизведения. Время начала, первый аргумент, имеет значение 0. Это значит, что файл будет воспроизводиться с начала.

package {
    import flash.display.Sprite;
    import flash.events.MouseEvent;
    import flash.media.Sound;
    import flash.net.URLRequest;

    public class Sound_playExample2 extends Sprite {
        private var button:Sprite = new Sprite(); 
        private var snd:Sound = new Sound();
            
        public function Sound_playExample2() {

            var req:URLRequest = new URLRequest("click.mp3");
            snd.load(req);               
     
            button.graphics.beginFill(0x00FF00);
            button.graphics.drawRect(10, 10, 50, 30);
            button.graphics.endFill();
     
            button.addEventListener(MouseEvent.CLICK, clickHandler);
            button.addEventListener(MouseEvent.DOUBLE_CLICK, doubleClickHandler);
     
            this.addChild(button);
        }

        private function clickHandler(event:MouseEvent):void {
            snd.play();            
        }

        private function doubleClickHandler(event:MouseEvent):void {
            snd.play(0, 2);        
        }
    }
}

В следующем примере демонстрируется процесс и воспроизведения загрузки звукового файла.

В конструкторе файл загружается в блок try...catch, чтобы можно было перехватить возможные ошибки при загрузке. Один прослушиватель событий добавляется для объекта Sound: он будет реагировать на событие IOErrorEvent и вызывать метод errorHandler(). Другой прослушиватель добавляется для основного приложения: он будет реагировать на событие Event.ENTER_FRAME и использоваться в качестве таймера для отображения прогресса воспроизведения. И, в завершение, третий прослушиватель добавляется для звукового канала: он будет реагировать на событие Event.SOUND_COMPLETE (по завершении воспроизведения звука) и вызывать метод soundCompleteHandler(). Метод soundCompleteHandler() также удаляет прослушиватель события Event.ENTER_FRAME.

Метод enterFrameHandler() делит значение bytesLoaded, переданное с объектом ProgressEvent, на значение bytesTotal, чтобы вычислить процент загружаемых звуковых данных. Процент воспроизводимых звуковых данных можно определить, разделив значение свойства position звукового канала на длину звуковых данных. Однако если звуковые данные загружены не полностью, свойство length объекта Sound показывает только размер данных, загруженных на текущий момент. Оценка конечного размера полного звукового файла вычисляется путем деления length текущего звукового объекта на значение свойства bytesLoaded, деленное на значение свойства bytesTotal.

Обратите внимание, что если файл небольшой, сохранен в кэше или находится в локальном каталоге, то прогресс может быть незаметным. Кроме того, отрезок времени между началом загрузки звуковых данных и началом воспроизведения загруженных данных определяется значением свойства SoundLoaderContext.buffertime, которое по умолчанию составляет 1000 миллисекунд и может быть изменено.

package {
    import flash.display.Sprite;
    import flash.net.URLRequest;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.text.TextField;
    import flash.text.TextFieldAutoSize;
    import flash.events.Event;
    import flash.events.IOErrorEvent;
    
    public class Sound_playExample3 extends Sprite {
        private var snd:Sound = new Sound();
        private var channel:SoundChannel;
        private var statusTextField:TextField  = new TextField();

        public function Sound_playExample3(){

            statusTextField.autoSize = TextFieldAutoSize.LEFT;

           var req:URLRequest = new URLRequest("http://av.adobe.com/podcast/csbu_dev_podcast_epi_2.mp3");
            
            try {
                snd.load(req);
            
                channel = snd.play();
            }
            catch (err:Error) {
                trace(err.message);
            }
                    
            snd.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
            addEventListener(Event.ENTER_FRAME, enterFrameHandler);
            channel.addEventListener(Event.SOUND_COMPLETE, soundCompleteHandler);
                    
            this.addChild(statusTextField);
        }
    
        private function enterFrameHandler(event:Event):void {    
            var loadTime:Number = snd.bytesLoaded / snd.bytesTotal;
            var loadPercent:uint = Math.round(100 * loadTime);
            var estimatedLength:int = Math.ceil(snd.length / (loadTime));
            var playbackPercent:uint = Math.round(100 * (channel.position / estimatedLength));
      
            statusTextField.text = "Sound file's size is " + snd.bytesTotal + " bytes.\n" 
                                   + "Bytes being loaded: " + snd.bytesLoaded + "\n" 
                                   + "Percentage of sound file that is loaded " + loadPercent + "%.\n"
                                   + "Sound playback is " + playbackPercent + "% complete.";     
        }
 
        private function errorHandler(errorEvent:IOErrorEvent):void {
            statusTextField.text = "The sound could not be loaded: " + errorEvent.text;
        }

        private function soundCompleteHandler(event:Event):void {
            statusTextField.text = "The sound has finished playing.";
            removeEventListener(Event.ENTER_FRAME, enterFrameHandler);
        }
    }
}
Сведения о событии
complete Событие
Тип объекта события: flash.events.Event
свойство Event.type = flash.events.Event.COMPLETE

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

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

Константа Event.COMPLETE определяет значение свойства type объекта complete.

Данное событие имеет следующие свойства.

СвойствоЗначение
bubblesfalse
cancelablefalse; нет поведения по умолчанию для отмены.
currentTargetОбъект, активно обрабатывающий объект Event с помощью прослушивателя событий.
targetСетевой объект, который завершил загрузку.

См. также

id3 Событие  
Тип объекта события: flash.events.Event
свойство Event.type = flash.events.Event.ID3

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

Отправляется объектом Sound, если для звука в формате MP3 доступны данные ID3.

Константа Event.ID3 определяет значение свойства type объекта события id3.

Данное событие имеет следующие свойства.

СвойствоЗначение
bubblesfalse
cancelablefalse; нет поведения по умолчанию для отмены.
currentTargetОбъект, активно обрабатывающий объект Event с помощью прослушивателя событий.
targetОбъект Sound, загружающий MP3, для которого уже стали доступными данные ID3. Свойство target не всегда является объектом из списка отображения, для которого зарегистрирован прослушиватель событий. Используйте свойство currentTarget, чтобы обратиться к объекту в списке отображения, обрабатывающему событие в данный момент.

См. также

ioError Событие  
Тип объекта события: flash.events.IOErrorEvent
свойство IOErrorEvent.type = flash.events.IOErrorEvent.IO_ERROR

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

Отправляется, когда происходит ошибка ввода-вывода, приводящая к сбою операции загрузки.

Задает значение свойства type для объекта события ioError.

Данное событие имеет следующие свойства.

СвойствоЗначение
bubblesfalse
cancelablefalse; нет поведения по умолчанию для отмены.
currentTargetОбъект, активно обрабатывающий объект Event с помощью прослушивателя событий.
targetСетевой объект, с которым произошла ошибка ввода/вывода.
textТекст, отображаемый в качестве сообщения об ошибке.

См. также

open Событие  
Тип объекта события: flash.events.Event
свойство Event.type = flash.events.Event.OPEN

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

Отправляется при запуске операции загрузки.

Константа Event.OPEN определяет значение свойства type объекта события open.

Данное событие имеет следующие свойства.

СвойствоЗначение
bubblesfalse
cancelablefalse; нет поведения по умолчанию для отмены.
currentTargetОбъект, активно обрабатывающий объект Event с помощью прослушивателя событий.
targetСетевой объект, установивший подключение.

См. также

progress Событие  
Тип объекта события: flash.events.ProgressEvent
свойство ProgressEvent.type = flash.events.ProgressEvent.PROGRESS

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

Отправляется в случае получения данных в ходе операции загрузки.

Задает значение свойства type для объекта события progress.

Данное событие имеет следующие свойства.

СвойствоЗначение
bubblesfalse
bytesLoadedЧисло элементов или байт, загруженных на момент обработки события прослушивателем.
bytesTotalОбщее число элементов или байт, которые в итоге будут получены в случае успешного завершения загрузки.
cancelablefalse; нет поведения по умолчанию для отмены.
currentTargetОбъект, активно обрабатывающий объект Event с помощью прослушивателя событий.
targetСетевой объект, сообщающий сведения о прогрессе.

См. также

sampleData Событие  
Тип объекта события: flash.events.SampleDataEvent
свойство SampleDataEvent.type = flash.events.Event.SAMPLE_DATA

Язык версии : ActionScript 3.0
Версии среды выполнения: Flash Player 10

Отправляется при запросе проигрывателем новых аудиоданных.

Задает значение свойства type для объекта события SampleDataEvent.

Данное событие имеет следующие свойства.

СвойствоЗначение
bubblesfalse
cancelablefalse; нет поведения по умолчанию для отмены.
positionТочка, из которой поступают аудиоданные.

Пример

Следующий пример воспроизводит простую гармоническую волну.
var mySound:Sound = new Sound();
function sineWaveGenerator(event:SampleDataEvent):void {
    for ( var c:int=0; c<8192; c++ ) {
        event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25);
        event.data.writeFloat(Math.sin((Number(c+event.position)/Math.PI/2))*0.25);
    }
}

mySound.addEventListener(Event.SAMPLE_DATA,sineWaveGenerator);
mySound.play();

См. также

Примеры Как пользоваться примерами
SoundExample.as

В следующем примере отображаются сведения о звуковых событиях, происходящих по мере открытия и воспроизведения МР3-файла. Чтобы запустить данный пример, поместите файл MySound.mp3 в тот каталог, где находится рассматриваемый SWF-файл.
package {
    import flash.display.Sprite;
    import flash.events.*;
    import flash.media.Sound;
    import flash.media.SoundChannel;
    import flash.net.URLRequest;

    public class SoundExample extends Sprite {
        private var url:String = "MySound.mp3";
        private var song:SoundChannel;

        public function SoundExample() {
            var request:URLRequest = new URLRequest(url);
            var soundFactory:Sound = new Sound();
            soundFactory.addEventListener(Event.COMPLETE, completeHandler);
            soundFactory.addEventListener(Event.ID3, id3Handler);
            soundFactory.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);
            soundFactory.addEventListener(ProgressEvent.PROGRESS, progressHandler);
            soundFactory.load(request);
            song = soundFactory.play();
        }

        private function completeHandler(event:Event):void {
            trace("completeHandler: " + event);
        }

        private function id3Handler(event:Event):void {
            trace("id3Handler: " + event);
        }

        private function ioErrorHandler(event:Event):void {
            trace("ioErrorHandler: " + event);
        }

        private function progressHandler(event:ProgressEvent):void {
            trace("progressHandler: " + event);
        }
    }
}