Пакет | flash.media |
Класс | public class Sound |
Наследование | Sound ![]() ![]() |
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
В проигрывателе 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 (параметры безопасности не применяются к динамически создаваемым звуковым данным):
Sound.id3
, SoundMixer.computeSpectrum()
, SoundMixer.bufferTime
и класс SoundTransform
.Дополнительные сведения о безопасности см. в следующих ресурсах.
См. также
Свойство | Определено | ||
---|---|---|---|
bytesLoaded : uint [только для чтения]
Возвращает число байт, доступных в настоящий момент в данном объекте Sound. | Sound | ||
bytesTotal : int [только для чтения]
Возвращает общее число байт в данном объекте Sound. | Sound | ||
![]() | constructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. | Object | |
id3 : ID3Info [только для чтения]
Обеспечивает доступ к метаданным, которые являются частью MP3-файла. | Sound | ||
isBuffering : Boolean [только для чтения]
Возвращает состояние буферизации внешних файлов MP3. | Sound | ||
length : Number [только для чтения]
Длина текущего звука в миллисекундах. | Sound | ||
![]() | prototype : Object [статические]
Ссылка на модель объекта класса или функции. | Object | |
url : String [только для чтения]
URL-адрес, с которого был загружен звук. | Sound |
Метод | Определено | ||
---|---|---|---|
Создает новый объект Sound. | Sound | ||
![]() | addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void
Регистрирует объект прослушивателя события в объекте EventDispatcher, в результате чего прослушиватель будет получать уведомления о событиях. | EventDispatcher | |
Закрывает поток, в результате чего загрузка данных прекращается. | Sound | ||
![]() |
Передает событие в поток событий. | EventDispatcher | |
Извлекает необработанные звуковые данные из объекта Sound. | Sound | ||
![]() |
Проверяет наличие у объекта EventDispatcher прослушивателей событий, которые зарегистрированы для получения уведомлений о событиях определенного типа. | EventDispatcher | |
![]() |
Показывает, определено ли заданное свойство для объекта. | Object | |
![]() |
Показывает, есть ли экземпляр класса Object в цепи прототипов объекта, заданного в качестве параметра. | Object | |
Инициирует загрузку внешнего MP3-файла с заданного URL-адреса. | Sound | ||
Создает новый объект SoundChannel для воспроизведения звука. | Sound | ||
![]() |
Показывает наличие заданного свойства и его перечисляемость. | Object | |
![]() |
Удаляет прослушиватель из объекта EventDispatcher. | EventDispatcher | |
![]() |
Задает доступность динамического свойства для операций цикла. | Object | |
![]() |
Возвращает строковое представление заданного объекта. | Object | |
![]() |
Возвращает элементарное значение заданного объекта. | Object | |
![]() |
Проверяет, зарегистрирован ли прослушиватель событий в объекте EventDispatcher или в любом из его предков для получения уведомлений о событиях определенного типа. | EventDispatcher |
Событие | Сводка | Определено | ||
---|---|---|---|---|
![]() | [многоадресное событие] Отправляется, когда проигрыватель Flash Player перемещается в фокус операционной системы и становится активным. | EventDispatcher | ||
Отправляется после успешной загрузки данных. | Sound | |||
![]() | [многоадресное событие] Отправляется, когда проигрыватель 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 |
COMM | Sound.id3.comment |
TALB | Sound.id3.album |
TCON | Sound.id3.genre |
TIT2 | Sound.id3.songName |
TPE1 | Sound.id3.artist |
TRCK | Sound.id3.track |
TYER | Sound.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.
id3
объекта Sound всегда разрешено для SWF-файлов, находящихся в той же изолированной программной среде безопасности, что и звуковой файл. Для файлов из других изолированный сред выполняется проверка системы безопасности.load()
класса Sound можно задать параметр context
, представленный объектом SoundLoaderContext. Если задать свойству checkPolicyFile
объекта SoundLoaderContext значение true
, проигрыватель Flash Player проверяет наличие файла политики URL-адресов на сервере, с которого загружается звук. Если имеется файл политики, разрешающий доступ к домену загружающего SWF-файла, тогда этот файл получает доступ к свойству id3
объекта Sound; в противном случае — не получает.Дополнительные сведения о безопасности см. в следующих ресурсах.
public function get id3():ID3Info
См. также
Конструктор загружает звуковой файл, но на запускает его воспроизведение. Предполагается, что файл находится в том же каталоге, что и 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.
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.
Sound.load()
запрещен, если вызывающий SWF-файл находится в локальной для файловой системы изолированной программной среде, а звук — в сетевой изолированной программной среде.allowNetworking
для тегов object
и embed
на странице HTML, содержащей SWF-содержимое.Дополнительные сведения по обеспечению безопасности см. в следующих источниках.
Параметры
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
flash.events.Event.COMPLETE
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Отправляется после успешной загрузки данных.
КонстантаEvent.COMPLETE
определяет значение свойства type
объекта complete
.
Данное событие имеет следующие свойства.
Свойство | Значение |
---|---|
bubbles | false |
cancelable | false ; нет поведения по умолчанию для отмены. |
currentTarget | Объект, активно обрабатывающий объект Event с помощью прослушивателя событий. |
target | Сетевой объект, который завершил загрузку. |
См. также
id3 | Событие |
flash.events.Event
flash.events.Event.ID3
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Отправляется объектом Sound, если для звука в формате MP3 доступны данные ID3.
КонстантаEvent.ID3
определяет значение свойства type
объекта события id3
.
Данное событие имеет следующие свойства.
Свойство | Значение |
---|---|
bubbles | false |
cancelable | false ; нет поведения по умолчанию для отмены. |
currentTarget | Объект, активно обрабатывающий объект Event с помощью прослушивателя событий. |
target | Объект Sound, загружающий MP3, для которого уже стали доступными данные ID3. Свойство target не всегда является объектом из списка отображения, для которого зарегистрирован прослушиватель событий. Используйте свойство currentTarget , чтобы обратиться к объекту в списке отображения, обрабатывающему событие в данный момент. |
См. также
ioError | Событие |
flash.events.IOErrorEvent
flash.events.IOErrorEvent.IO_ERROR
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Отправляется, когда происходит ошибка ввода-вывода, приводящая к сбою операции загрузки.
Задает значение свойстваtype
для объекта события ioError
.
Данное событие имеет следующие свойства.
Свойство | Значение |
---|---|
bubbles | false |
cancelable | false ; нет поведения по умолчанию для отмены. |
currentTarget | Объект, активно обрабатывающий объект Event с помощью прослушивателя событий. |
target | Сетевой объект, с которым произошла ошибка ввода/вывода. |
text | Текст, отображаемый в качестве сообщения об ошибке. |
См. также
open | Событие |
flash.events.Event
flash.events.Event.OPEN
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Отправляется при запуске операции загрузки.
КонстантаEvent.OPEN
определяет значение свойства type
объекта события open
.
Данное событие имеет следующие свойства.
Свойство | Значение |
---|---|
bubbles | false |
cancelable | false ; нет поведения по умолчанию для отмены. |
currentTarget | Объект, активно обрабатывающий объект Event с помощью прослушивателя событий. |
target | Сетевой объект, установивший подключение. |
См. также
progress | Событие |
flash.events.ProgressEvent
flash.events.ProgressEvent.PROGRESS
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9 |
Отправляется в случае получения данных в ходе операции загрузки.
Задает значение свойстваtype
для объекта события progress
.
Данное событие имеет следующие свойства.
Свойство | Значение |
---|---|
bubbles | false |
bytesLoaded | Число элементов или байт, загруженных на момент обработки события прослушивателем. |
bytesTotal | Общее число элементов или байт, которые в итоге будут получены в случае успешного завершения загрузки. |
cancelable | false ; нет поведения по умолчанию для отмены. |
currentTarget | Объект, активно обрабатывающий объект Event с помощью прослушивателя событий. |
target | Сетевой объект, сообщающий сведения о прогрессе. |
См. также
sampleData | Событие |
flash.events.SampleDataEvent
flash.events.Event.SAMPLE_DATA
Язык версии : | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10 |
Отправляется при запросе проигрывателем новых аудиоданных.
Задает значение свойстваtype
для объекта события SampleDataEvent
.
Данное событие имеет следующие свойства.
Свойство | Значение |
---|---|
bubbles | false |
cancelable | false ; нет поведения по умолчанию для отмены. |
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();
См. также
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); } } }