openFrameworks 基本動作 音楽編

   

今月末のiPhoneの勉強会に備えて、昨年7月以来、久々にopenFrameworksをやろうと本を引っぱり出してきました。
第二回目です。

Beyond Interaction ―メディアアートのためのopenFrameworksプログラミング入門



波形を生成する


ここでは本の例題にそって、気づいたことを記載していきます。

P151から出てくる最初の例「音響合成」で出てくるコードの中で新しく関数が出てきます。

audioRequest()
ofSoundStreamSetup()



audioRequest()

まず、audioRequested()は、draw() やupdate()などと同じさまざまなイベント実行関数が含まれているクラスを”ofSimpleApp”に属しています。
設定したチャンネル数で、指定したサイズの波形をサウンドとして出力するための機能です。

ofSoundStreamSetup()

サウンド出力の設定を行います。
出力のチャンネル数、入力のチャンネル数、ofSimpleAppへのポインタを指定します。

チャンネルはよくわからないが、ステレオが2ch。
ヤマハの電化製品で5.1chなどある。音が2つの方向から聞こえるのが2chだと思います。

まずは、ofSetColor()で色を設定するように、ofSoundStreameSetup()でサウンドを設定します。

具体的なaudioRequest()の中身

void testApp::audioRequested(float* output,int bufferSize , int nChannels){
	
	float sample;
	float phaseDiff;
	
       //サンプリング辺りの位相の変化数を計算
	phaseDiff = TWO_PI * frequency/sampleRate;
	
  //バファサイズ分の波形を作成する
	for (int i =0; i < bufferSize; i++) {
		
    // 位相を更新
		phase += phaseDiff;
		
     //位相がTWO_PIを超えるまで
		while (phase > TWO_PI) {
			
			phase -= TWO_PI;
		}
		
    //SIN波を形成
		sample = sin(phase);
		
		output[i * nChannels] = sample * pan * amp;
		output[i * nChannels + 1] = sample * pan * amp;
	}
	


TWO_PI

TWO_PIは6.28318530717958647693の値をもつ数学的な定数である。直径における円の円周率である。三角関数sin() とcos()と組み合わせると便利である。とProcessingのサイトに載ってました。円周率の2倍っぽいです。

サンプリング
音の波形を一定の時間で区切り、その区切った時間ごとに、波形の一を計算し数値の集合に変換します。
サンプリングを一秒間に何回行うかの単位を、サンプリング周波と言います。

今回の例では、サンプリング周波(sampleRate)で44100と指定されています。

定位 音の距離?

位相 時間みたいです?

周波数 一秒間に何回周期(一周期は波一回)があるか。周波数が高いと、音が高くなる。


バッファとは一時記録の領域です、バッファサイズはそのサイズ。終わると自動的に消去される。


音声を入力する


先ほどは、新しく音声を出力していましたが、今度は既にある音を波形に変換します。



float * left = new float[256];
float * right = new float[256];

ofSoundStreamSetup(0 , 2 , this , 44100 , bufferSize , 4);


void testApp::audioReceived(float* input , int bufferSize , int nChannels){
	
	for (int i = 0; i<bufferSize; i++) {
		
		left&#91;i&#93; = input&#91;i*2&#93;;
		right&#91;i&#93; = input&#91;i*2+1&#93;;
		
	}
	
	
	
	
}

&#91;/cpp&#93;


audioReceived()は音が発生したときに呼び出される関数です。
これで配列の中に、信号の配列、バッファサイズ、チャンネル数を格納します。



<h4 id="page">ファイルを呼び込んで音楽を再生する</h4>

ofSoundPlayerクラスを利用する。
まずはインスタンスを作り、その後に色々はメソッドを使い音楽をコントロールします。

.hファイル

ofSoundPlayer mySound;    // インスタンス(mySound)を作成


.cpp ファイル

void  testApp :: setup(){

   mySound.loadSound(" 再生する音楽ファイル名");
   mySound.setLoop(true);
  mySound.play();

}


float * ofSoundGetSpectrum(int nBands);
再生中の音のボリュームを取得


Related Posts Plugin for WordPress, Blogger...