Управление громкостью и панорамированием звука

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.