BGMのボリュームを制御する(minim編)

◆PROCESSING 逆引きリファレンス

 カテゴリー:音楽・演奏

BGMのボリュームを制御する(minim編)

【解説】

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

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

minimには音楽の再生だけでなく、音量(ボリューム、ゲイン)をコントロールする機能が搭載されています。

ボリュームは良く聞く言葉です。音の大きさですよね。では、ゲインとは何でしょうか?・・・(汗)。

minimがサポートする音量の制御にはボリューム制御とゲイン制御がありますが、音楽関係に詳しくない私などには、「ゲイン」は聞き慣れない言葉です。

このあたりはスタジオラグへおこしやす 様のブログに解りやすく解説されていますので、興味がある方は参照してみて下さい。

ざっくりと理解できた範囲で書くと、ゲインとは「ある装置へ入力する音の大きさ(入力音量)」の事、ボリュームとは「ある装置から出力する音の大きさ(出力音量)」の事です(たぶん:汗)。

gaimvolume(画像URL:illust-AC 様:オリビア さん、acworks さん)

minim ではこれを別々の命令でコントロールする事ができる・・・筈なのですが、私のPCでは(何故か)ボリュームをコントロールする命令が動作しません(泣)。

このようにminimの制御命令は、PCの環境によって動作しない事があります。minimがサポートしている制御命令の利用可否を調べるには「サポート機能を判定する(minim編)」記事を参照してください。

私のようにボリューム(出力音量)が制御できない環境の人は、ゲイン(入力音量)を制御する事で、実際の音の大きさを調整する事になります。

現在のゲイン値を取得するには、AudioPlayerクラスが提供している getGain( ) メソッドを利用します。また任意のゲイン値を設定するには setGain( ) メソッドを利用します。

段階的にGain値を変更するには、shiftGain( ) メソッドが便利です。

【構文】

float  value  =  player . getGain( ) ;
void  player . setGain( float  value ) ;
void  player . shiftGain( float  from,  float  to,  int  millis ) ;

player は AudioPlayerクラスのインスタンス変数です。

【パラメータ】

value : 設定(あるいは取得)するゲイン値
from  : 変更開始ゲイン値
to        : 変更終了ゲイン値
millis : 変化する時間(ミリセカンド)

【注意】

ゲイン値がどの範囲でコントロールできるのかは、あなたのPC環境に依存します。私のPCでは+6から-80の範囲(マイナスほど音が小さくなる)で制御可能でした。

AudioPlayerクラスが提供しているprintControls( ) メソッドを実行すると、サポート範囲をコンソール領域に表示してくれます。

ただしゲイン値を大きくすると、その特性上、音が歪むことになるので注意が必要です。

setGain()メソッドに、サポートされる最大値以上のゲイン値を与えても、ゲイン値は最大値までしか大きくなりません。

同様にsetGain()メソッドに、サポートされる最小値以下のゲイン値を与えても、最小値までしか小さくなりません。

段階的にゲイン値を変化させるには、何度もsetGain()メソッドを使うよりは、shiftGain()メソッドを利用するほうが便利です。たとえばゲームなどで、徐々に音量を変化させたい場合に使えるのではないでしょうか?。

setGain()メソッドも、 From と To にサポートされている範囲外の値を与えても、サポート範囲内の数値でしかゲイン値が変化しません。

shiftGain()メソッドは、FromからToに向かって、指定したmillis ミリセカンド内で徐々にゲイン値を変化させます。

shiftGain( -80, 6, 5000 ); なら一旦ゲイン値を-80(最小)にした後、5秒間(5000ミリセカンド)かけて6(最大)まで徐々に音が大きくなります。

shiftGain( 6, -80, 5000 ); なら一旦ゲイン値を6(最大)にした後、5秒間(5000ミリセカンド)かけて-80(最小)まで徐々に音が小さくなります。

【関連記事】


サンプルプログラム

ゲイン値を制御する例:

dataフォルダ配下に音楽ファイル(”bgm.mp3″)がある前提です。

実行すると指定した音楽ファイルが繰り返し再生されます。この時キーボードのuを押すとゲイン値(音)が大きくなります。dなら小さくなります。

<出力サンプル>
setgain_sample

 

ゲイン値を段階的に制御する例:

dataフォルダ配下に音楽ファイル(”bgm.mp3″)がある前提です。

実行すると指定した音楽ファイルが繰り返し再生されます。この時キーボードのuを押すとゲイン値(音)が10秒かけて徐々に大きくなります。dなら徐々に小さくなります。

<出力サンプル>
shiftgain_sample

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

なおブラウザーのSOUND API ( P5.sound )とminim の仕様の違いにより、上記サンプルプログラムと下記動作例は、いろいろと異なっています。

  • 音量はゲインではなくボリュームで制御
  • 制御幅は、P5.soundでは 0 から 1 の範囲
  • マウスクリックで再生を開始・停止するように変更
  • 再生中か停止中かを表示

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

演奏される音楽は、魔王魂 様から拝借しました。物凄くカッコイイ音楽です。ありがとうございます。


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

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