質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
openFrameworks

openFrameworksは、C++で記述されたライブラリ群です。既存のライブラリの設定なしで使用できるため「糊」のようなツールキットと呼ばれています。簡単なコードだけで様々なグラフィックスやインタラクションをデザインすることが可能です。

Q&A

解決済

1回答

1169閲覧

openframworksでofxFftがうまく使えません。

familystonejp

総合スコア3

openFrameworks

openFrameworksは、C++で記述されたライブラリ群です。既存のライブラリの設定なしで使用できるため「糊」のようなツールキットと呼ばれています。簡単なコードだけで様々なグラフィックスやインタラクションをデザインすることが可能です。

0グッド

0クリップ

投稿2020/07/15 10:33

openframworksでfftを使いたいです

openframworksでfftを使って音声に反応するプロジェクトを書きたいのですが、
音声に反応しません。

サウンドファイルを再生し、
ofxEasyFftを使用してその音声に反応させようとしてるのですが、
波形は表示されるのですが、
波形が動きません。

getBins()に格納されてないような感じがするのですが、
詳しい方教えていただけませんでしょうか。

openframworks of_v0.11.0_vs2017_release
openframworks of_v0.10.1_vs2017_release
windows10
Visual Studio 2019

発生している問題・エラーメッセージ

エラーは出ないのですが、 音に波形が反応しません。

該当のソースコード

openframworks

1void ofApp::setup(){ 2 3 ofSetFrameRate(60); 4 ofBackground(ofColor::black); 5 6 7 sound.load("loop3.wav"); 8 sound.play(); 9 10 fft.setup(pow(2.0, 12.0)); 11} 12 13//-------------------------------------------------------------- 14void ofApp::update(){ 15 fft.update(); 16 17} 18 19//-------------------------------------------------------------- 20void ofApp::draw() { 21 vector<float>& buffer = fft.getBins(); 22 23 float scale = -128; 24 int n = MIN(1024, buffer.size()); 25 ofPushMatrix(); 26 ofTranslate(0, ofGetHeight() / 2.0 + scale); 27 ofScale(1, scale); 28 ofNoFill(); 29 ofBeginShape(); 30 for (int i = 0; i < n; i++) { 31 ofVertex(i, buffer[i]); 32 } 33 ofEndShape(); 34 ofPopMatrix(); 35 36 37}

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

ofxFftでは入力デバイスがデフォルトでマイクになっていた気がします。
なので、そのままだとgetBinsはマイクから入力した音声データを取得してしまいます。

自分はmacなのでwindowsでの具体的なやり方は示せないのですが、ざっくり言うとofSoundPlayerで出力した音をgetBinsで受け取るには以下の2つをやる必要があります。

  • サウンドの出力先をスピーカーから仮想オーディオデバイスに変更(こちらはコードでなく環境設定とかで変える部分)
  • ofSoundStreamSettingsのInDeviceを仮想オーディオデバイスにする(コードで設定)

(ofxFftは、ofSoundStreamSettingsのInDeviceを見て入力デバイスを決めているので、ofSoundStreamSettingsの設定を変えてやる必要があります。)

参考までにofSoundStreamSettingsの設定を変える部分のコードです。

openframeworks

1 2 soundStream.printDeviceList(); 3 4 ofSoundStreamSettings settings; 5 // device[2] soundflower 2ch(soundflowerというのはmacで使える仮想オーディオデバイスのこと) 6 auto devices = soundStream.getDeviceList(); 7 settings.setInDevice(devices[2]); 8 settings.setInListener(this); 9 settings.sampleRate = 44100; 10 settings.numOutputChannels = 2; 11 settings.numInputChannels = 2; 12 settings.bufferSize = bufferSize; 13 soundStream.setup(settings);

ちなみに、ofxFftにこだわらないのであれば、ofSoundGetSpectrum()というAPIでもfft解析ができます(ofxFftと比べるとできることが多少限られます)。これであれば、SoundStreamSettingsの設定をいじらなくてもofSoundPlayerで出力した音をfft解析できます。

投稿2020/07/15 13:12

hytNInE

総合スコア133

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

familystonejp

2020/07/16 05:10

ありがとうございます! 本当助かります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問