音を追加する(Soundライブラリ編)
はじめに
Processingでの音の扱いについて
Processing で音を扱うためには、音関連のプログラム(ライブラリ)を利用することになります。以前は Minim というライブラリが多用されていましたが、Processing 3になって公式ライブラリとして Sound (https://processing.org/reference/libraries/sound/) が提供されるようになりました。ここでは公式ライブラリ Sound を使った音の扱い方を紹介します。 以下で、
- 音ファイルを使って鳴らす
- プログラムで音を作って鳴らす を紹介します。
ライブラリのインストールの確認
ライブラリを利用するには、自分の使っているProcessingにそのライブラリがインストールされている必要があります。下記の図のように、メニューで「スケッチ」-「ライブラリをインポート…」を選択します。Soundライブラリが正しくインストールされている場合には、プルダウンメニューに「Sound」と表示されます。 もし、「Sound」と表示されない場合は、Soundライブラリをインストールする必要があります。Processingの外部ライブラリのインストール方法については、「外部ライブラリのインストール」を参照してください。
Ⅰ.音ファイルを使って鳴らす
1.プログラム概要
既存の音ファイルを利用します。下記のプログラムではBGMが流れます。また、マウスをクリックすると音が鳴ります。
2.準備
演奏する音ファイルを準備してください。インターネット上には、ゲームのBGMや効果音といった音ファイルを無料でダウンロードできるサイトがありますので、検索してダウンロードしてみましょう。以下で説明するサンプルプログラムに使用した音ファイルは、次のサイトからダウンロードして使用しました。
無料音楽ファイルサイト http://www.music-note.jp/se/bomb.html
processingでは wav や mp3 などの形式の音ファイルが扱えます。ファイルは画像のときと同じように、作成しているスケッチの pde ファイルと同じ場所(フォルダ)に保存してください。
3.サンプルプログラム1
このプログラムは、プログラム開始後にBGMが流れ、マウスをクリックすると音が鳴ります。ちなみに、BGMは「skyhigh.mp3」という音ファイル、クリックしたときの音は「Cursor1.mp3」という音ファイルが再生されます。
”Cursor1.mp3”、 “skyhigh.mp3” のところを各自でダウンロードした音ファイルのファイル名に書き換えて実行してみてください。
//音ファイルを再生する// マウスクリックすると音が鳴る。// スペースキーを押してBGMのON/OFF切り替えができる
import processing.sound.*;SoundFile bgm, clck;int flg=0;
void setup() { size(640, 360); background(0); clck = new SoundFile(this, "Cursor1.mp3"); bgm = new SoundFile(this, "skyhigh.mp3"); bgm.amp(0.3);}
void draw() {}
void mousePressed() { background(0); fill(255); ellipse(mouseX, mouseY, 100, 100); clck.play();}
void keyPressed() { if (key == ' ') { if (flg==0) { bgm.loop(); flg = 1; } else { bgm.stop(); flg = 0; } }}
4.サンプルプログラム1の説明
ライブラリのインポート
インポート宣言をすることで、プログラム中でSoundライブラリの関数などが使えるようになります。プログラムの最初( setup()
や draw()
といった関数の外側)に書きましょう。
import processing.sound.*;
変数の宣言
既存の音ファイルを再生するには、SoundFileクラスの変数を宣言して使います。BGMを演奏するためにbgm、クリックした時に音を鳴らすためにclckという変数を使います。
SoundFile bgm, clck;
音ファイルの指定
new
を使って実際にSoundFileクラスの実体(インスタンス)を作成します。その際に、再生する音ファイルを指定します。
clck = new SoundFile(this, "Cursor1.mp3"); //クリックした時の音bgm = new SoundFile(this, "skyhigh.mp3"); //BGM
演奏(繰り返し) .loop()
繰り返して再生したい場合は、SoundFileクラスが提供している loop()
という関数(メソッド)を使います。なお、 amp(0.3)
は音量です。0~1.0の間で指定します。
繰り返し再生を停止したい場合は、 stop()
という関数を使います。
bgm.amp(0.3); //音量。0~1.0bgm.loop(); //繰り返し再生
bgm.stop(); //繰り返し再生の停止
演奏(1回だけ) .play()
1度だけ再生したい場合は、SoundFileクラスが提供している play()
という関数を使います。
clck.play(); //1回だけ再生
サンプルプログラム1のダウンロード(音ファイル付き)
(ダウンロードしたzipファイルは、必ず 右クリック→「すべて展開…」をしてから実行してください)
Ⅱ.プログラムで音を作って鳴らす
1.プログラム概要
プログラムで任意の音程(=周波数)の音を作成し、鳴らします。
※音名と周波数の対応の一例
音名 | ド | レ | ミ | ファ | ソ | ラ | シ | ド |
---|---|---|---|---|---|---|---|---|
周波数(Hz) | 261.626 | 293.665 | 329.628 | 349.228 | 391.995 | 440.000 | 493.883 | 523.251 |
2.サンプルプログラム2
//sin波(正弦波)の音を鳴らすimport processing.sound.*;SinOsc osc; //sin波(正弦波)
void setup() { osc = new SinOsc(this); osc.freq(440); //440Hz。ハ長調のラの音 osc.amp(0.5); //音量。0~1.0 delay(500); //最初はノイズが入ることがあるので、500ms遅らせる osc.play(); //音を鳴らす}
void draw() {}
3.サンプルプログラム2の説明
ライブラリのインポート
サンプルプログラム1と同様、Soundライブラリのインポート宣言をします。
import processing.sound.*;
変数の宣言
任意の音程の音を鳴らすためには、該当する周波数のsin波(正弦波)を作成します。これには、SinOscクラスの変数を宣言して使います。
SinOsc osc;
音の作成
new
を使って実際にSinOscクラスの実体(インスタンス)を作成します。その後、SinOscクラスが提供している freq()
という関数を使って周波数を設定します。ここでは周波数440Hz、ハ長調のラの音を作成します。同様に音量も amp()
で設定できます。
osc = new SinOsc(this);osc.freq(440);osc.amp(0.5);
演奏
音を鳴らすには、SinOscクラスが提供している play()
という関数を使います。 音は stop()
をするまで鳴り続けます。
osc.play();
サンプルプログラム2のダウンロード
4.応用問題
電子オルガンを作ってみましょう。