◆PROCESSING 逆引きリファレンス
カテゴリー:音楽・演奏
BGMの消音を制御する(minim編)
【解説】
minimは、PROCESSINGで手軽に音楽を演奏できるライブラリです。
minimについて、より詳しく知りたい方は下記公式サイト 様を参照して下さい。
音楽の演奏で音量(ゲイン)をコントロールする方法については「BGMのボリュームを制御する(minim編)」で触れました。
音量の制御ではゲインやボリューム制御の一種として、即座に音量を0にしたり、元の音量に戻したい場合があります。
ゲームの「ボスが来た!」モードではありませんが(笑)、消音と消音解除を即座に行いたいケースです。
minimには消音を制御するための 命令があります。
AudioPlayerクラスの mute() メソッドで消音が、unmute() メソッドで消音解除が可能です。現在消音中か否かを知るには isMuted() メソッドを利用します。
【構文】
●消音
void player. mute( ) ;
●消音解除
void player. unmute( ) ;
●消音状態を知る
boolean ret = player.isMuted( ) ;
player は AudioPlayerクラスのインスタンス変数です。
【パラメータ】
消音中なら ret に True が、消音中ではないなら False が戻されます。
【注意】
音楽の演奏中か否かに関わらず mute( ) メソッドは機能します。つまり演奏開始前に mute( ) すると、演奏を開始しても音が鳴らずに無音で始まることになります。
mute( ) 中でも演奏は継続します。音が鳴らないだけで再生が停まるわけではありません。また消音によりボリュームやゲインの値が変わることもありません。
消音してから消音を取り消した場合、それまで演奏していたのと同じボリューム、ゲインで音が鳴ります。
【関連記事】
- 音楽の再生準備を行う(minim編)
- サポート機能を判定する(minim編)
- BGMのボリュームを制御する(minim編)
- BGMの再生・停止を行う(minim編)
- BGMの再生位置を制御する(minim編)
- BGMのバランスを制御する(minim編)
- 音楽ファイルのメタ情報を取得する(minim編)
- BGMの周波数を分析する(minim編)
サンプルプログラム
消音する例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
import ddf.minim.*; //宣言 Minim mini; //Minimオブジェクト変数 AudioPlayer player; //音楽制御用インスタンス myButton button[]; //------------------------ //ボタンクラス //------------------------ class myButton{ PImage img = null; int bw, bh; int bx, by; //コンストラクタ myButton( String fileName ){ img = loadImage( fileName ); bw = img.width; bh = img.height; } //表示関数 void disp( int x, int y ){ bx = x; by = y; image( img, bx, by ); } //押下判定関数 boolean isPush( int x, int y ){ boolean ret = false; if( x > bx && x < bx + img.width && y > by && y < by + img.height ){ ret = true; } return( ret ); } } //------------------------ // 初期処理関数 //------------------------ void setup(){ boolean breakFlg = false; //初期処理エラーFLG size(200,200); //Minimインスタンスを作成する mini = new Minim( this ); //音楽ファイルを読み込む player = mini.loadFile("castle06.mp3"); if( player == null ){ println( "loadFile() error" ); breakFlg = true; } textSize( 16 ); textAlign( LEFT, TOP ); //ボタン生成 button = new myButton[3]; button[0] = new myButton( "play.png" ); button[1] = new myButton( "muteOff.png" ); button[2] = new myButton( "muteOn.png" ); if( breakFlg == true ){ //エラーなら終了 noLoop(); exit(); } } //------------------------ // 描画処理関数 //------------------------ void draw(){ background( 255 ); //ボタン描画 int x, y; String msg = ""; x = 52; //PLAYボタンの横位置 y = 152; //ボタンの縦位置 button[0].disp( x , y ); //PLAYボタンの隣に消音ON・OFFボタンを表示する x = x + button[0].bw; if( player.isMuted() ){ //消音中なら解除ボタンを表示 button[1].disp( x , y ); } else { //通常なら消音ボタンを表示 button[2].disp( x , y ); } //状態表示 if( player.isPlaying() ){ if( player.isMuted() ){ msg = "muted"; //消音中 } else { msg = "sing a song"; //演奏してるぜ } } fill( 0 ); text( msg, 32, 32 ); } //------------------------ // マウス押下イベント //------------------------ void mouseClicked(){ //どのボタンが押されたか判定する for( int i = 0; i < 3; i++ ){ if( button[i].isPush( mouseX, mouseY ) ){ if( i == 0 ){ //playが押された if( player.isPlaying() == false ){ player.loop(); } } else { //消音ON・OFFが押された if( player.isPlaying()){ if( player.isMuted() ){ //消音中なら解除 player.unmute(); } else { //演奏中なら消音する player.mute(); } } // 消音ボタンは2つで1つの機能なので、ここでBreak break; } } } } |
再生ボタンを押下すると、音楽の演奏を開始します。
演奏中に消音ボタンをクリックすると、消音します。再度クリックすると消音を解除します。
<出力サンプル>
(画像URL:illust-AC 様:がこんさん)
下記はサンプルプログラムと同じ動きになるように、 P5.js+P5.sound で書き直したものです。動作イメージを確認できます。※
※ブラウザーによっては下記サンプルが表示されない事があります。IE11はNGでした。動作イメージを確認したい方は、FireFox、Chrome、Edgeなどでお試しください。
演奏される音楽は、魔王魂 様から拝借しました。RPGのお城や冒険で演奏されそうな音楽です。ありがとうございます。
本ページで利用しているアイコン画像は、下記サイト様より拝借しております。各画像の著作権は、それぞれのサイト様および作者にあります。