Управление громкостью и панорамированием звукаFlash Player 9 и более поздних версий, Adobe AIR 1.0 и более поздних версий Индивидуальный объект SoundChannel управляет обоими стереоканалами звука, левым и правым. Если mp3-файл имеет монофоническое звучание, то левый и правый стереоканалы объекта SoundChannel будут содержать идентичные звуковые волны. Амплитуду каждого стереоканала звука можно узнать с помощью свойств leftPeak и rightPeak объекта SoundChannel. Эти свойства показывают максимальную амплитуду самой звуковой волны. Они не представляют фактическую громкость воспроизведения. Фактическая громкость воспроизведения является функцией значений амплитуды звуковой волны и громкости, заданных в объекте SoundChannel и классе SoundMixer. Свойство pan объекта SoundChannel можно использовать для установки разных уровней громкости для левого и правого каналов во время воспроизведения. Свойство pan может иметь значение от -1 до 1, где при значении -1 левому каналу задается максимальная громкость, а правый заглушается, а при значении 1 правому каналу назначается максимальная громкость, а левый заглушается. Числовые значения от -1 до 1 устанавливаются пропорционально для левого и правого канала, а значение 0 указывает на то, что оба канала сбалансированы и имеют среднюю громкость. Следующий код создает объект SoundTransform с громкостью на уровне 0,6 и панорамой -1 (максимальная громкость левого канала и заглушенный правый канал). Объект SoundTransform передается в качестве параметра для метода play(), который применяет его к новому объекту SoundChannel, созданному для управления воспроизведением. var snd:Sound = new Sound(new URLRequest("bigSound.mp3")); var trans:SoundTransform = new SoundTransform(0.6, -1); var channel:SoundChannel = snd.play(0, 1, trans); Громкость и панорамирование звука можно изменять во время воспроизведения, задавая требуемые значения свойства pan или volume объекта SoundTransform и затем применяя этот объект в качестве свойства soundTransform объекта SoundChannel. Также можно задать глобальные значения громкости и панорамы для всех звуков сразу с помощью свойства soundTransform класса SoundMixer, как в следующем примере. SoundMixer.soundTransform = new SoundTransform(1, -1); Кроме того, объект SoundTransform можно использовать для настройки значений громкости и панорамы для объекта Microphone (см. раздел Захват вводимого звука), а также для объектов Sprite и SimpleButton. В следующем примере панорамирования звук переходит с левого канала на правый и обратно во время воспроизведения. import flash.events.Event; import flash.media.Sound; import flash.media.SoundChannel; import flash.media.SoundMixer; import flash.net.URLRequest; var snd:Sound = new Sound(); var req:URLRequest = new URLRequest("bigSound.mp3"); snd.load(req); var panCounter:Number = 0; var trans:SoundTransform; trans = new SoundTransform(1, 0); var channel:SoundChannel = snd.play(0, 1, trans); channel.addEventListener(Event.SOUND_COMPLETE, onPlaybackComplete); addEventListener(Event.ENTER_FRAME, onEnterFrame); function onEnterFrame(event:Event):void { trans.pan = Math.sin(panCounter); channel.soundTransform = trans; // or SoundMixer.soundTransform = trans; panCounter += 0.05; } function onPlaybackComplete(event:Event):void { removeEventListener(Event.ENTER_FRAME, onEnterFrame); } Этот код сначала загружает аудиофайл, а затем создает новый объект SoundTransform с громкостью 1 (полная громкость) и панорамой 0 (одинаковая громкость левого и правого каналов). Затем вызывается метод snd.play(), которому в качестве параметра передается объект SoundTransform. В процессе воспроизведения звука многократно выполняется метод onEnterFrame(). Метод onEnterFrame() использует функцию Math.sin(), чтобы генерировать значение от -1 до 1. Этот диапазон соответствует допустимым значениям для свойства SoundTransform.pan. Свойство pan объекта SoundTransform получает новое значение, и после этого измененный объект назначается свойству soundTransform канала. Чтобы протестировать этот пример, замените имя файла bigSound.mp3 на имя локального mp3-файла. Затем запустите пример. Вы услышите, как левый канал становится громче, а правый тише и наоборот. В этом примере того же эффекта можно достичь, определив свойство soundTransform класса SoundMixer. Однако это затронуло бы панорамирование всех воспроизводимых в данный момент звуков, а не только звук, воспроизводимый данным объектом SoundChannel. |
|