Пакет | flash.media |
Класс | public class Sound |
Наследование | Sound EventDispatcher Object |
Подклассы | SoundAsset |
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
В проигрывателе Flash Player 10 и более поздних версий и в AIR 1.5 и более поздних версий этот класс можно также использовать для работы с динамически создаваемым звуком. В таком случае объект Sound использует функцию, назначенную обработчику события sampleData
, для выполнения опроса на наличие звуковых данных. Звук воспроизводится по мере его извлечения из объекта ByteArray, наполненного звуковыми данными. Можно также использовать метод Sound.extract()
для извлечения данных из объекта Sound, которые можно обработать перед записыванием в поток для воспроизведения.
Для управления звуками, встроенными в SWF-файл используются свойства класса SoundMixer.
Примечание. Звуковой API-интерфейс в ActionScript 3.0 отличается от такового в ActionScript 2.0. В ActionScript 3.0 невозможно организовывать объекты Sound в виде иерархии для управления их свойствами.
При использовании данного класса необходимо учесть следующую модель безопасности:
- Загрузка и воспроизведение звука запрещены, если вызывающий файл находится в изолированной программной среде сети, а звуковой файл для загрузки сохранен на локальном компьютере.
- По умолчанию загрузка и воспроизведение звука не разрешены, если вызывающий локальный файл пытается загрузить и воспроизвести удаленный звук. Пользователь должен явно определить права, чтобы разрешить этот тип доступа.
- Запрещены определенные операции со звуком. Данные в загруженном звуке не могут быть получены файлом, находящимся в другом домене, если не используется файл междоменной политики. Данное ограничение распространяется на следующие API-интерфейсы для работы со звуком:
Sound.id3
,SoundMixer.computeSpectrum()
,SoundMixer.bufferTime
и классSoundTransform
.
Однако в Adobe AIR эти ограничения по безопасности не распространяются на содержимое в изолированной программной среде безопасности application
(содержимое, установленное с приложением AIR).
Дополнительные сведения о безопасности см. в разделе центра разработчиков Flash Player Безопасность.
Связанные элементы API
Свойство | Определено | ||
---|---|---|---|
bytesLoaded : uint [только для чтения]
Возвращает число байтов, доступных в настоящий момент в данном объекте Sound. | Sound | ||
bytesTotal : int [только для чтения]
Возвращает общее число байтов в данном объекте Sound. | Sound | ||
constructor : Object
Ссылка на объект класса или функцию конструктора для данного экземпляра объекта. | Object | ||
id3 : ID3Info [только для чтения]
Обеспечивает доступ к метаданным, которые являются частью MP3-файла. | Sound | ||
isBuffering : Boolean [только для чтения]
Возвращает состояние буферизации внешних файлов MP3. | Sound | ||
isURLInaccessible : Boolean [только для чтения]
Указывает, усечено ли свойство Sound.url. | Sound | ||
length : Number [только для чтения]
Длина текущего звука в миллисекундах. | Sound | ||
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 | ||
загрузите звуковые данные MP3 из объекта ByteArray в объект Sound. | Sound | ||
loadPCMFromByteArray(bytes:ByteArray, samples:uint, format:String = "float", stereo:Boolean = true, sampleRate:Number = 44100.0):void
Загружает 32-битные звуковые данные с плавающей запятой PCM из объекта ByteArray в объект Sound. | Sound | ||
play(startTime:Number = 0, loops:int = 0, sndTransform:flash.media:SoundTransform = null):SoundChannel
Создает новый объект SoundChannel для воспроизведения звука. | Sound | ||
Показывает наличие заданного свойства и его перечисляемость. | Object | ||
Удаляет прослушиватель из объекта EventDispatcher. | EventDispatcher | ||
Задает доступность динамического свойства для операций цикла. | Object | ||
Возвращает строковое представление этого объекта, отформатированного в соответствии со стандартами, принятыми для данной локали. | Object | ||
Возвращает строковое представление заданного объекта. | Object | ||
Возвращает элементарное значение заданного объекта. | Object | ||
Проверяет, зарегистрирован ли прослушиватель события для указанного типа события с данным объектом EventDispatcher или любым его предшественником. | EventDispatcher |
Событие | Сводка | Определено | ||
---|---|---|---|---|
[многоадресное событие] Отправляется, когда проигрыватель Flash Player или приложение AIR перемещается в фокус операционной системы и становится активным. | EventDispatcher | |||
Отправляется после успешной загрузки данных. | Sound | |||
[многоадресное событие] Отправляется, когда проигрыватель Flash Player или приложение AIR теряет фокус системы и становится неактивным. | EventDispatcher | |||
Отправляется объектом Sound, если для звука в формате MP3 доступны данные ID3. | Sound | |||
Отправляется, когда происходит ошибка ввода-вывода, приводящая к сбою операции загрузки. | Sound | |||
Отправляется при запуске операции загрузки. | Sound | |||
Отправляется в случае получения данных в ходе операции загрузки. | Sound | |||
Отправляется при запросе средой выполнения новых аудиоданных. | Sound |
bytesLoaded | свойство |
bytesLoaded:uint
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Возвращает число байтов, доступных в настоящий момент в данном объекте Sound. Это свойство обычно необходимо только для внешних загружаемых файлов.
Реализация
public function get bytesLoaded():uint
bytesTotal | свойство |
id3 | свойство |
id3:ID3Info
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Обеспечивает доступ к метаданным, которые являются частью MP3-файла.
Звуковые МР3-файлы могут содержать теги ID3, передающие метаданные о файле. Если звук MP3, загружаемый с помощью метода Sound.load()
, содержит теги ID3, эти свойства можно запрашивать. Поддерживаются только теги ID3, которые могут использовать набор символов UTF-8.
Flash Player 9 и более поздних версий, а также AIR поддерживают теги 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 | Соответствующее свойство класса Sound |
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, которые поддерживаются, но не имеют предварительно определенных свойств в классе Sound. Для обращения к ним требуется вызвать mySound.id3.TFLT
, mySound.id3.TIME
и т. д. ПРИМЕЧАНИЕ. Ни один из этих тегов не поддерживается во Flash Lite 4.
Свойство | Описание |
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; в противном случае — не получает.
Однако в Adobe AIR эти ограничения по безопасности не распространяются на содержимое в изолированной программной среде безопасности application
(содержимое, установленное с приложением AIR).
Дополнительные сведения о безопасности см. в разделе центра разработчиков Flash Player Безопасность.
Реализация
public function get id3():ID3Info
Связанные элементы API
Пример ( Использование этого примера )
Конструктор загружает звуковой файл, но на запускает его воспроизведение. Предполагается, что файл находится в том же каталоге, что и 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, Flash Lite 4 |
Возвращает состояние буферизации внешних файлов MP3. Если значение true
, воспроизведение приостанавливается, пока объект ожидает загрузки дополнительных данных.
Реализация
public function get isBuffering():Boolean
isURLInaccessible | свойство |
isURLInaccessible:Boolean
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10.1, AIR 2 |
Указывает, усечено ли свойство Sound.url
. Когда свойство isURLInaccessible
имеет значение true
, свойство Sound.url
содержит только домен конечного URL-адреса, с которого загружается содержимое. Например, свойство усекается, если содержимое загружается со страницы http://www.adobe.com/assets/hello.mp3
и свойство Sound.url
имеет значение http://www.adobe.com
. Свойство isURLInaccessible
имеет значение true
, только когда верны все перечисленные ниже условия.
- Во время загрузки звукового файла произошла переадресация HTTP.
- SWF-файл, вызывающий метод
Sound.load()
, находится не в том домене, к которому относится конечный URL-адрес звукового файла. - SWF-файл, вызывающий метод
Sound.load()
, не имеет разрешения на доступ к звуковому файлу. Разрешение на доступ к звуковому файлу предоставляется так же, как для свойстваSound.id3
: создайте файл политики и используйте свойствоSoundLoaderContext.checkPolicyFile
.
Примечание. Свойство isURLInaccessible
впервые добавлено в версии Flash Player 10.1 и AIR 2.0. Однако оно доступно для SWF-файлов, созданных во всех версиях, если его поддерживает среда выполнения Flash. Таким образом, использование «строгого режима» в некоторых инструментах разработки приводит к возникновению ошибки. Чтобы обойти эту ошибку, используйте косвенный синтаксис mySound ["isURLInaccessible"]
или выключите строгий режим. Если для разработки используется ПО Flash Professional CS5 или Flex SDK 4.1, этот API-интерфейс можно использовать и скомпилировать для сред выполнения, выпущенных до Flash Player 10.1 и AIR 2.
Для содержимого приложения в AIR это свойство всегда имеет значение false
.
Реализация
public function get isURLInaccessible():Boolean
Связанные элементы API
length | свойство |
url | свойство |
url:String
[только для чтения] Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
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-адрес. Если HTTP-сервер переадресует исходный запрос URL, то свойство url
отражает конечный URL, с которого фактически был загружен файл. Такое сообщение абсолютного конечного URL эквивалентно поведению метода LoaderInfo.url
.
В некоторых случаях значение свойства url
усекается; дополнительные сведения см. в описании свойства isURLInaccessible
.
Реализация
public function get url():String
Связанные элементы API
Sound | () | Конструктор |
public function Sound(stream:URLRequest = null, context:SoundLoaderContext = null)
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Создает новый объект 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 ) — Дополнительный объект контекста SoundLoader, который может задать время буферизации (минимальное число миллисекунд, в течение которых данные MP3 будут храниться в буфере объекта Sound) и указать, следует ли приложению проверять наличие файла междоменной политики перед загрузкой звука.
|
close | () | метод |
public function close():void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Закрывает поток, в результате чего загрузка данных прекращается. После вызова метода 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 | () | метод |
public function extract(target:ByteArray, length:Number, startPosition:Number = -1):Number
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10, AIR 1.5 |
Извлекает необработанные звуковые данные из объекта Sound.
Данный метод предназначен для использования при работе с динамическими данными, используя функцию, назначенную событию sampleData
, для другого объекта Sound. То есть можно использовать этот метод для извлечения звуковых данных из объекта Sound. Затем можно записать данные в массив байтов, который другой объект Sound использует для потокового воспроизведения динамического звука.
Звуковые данные будут помещены в целевой массив байтов, начиная с текущей позиции массива. Аудиоданные всегда представлены в формате стереозвучания с частотой дискретизации 44 100 Гц. Образец имеет значение типа 32-разрядного числа с плавающей запятой, которое может быть преобразовано в значение типа «число» при помощи метода ByteArray.readFloat()
.
Параметры
target:ByteArray — Объект ByteArray, в котором размещаются извлеченные звуковые образцы.
| |
length:Number — Количество звуковых образцов для извлечения. Образец содержит и левый, и правый канал — т. е. два 32-разрядных значения с плавающей запятой.
| |
startPosition:Number (default = -1 ) — Образец, с которого начинается извлечение. Если не указать значение, первый вызов метода Sound.extract() начнет извлечение с начала звука; последующие вызовы метода startPosition без указания значения продолжат последовательное извлечение данных из файла.
|
Number — Количество образцов, записанных в объект ByteArray, который указан в параметре target .
|
Связанные элементы API
Пример ( Использование этого примера )
extract()
класса Sound для доступа к звуковым данным.
Данные mp3 загружены в объект Sound — sourceSnd
. Когда приложение загружает данные mp3, оно вызывает функцию loaded()
(обработчик событий для события complete
объекта sourceSnd
). Второй объект Sound, outputSound
, используется для воспроизведения измененного звука. Объект outputSound
имеет прослушиватель событий sampleData
; поэтому объект выполняет отправку периодических событий sampleData
после вызова метода play()
объекта. Метод upOctave()
возвращает массив байтов измененных звуковых данных на основе исходных звуковых данных. Он возвращает звук, который на одну октаву выше, за счет пропуска каждого второго звукового сэмпла в исходных данных. Обработчик событий для события sampleData
записывает возвращенный массив байтов в свойство data
объекта outputSound
. Массив байтов data
добавляется к выходным звуковым данным для объекта outputSound
.
Чтобы проверить этот пример, добавьте файл test.mp3 в каталог, в котором находится SWF-файл.
var sourceSnd:Sound = new Sound(); var outputSnd:Sound = new Sound(); var urlReq:URLRequest = new URLRequest("test.mp3"); sourceSnd.load(urlReq); sourceSnd.addEventListener(Event.COMPLETE, loaded); function loaded(event:Event):void { outputSnd.addEventListener(SampleDataEvent.SAMPLE_DATA, processSound); outputSnd.play(); } function processSound(event:SampleDataEvent):void { var bytes:ByteArray = new ByteArray(); sourceSnd.extract(bytes, 4096); event.data.writeBytes(upOctave(bytes)); } function upOctave(bytes:ByteArray):ByteArray { var returnBytes:ByteArray = new ByteArray(); bytes.position = 0; while(bytes.bytesAvailable > 0) { returnBytes.writeFloat(bytes.readFloat()); returnBytes.writeFloat(bytes.readFloat()); if (bytes.bytesAvailable > 0) { bytes.position += 8; } } return returnBytes; }
load | () | метод |
public function load(stream:URLRequest, context:SoundLoaderContext = null):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Инициирует загрузку внешнего файла MP3 с заданного URL-адреса. При передаче действительного объекта URLRequest конструктору Sound он сам вызывает Sound.load()
. Вызывать Sound.load()
самостоятельно нужно только тогда, когда классу Sound не передан объект URLRequest или передано значение null
.
После вызова load()
для объекта Sound невозможно загрузить другой звуковой файл в этот объект. Чтобы загрузить другой звуковой файл, нужно создать новый объект Sound.
При использовании данного метода необходимо учесть следующую модель безопасности:
- Вызов метода
Sound.load()
запрещен, если вызывающий файл находится в локальной для файловой системы изолированной программной среде, а звук — в сетевой изолированной программной среде. - Для доступа из доверенной локальной среды, или изолированной локальной среды с сетевым подключением, требуется разрешение web-сайта, которое можно получить с помощью файла политики URL-адресов.
- Нельзя подключаться к общепринятым зарезервированным портам. Полный список заблокированных портов см. в разделе «Ограничение API-интерфейсов сетевого подключения» в руководстве ActionScript 3.0 Developer's Guide (руководстве разработчика по ActionScript 3.0).
- Можно запретить использование SWF-файлом этого метода путем установки параметра
allowNetworking
для теговobject
иembed
на странице HTML, содержащей SWF-содержимое.
В приложении Flash Player 10 и более поздней версии при использовании типа содержимого multipart (например, multipart/form-data), в котором содержится загрузка (обозначена параметром filename в заголовке content-disposition в теле оператора POST), к операции POST применяются правила безопасности для загрузок:
- Операция POST должна быть выполнена в ответ на действие, инициированное пользователем, такое как щелчок мыши или нажатие клавиши.
- Если операция POST является междоменной (назначением операции POST не является сервер, на котором содержится SWF-файл, отправляющий запрос POST), целевой сервер должен предоставить файл политик URL, в котором разрешен междоменный доступ.
Кроме того, все объекты multipart Content-Type должны иметь допустимый синтаксис (в соответствии со стандартами RFC2046). Если синтаксис является недопустимым, к операции POST применяются правила безопасности, действующие для загрузок.
В Adobe AIR эти ограничения по безопасности не распространяются на содержимое в изолированной программной среде безопасности application
(содержимое, установленное с приложением AIR).
Дополнительные сведения о безопасности см. в разделе центра разработчиков Flash Player Безопасность.
Параметры
stream:URLRequest — URL-адрес, указывающий на внешний МР3-файл.
| |
context:SoundLoaderContext (default = null ) — Дополнительный объект контекста SoundLoader, который может задать время буферизации (минимальное число миллисекунд, в течение которых данные MP3 будут храниться в буфере объекта Sound) и указать, следует ли приложению проверять наличие файла междоменной политики перед загрузкой звука.
|
Выдает
IOError — Сетевая ошибка помешала загрузке файла.
| |
SecurityError — Локальные ненадежные файлы изолируются от Интернета. Этого можно избежать, если переклассифицировать этот файл как локальный с сетевым подключением или доверенный.
| |
SecurityError — Нельзя подключаться к общепринятым зарезервированным портам. Полный список заблокированных портов см. в разделе «Ограничение API-интерфейсов сетевого подключения» в руководстве ActionScript 3.0 Developer's Guide (руководстве разработчика по ActionScript 3.0).
| |
IOError — Значением свойства digest объекта stream не является null . Свойство digest объекта URLRequest следует задавать только при вызове метода URLLoader.load() во время загрузки SWZ-файла (компонент платформы Adobe).
|
Пример ( Использование этого примера )
В конструкторе создается объект 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; } } }
loadCompressedDataFromByteArray | () | метод |
public function loadCompressedDataFromByteArray(bytes:ByteArray, bytesLength:uint):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 3, Flash Player 11 |
загрузите звуковые данные MP3 из объекта ByteArray в объект Sound. Данные будут считаны из текущей позиции в массиве ByteArray, и текущая позиция в ByteArray будет являться концом указанной длины байтов после завершения операции. Если звуковые данные MP3 содержат данные ID3, события ID3 будут переданы во время вызова этой функции. Эта функция вызовет исключение, если объект ByteArray не будет содержать достаточного объема данных.
Параметры
bytes:ByteArray | |
bytesLength:uint |
loadPCMFromByteArray | () | метод |
public function loadPCMFromByteArray(bytes:ByteArray, samples:uint, format:String = "float", stereo:Boolean = true, sampleRate:Number = 44100.0):void
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 3, Flash Player 11 |
Загружает 32-битные звуковые данные с плавающей запятой PCM из объекта ByteArray в объект Sound. Если флаг стерео выставлен, данные будут считаны из текущей позиции в массиве ByteArray и текущая позиция в ByteArray будет являться концом указанной длины образца, умноженной на 1 канал или 2 канала, после завершения операции.
Начиная с версии Flash Player 11.8 объем аудиоданных, которые можно передать в эту функцию, ограничен. Для SWF версии 21 или более поздних версий эта функция выдает исключение, если объем аудиоданных, передаваемых в функцию, превышает 1800 секунд. То есть значение образцов/sampleRate не должно превышать 1800. В версиях SWF до 21 среда выполнения аварийно завершает работу без уведомлений, если объем переданных аудиоданных имеет продолжительность более 12000 секунд. Данная возможность предоставляется только для обратной совместимости.
Эта функция вызывает исключение, если объект ByteArray не содержит достаточного объема данных.
Параметры
bytes:ByteArray | |
samples:uint | |
format:String (default = "float ")
| |
stereo:Boolean (default = true )
| |
sampleRate:Number (default = 44100.0 )
|
play | () | метод |
public function play(startTime:Number = 0, loops:int = 0, sndTransform:flash.media:SoundTransform = null):SoundChannel
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Создает новый объект SoundChannel для воспроизведения звука. Этот метод возвращает объект SoundChannel, к которому нужно обращаться, чтобы остановить воспроизведение или отрегулировать громкость. (Чтобы управлять громкостью, панорамой и балансом, необходимо использовать объект SoundTransform, назначенный звуковому каналу.)
Параметры
startTime:Number (default = 0 ) — Исходное положение в миллисекундах, с которого должно начинаться воспроизведение.
| |
loops:int (default = 0 ) — Определяет, сколько раз звук возвращается к значению startTime , прежде чем прекратится воспроизведение звукового канала.
| |
sndTransform:flash.media:SoundTransform (default = null ) — Исходный объект SoundTransform, назначенный для звукового канала.
|
SoundChannel — Объект SoundChannel, используемый для управления звуком. Этот метод возвращает значение null , если не установлена звуковая карта или нет доступных аудиоканалов. Одновременно доступно не больше 32 каналов.
|
Связанные элементы API
Пример ( Использование этого примера )
Конструктор вызывает метод 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, Flash Lite 4 |
Отправляется после успешной загрузки данных.
КонстантаEvent.COMPLETE
определяет значение свойства type
объекта complete
.
Это событие имеет следующие свойства:
Свойство | Значение |
---|---|
bubbles | false |
cancelable | false ; поведение по умолчанию, подлежащее отмене, не определено. |
currentTarget | Объект, активно обрабатывающий объект Event с помощью прослушивателя событий. |
target | Сетевой объект, который завершил загрузку. |
Связанные элементы API
id3 | Событие |
flash.events.Event
свойство Event.type =
flash.events.Event.ID3
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Отправляется объектом Sound, если для звука в формате MP3 доступны данные ID3.
КонстантаEvent.ID3
определяет значение свойства type
объекта события id3
.
Это событие имеет следующие свойства:
Свойство | Значение |
---|---|
bubbles | false |
cancelable | false ; поведение по умолчанию, подлежащее отмене, не определено. |
currentTarget | Объект, активно обрабатывающий объект Event с помощью прослушивателя событий. |
target | Объект Sound, загружающий MP3, для которого уже стали доступными данные ID3. Свойство target не всегда является объектом из списка отображения, для которого зарегистрирован прослушиватель событий. Используйте свойство currentTarget для обращения к объекту в списке отображения, обрабатывающему событие в данный момент. |
Связанные элементы API
ioError | Событие |
flash.events.IOErrorEvent
свойство IOErrorEvent.type =
flash.events.IOErrorEvent.IO_ERROR
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Отправляется, когда происходит ошибка ввода-вывода, приводящая к сбою операции загрузки.
Задает значение свойстваtype
для объекта события ioError
.
Это событие имеет следующие свойства:
Свойство | Значение |
---|---|
bubbles | false |
cancelable | false ; поведение по умолчанию, подлежащее отмене, не определено. |
currentTarget | Объект, активно обрабатывающий объект Event с помощью прослушивателя событий. |
errorID | Ссылочный номер, связываемый с конкретной ошибкой (только AIR). |
target | Сетевой объект, с которым произошла ошибка ввода/вывода. |
text | Текст, отображаемый в качестве сообщения об ошибке. |
Связанные элементы API
open | Событие |
flash.events.Event
свойство Event.type =
flash.events.Event.OPEN
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Отправляется при запуске операции загрузки.
КонстантаEvent.OPEN
определяет значение свойства type
объекта события open
.
Это событие имеет следующие свойства:
Свойство | Значение |
---|---|
bubbles | false |
cancelable | false ; поведение по умолчанию, подлежащее отмене, не определено. |
currentTarget | Объект, активно обрабатывающий объект Event с помощью прослушивателя событий. |
target | Сетевой объект, установивший подключение. |
Связанные элементы API
progress | Событие |
flash.events.ProgressEvent
свойство ProgressEvent.type =
flash.events.ProgressEvent.PROGRESS
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | AIR 1.0, Flash Player 9, Flash Lite 4 |
Отправляется в случае получения данных в ходе операции загрузки.
Задает значение свойстваtype
для объекта события progress
.
Это событие имеет следующие свойства:
Свойство | Значение |
---|---|
bubbles | false |
bytesLoaded | Число элементов или байтов, загруженных на момент обработки события прослушивателем. |
bytesTotal | Общее число элементов или байтов, которые в итоге будут получены в случае успешного завершения загрузки. |
cancelable | false ; поведение по умолчанию, подлежащее отмене, не определено. |
currentTarget | Объект, активно обрабатывающий объект Event с помощью прослушивателя событий. |
target | Объект, сообщающий сведения о прогрессе. |
Связанные элементы API
sampleData | Событие |
flash.events.SampleDataEvent
свойство SampleDataEvent.type =
flash.events.SampleDataEvent.SAMPLE_DATA
Язык версии: | ActionScript 3.0 |
Версии среды выполнения: | Flash Player 10, AIR 1.5 |
Отправляется при запросе средой выполнения новых аудиоданных.
Задает значение свойства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(SampleDataEvent.SAMPLE_DATA,sineWaveGenerator); mySound.play();
Связанные элементы API
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); } } }
Tue Jun 12 2018, 11:34 AM Z