個々の SoundChannel オブジェクトは、サウンドの左右のステレオチャンネルを両方とも制御します。MP3 サウンドがモノラルサウンドの場合、SoundChannel オブジェクトの左右のステレオチャンネルに含まれる波形は同じです。
再生中のサウンドの各ステレオチャンネルの振幅を検出するには、SoundChannel オブジェクトの
leftPeak
プロパティと
rightPeak
プロパティを使用します。これらのプロパティは、サウンド波形自体のピーク振幅を示します。実際の再生音量を表してはいません。実際の再生音量は、サウンド波形の振幅と、SoundChannel オブジェクトおよび SoundMixer クラスで設定されている音量値の相関結果です。
SoundChannel オブジェクトの pan プロパティを使用すると、再生中の左右のチャンネルに異なる音量レベルを指定できます。pan プロパティに指定できる値は、-1 ~ 1 の範囲です。-1 という値は、左のチャンネルを最大音量で再生し、右のチャンネルを消音することを意味します。1 という値は、右のチャンネルを最大音量で再生し、左のチャンネルを消音することを意味します。-1 と 1 の間の値は、左と右のチャンネルの値を指定した値に比例して設定します。値 0 は、両方のチャンネルを均等に中程度の音量レベルで再生することを意味します。
次のコード例では、SoundTransform オブジェクトを作成し、音量の値を 0.6 に、バランスの値を -1(左上チャンネルは最大音量、右チャンネルは消音)に設定しています。その後、SoundTransform オブジェクトを
play()
メソッドにパラメーターとして渡します。
play()
メソッドは、渡された SoundTransform オブジェクトを、再生を制御するために作成される新しい SoundChannel オブジェクトに適用します。
var req = new air.URLRequest("bigSound.mp3");
var snd = new air.Sound(req);
var trans = new air.SoundTransform(0.6, -1);
var channel = snd.play(0, 1, trans);
サウンドの再生中に、音量とバランスを変更できます。そのためには、SoundTransform オブジェクトの
pan
または
volume
プロパティを設定し、そのオブジェクトを SoundChannel オブジェクトの
soundTransform
プロパティとして適用します。
また、SoundMixer クラスの
soundTransform
プロパティを使用すると、すべてのサウンドに対してグローバルな音量とバランスの値を一度に設定することもできます。次に、この例を示します。
SoundMixer.soundTransform = new air.SoundTransform(1, -1);
また、SoundTransform オブジェクトを使用すると、Microphone オブジェクトの音量とバランスも設定できます(
サウンド入力のキャプチャ
を参照)。
次の例では、サウンドの再生中に、サウンドのバランスを左チャンネルから右チャンネルに変更してから元に戻しています。
var snd = new air.Sound();
var req = new air.URLRequest("bigSound.mp3");
snd.load(req);
var panCounter = 0;
var trans = new air.SoundTransform(1, 0);
var channel = snd.play(0, 1, trans);
channel.addEventListener(air.Event.SOUND_COMPLETE,
onPlaybackComplete);
var timer = setInterval(panner, 100);
function panner()
{
trans.pan = Math.sin(panCounter);
channel.soundTransform = trans; // or SoundMixer.soundTransform = trans;
panCounter += 0.05;
}
function onPlaybackComplete(event)
{
clearInterval(timer);
}
このコードでは、最初にサウンドファイルを読み込んだ後、SoundTransform オブジェクトを作成し、volume を 1(最大音量)に、バランスを 0(左右均等)に設定します。次に、
snd.play()
メソッドを呼び出し、SoundTransform オブジェクトをパラメーターとして渡します。
サウンドの再生中には、
panner()
メソッドを繰り返して実行します。
panner()
メソッドは、
Math.sin()
関数を使用して、-1 ~ 1 の範囲の値を生成します。この範囲は、
SoundTransform.pan
プロパティに設定できる値に対応しています。SoundTransform オブジェクトの
pan
プロパティを新しい値に設定した後、チャンネルの
soundTransform
プロパティを、変更後の SoundTransform オブジェクトを使用するように設定します。
このコード例を実行する場合は、ファイル名 bigSound.mp3 をローカルの MP3 ファイルの名前に変更します。 その後で例を実行します。まず、左チャンネルの音量が大きくなって右チャンネルの音量が小さくなり、次にはその逆に音量が変化します。
この例では、SoundMixer クラスの
soundTransform
プロパティを設定することで同じ効果を実現することもできます。ただし、その場合は、この SoundChannel オブジェクトが再生している単一のサウンドだけではなく、その時点で再生しているすべてのサウンドのバランスが影響を受けます。