Индивидуальный объект 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.