LoginSignup
5
0

More than 5 years have passed since last update.

【openFrameworks】チャンネル1でマイク入力するときの注意点

Posted at

openFrameworksでのマイク入力でハマったことを、忘れないようにメモします。

マイク入力で詰まったこと

oFのexampleにあるaudioInputExampleを開いてビルド&ランしても、全く反応しません。無反応です…。

原因はsetup関数内の初期設定にあります。こちらのコードをご覧ください。

ofApp.h
settings.setInListener(this);
settings.sampleRate = 44100;
settings.numOutputChannels = 0;
settings.numInputChannels = 2;
settings.bufferSize = bufferSize;
soundStream.setup(settings);

settings.numInputChannels2になっています。一方で自分のPCで入力を確認すると、入力1になっていたんです。
(確認方法はmacの場合、Audio Midi設定を開くことです)
スクリーンショット_2019-04-24_17_35_29.png

`settings.numInputChannels=1'にすればできる…!!!

そう思って、コードを書き換えるものの、明らかに挙動が狂ってます…何かがおかしいのです…。
スクリーンショット_2019-04-24_17_42_11.png

原因は音声入力の処理だった!

原因はsettings.numInputChannels = 2に合わせた処理が原因でした。

ofApp.h

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なので、ここの処理を以下のように変更する必要があります。

ofApp.h

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++;
}

すると、処理が思ったような動きになってるはずです!
mg.gif

 最後に

PCによっては、マイク入力が初期から2になっており、サンプルのように動かせば問題ありません。

ただ私のように一部のPCは、マイク入力が1のまま固定され、入力2に変更できない可能性があります。

そういう場合は、上記のやり方をお試し頂ければ幸いです!

5
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0