BGMのバランスを制御する(minim編)

◆PROCESSING 逆引きリファレンス

 カテゴリー:音楽・演奏

BGMのバランスを制御する(minim編)

【解説】

minimは、PROCESSINGで手軽に音楽を演奏できるライブラリです。

minimについて、より詳しく知りたい方は下記公式サイト 様を参照して下さい。

音楽や効果音では、列車が走ってくるシーンのように、音が右から左、あるいは左から右へと移動しながら鳴ることがあります。

そうする事で、頭の中で本当に列車が走り抜けていくような感覚を演出するわけです。

%e5%88%97%e8%bb%8a(画像URL:illust-AC 様:メジマキ さん)

minimでもこのような効果を演出することが可能です。

音楽用語では左右の音量差の事を「パン(パンニング: panning)」とか「バランス」と呼びます。音楽関係に詳しくない私などは、どちらも同じものだと理解していましたが・・・厳密には異なるものなのだそうです。

理解した範囲によれば
パンとは、音(楽器など)が鳴っている方向の事
バランスとは、左右で聞こえる音量差の事
なのだそうです(たぶん・・・)。

興味がある方は
g200kg Music & Software
Adobe Premiere Pro
などのページが参考となります。

minimではパンとバランスを別々の命令でコントロールする事が可能です。

現在のパン、バランスを取得するには AudioPlayerクラスの getPan()、getBalance() メソッドを利用します。

パン、バランスを変更するにはAudioPlayerクラスの setPan()、setBalance() メソッドを利用します。

段階的にパンやバランスを変化(移動)させるには、AudioPlayerクラスのshiftPan()、shiftBalance() メソッドが便利です。

【構文】

●現在のパン値を取得する
float  nowPan  =  player. getPan(  );

●パン値を変更する
void  player. setPan(  float  newPan ) ;

●現在のバランス値を取得する
float  nowBalance  =  player. getBalance( ) ;

●バランス値を変更する
void  player. setBalance( float  newBalance ) ;

●段階的にパン値を変更する
void  player. shiftPan(  float  fromPan,  float  toPan,  int  millis ) ;

●段階的にバランス値を変更する
void  player. shiftBalance(  float  fromBal, float  toBal,  int millis ) ;

いずれも player は AudioPlayer クラスのインスタンス変数です。

【パラメータ】

nowPan  : 取得するパン値
newPan   : 設定するパン値
nowBalance  : 取得するバランス値
newBalance  : 設定するバランス値
fromPan  : 開始パン値
toPan    : 到達パン値
fromBal   : 開始バランス値
toBal     : 到達バランス値
millis     : FromからToへ変化するミリセカンド

パン値、バランス値は共に-1 から 1 までの範囲となります。
-1 なら左側が最大、1なら右側が最大となります。

【注意】

サポート機能を判定する(minim編)」の記事でも触れましたが、パンやバランスの制御はあなたのPC環境や利用する音楽データによってサポートされない事があります。

例えばモノラル音源の音を鳴らす場合は、いくらPCの環境が整っていてもパンやバランスを操作する事はできません。あたりまえ・・・ですね(汗)。パンやバランスが操作可能か否かを調べる方法については上記記事を参照してください。

パン値、バランス値は共に-1 から 1 までの範囲の値となります。

例えば getPan(  ); した値が -1 の場合、全音源は左側に偏っています。1なら逆に右側に偏っています。もしも左右で完全に独立した音が鳴る音楽ファイルの場合は、どちらかでしか音が聞こえないことになります。

実際にはパンを左側に偏らせても、(例えば楽器を左側だけに配置しても)音が回り込んで右からも少しだけ聞こえるように、反対側の音が0になるようなステレオ音楽ファイルは稀です。

バランスも同様です。-1なら左に偏らせ、1なら右側に偏らせます。

panbalance(画像URL:illust-AC 様:色々愛さん、Designer758さん)

shiftPan() や shiftBalance() は FromからToにむけて、millisで指定した時間で段階的にパンやバランスを変化させます。

shiftPan(  -1, 1, 5000 ); なら、一旦音源を左(-1)に偏らせた後に、5秒間(5000ミリセカンド)かけて右(1)まで徐々に移動させます。

なお、各命令に -1 から 1の範囲外の値を与えてもエラーにはなりません。かわりに意図しない音の鳴り方になる事があります。値の範囲はプログラマーが責任をもってね・・・という事のようです(汗)。

 

【関連記事】


サンプルプログラム

バランスを制御する例:

上記サンプルで用いている音楽ファイル(walking.mp3)は5秒間の演奏時間がある音です。

これを(だいたい)5秒感覚で切り替えながら、左から右、右から左へと音のバランスを段階的に変化させています。

<出力サンプル>
balance_sample

 

パンを制御する例:

実行すると、左右の耳と、ヘッドホンをつけた猫が表示されます(笑)。

左右の耳をクリックすると、その方向から反対側に向けてヘリコプターが飛んで行く音がします。中央の猫を押すと、真ん中から音がします(音は移動しません)。

音の移動に合わせて、スピーカーの絵も動きます。
試して頂く場合は、se.mp3 という名前の音楽ファイルと、48×48ピクセルの left.png、right.png、center.png の各画像をご用意下さい。

<出力サンプル>

pan_sample(画像URL:illust-AC 様:acworks さん、Yakko AC さん)

下記はサンプルプログラムと同じ動きになるように、 P5.js+P5.sound で書き直したものです。動作イメージを確認できます。

※ブラウザーによっては下記サンプルが表示されない事があります。IE11はNGでした。動作イメージを確認したい方は、FireFox、Chrome、Edgeなどでお試しください。

演奏される効果音は、魔王魂 様から拝借しました。ありがとうございます。

 


PROCESSING逆引きリファレンス一覧 へ戻る

本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。