【openFrameworks】チャンネル1でマイク入力するときの注意点
openFrameworksでのマイク入力でハマったことを、忘れないようにメモします。
マイク入力で詰まったこと
oFのexampleにあるaudioInputExample
を開いてビルド&ランしても、全く反応しません。無反応です…。
原因はsetup関数内の初期設定にあります。こちらのコードをご覧ください。
settings.setInListener(this);
settings.sampleRate = 44100;
settings.numOutputChannels = 0;
settings.numInputChannels = 2;
settings.bufferSize = bufferSize;
soundStream.setup(settings);
settings.numInputChannels
が2
になっています。一方で自分のPCで入力を確認すると、入力1
になっていたんです。
(確認方法はmacの場合、Audio Midi設定を開くことです)
`settings.numInputChannels=1'にすればできる…!!!
そう思って、コードを書き換えるものの、明らかに挙動が狂ってます…何かがおかしいのです…。
原因は音声入力の処理だった!
原因はsettings.numInputChannels = 2
に合わせた処理が原因でした。
void ofApp::audioIn(ofSoundBuffer & input){
float curVol = 0.0;
int numCounted = 0;
for (size_t i = 0; i < input.getNumFrames(); i++){
left[i] = input[i*2]*0.5;
right[i] = input[i*2+1]*0.5;
curVol += left[i] * left[i];
curVol += right[i] * right[i];
numCounted+=2;
}
curVol /= (float)numCounted;
curVol = sqrt( curVol );
smoothedVol *= 0.93;
smoothedVol += 0.07 * curVol;
bufferCounter++;
}
ここでのleft, rightの配列は入力チャンネルが2つだからこそ、実装できる処理になります。今回は入力1なので、ここの処理を以下のように変更する必要があります。
void ofApp::audioIn(ofSoundBuffer & input){
float curVol = 0.0;
int numCounted = 0;
for (size_t i = 0; i < input.getNumFrames(); i++){
/////////
//変更箇所
/////////
left[i] = input[i]*0.5;
curVol += left[i] * left[i];
numCounted++;
//////
}
curVol /= (float)numCounted;
curVol = sqrt( curVol );
smoothedVol *= 0.93;
smoothedVol += 0.07 * curVol;
bufferCounter++;
}
最後に
PCによっては、マイク入力が初期から2
になっており、サンプルのように動かせば問題ありません。
ただ私のように一部のPCは、マイク入力が1
のまま固定され、入力2に変更できない可能性があります。
そういう場合は、上記のやり方をお試し頂ければ幸いです!
Author And Source
この問題について(【openFrameworks】チャンネル1でマイク入力するときの注意点), 我々は、より多くの情報をここで見つけました https://qiita.com/guru_taka/items/a57eafaa8eda751c1765著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .