サウンドボリュームとパンの制御

各 SoundChannel オブジェクトは、サウンドの左右のステレオチャンネルを制御します。MP3 サウンドがモノラルサウンドである場合、SoundChannel オブジェクトの左右のステレオチャンネルの波形は同一になります。

SoundChannel オブジェクトの leftPeak プロパティおよび rightPeak プロパティを使用すると、再生中のサウンドの各ステレオチャンネルの振幅を確認することができます。これらのプロパティは、サウンド波形そのもののピーク振幅を示します。実際の再生ボリュームを表すわけではありません。実際の再生ボリュームは、サウンド波形の振幅と、SoundChannel オブジェクトと SoundMixer クラスに設定されたボリューム値の関数です。

SoundChannel オブジェクトの pan プロパティは、再生中に左右それぞれに異なるボリュームレベルを指定するために使用されます。pan プロパティには、-1 から 1 までの値を指定することができます。ここで -1 とは、左チャンネルが最大ボリュームで再生され、右チャンネルが無音になること、そして 1 は右チャンネルが最大ボリュームで再生され、左チャンネルが無音であることを意味します。-1 から 1 までの数値は、左右のチャンネル値に対して相対値を設定します。値が 0 であると、両方のチャンネルで均衡が取れた中程度のボリュームレベルで再生されます。

次のコード例では、ボリューム値 0.6、パン値 -1 で SoundTransform オブジェクトを作成します。つまり、左チャンネルのボリュームが最大、右チャンネルのボリュームは無音です。SoundTransform オブジェクトが play() メソッドのパラメータとして渡されます。そうすると SoundTransform オブジェクトは、再生を制御するための新しい 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);

SoundTransform オブジェクトの pan または volume プロパティを設定し、このオブジェクトを SoundChannel オブジェクトの soundTransform プロパティとして適用することで、サウンドの再生中にボリュームとパンを変更することができます。

また、次の例で示すように、SoundMixer クラスの soundTransform プロパティを使用することで、すべてのサウンドのグローバルボリューム値とパン値を一度に設定することもできます。

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 (左右で均衡) に設定します。次に SoundTransform オブジェクトをパラメータとして渡し、snd.play() メソッドを呼び出します。

サウンドの再生中は、onEnterFrame() メソッドが繰り返し実行されます。onEnterFrame() メソッドは、Math.sin() 関数を使用して -1 から 1 までの値を生成します。この値の範囲は、SoundTransform.pan プロパティで許容される値の範囲となります。SoundTransform オブジェクトの pan プロパティは新しい値に設定され、チャンネルの soundTransform プロパティは、変更された SoundTransform オブジェクトを使用するよう設定されます。

この例を実行する場合は、ファイル名 bigSound.mp3 をローカルの MP3 ファイルの名前に変更します。その後、この例を実行します。左チャンネルのボリュームが大きくなると右チャンネルのボリュームが小さくなり、反対に、左チャンネルのボリュームが小さくなると右チャンネルのボリュームが大きくなります。

この例では、SoundMixer クラスの soundTransform プロパティを設定することで同じ効果を得ることができます。ただし、これにより、SoundChannel オブジェクトによって再生されている単独のサウンドだけではなく、再生中のすべてのサウンドのパンが影響を受けます。


 

このページに新しいコメントが追加された場合に、電子メールでの通知を希望する。 | コメントレポート

現在のページ: http://livedocs.adobe.com/flash/9.0_jp/main/00000294.html