openFrameworksでFFT

作ったものとかを整理するために、ブログはじめます。
でも更新頻度は低いよー

 

初回はopenFrameworksでVJやるときの基本、FFT。

とりあえずこんなデモ(グラフィックスイコライザ)です。

 

ソースはGitHubにあげてます。

https://github.com/tkt182/fftPowerSpectrum

 

ググればわかると思いますが、openFrameworksのフォーラムにあるソースを
少し変えただけです。

 

Audio input FFT example
http://forum.openframeworks.cc/t/audio-input-fft-example/186/0

 

FFT部分のソースは以下のものを使ってます。
http://groovit.disjunkt.com/analog/time-domain/fft.html

FFTの解説は他のサイトにお任せするとして(説明できるほど理解できてません。。)、
ここではofSoundStreamクラスを使った音声入力の仕組みの解説っていうかメモです。

 

 

■ofSoundStreamクラスの実体

 

ofSoundStreamクラスは、windowsの場合、RtAudioライブラリのラッパーになります。ofSoundStream.hの9 ~ 21行を参照。

 


#ifdef OF_SOUNDSTREAM_RTAUDIO
#include "ofRtAudioSoundStream.h"
#define OF_SOUND_STREAM_TYPE ofRtAudioSoundStream
#elif defined(OF_SOUNDSTREAM_PORTAUDIO)
#include "ofPASoundStream.h"
#define OF_SOUND_STREAM_TYPE ofPASoundStream
#elif defined(OF_SOUNDSTREAM_ANDROID)
#include "ofxAndroidSoundStream.h"
#define OF_SOUND_STREAM_TYPE ofxAndroidSoundStream
#elif defined(OF_SOUNDSTREAM_IOS)
#include "ofxiOSSoundStream.h"
#define OF_SOUND_STREAM_TYPE ofxiOSSoundStream
#endif

 

Windowsの場合、マクロでOF_SOUNDSTREAM_RTAUDIOが定義されるため(ofConstants.hの303行目を参照)、ofRtAudioSoundStream.hがインクルードされ、OF_SOUNDSTREAM_TYPEがofRtAudioSoundStreamになります。

 

 

■取得できるサンプリング値のフォーマット

 

デバイスの初期化を行うsetup関数は、内部でRtAudioのopenStream及びstartStream関数を
実行しています(ofRtAudioSoundStream.cppの131~138行目)。
このopenStream関数が結構大事で、3番目の引数にサンプリングデータのフォーマット、
6番目の引数に、音声入力が発生した際に実行されるコールバック関数のポインタを
指定する仕様になってます。

 

で、実際にsetup関数の中身を見てみると、
フォーマットはRTAUDIO_FLOAT32(ofRtAudioSoundStream.cppの132行目)、
コールバック関数はaudioIn(ofRtAudioSoundStream.cppの238行目)が指定されていることが分かります。

 

以下によると、RTAUDIO_FLOAT32は-1.0 ~ 1.0の値にストレッチされたデータとの事なので、
audioIn関数にて読み込んだサンプリング値は”上記の範囲内の値”ということになります。
http://www.music.mcgill.ca/~gary/rtaudio/RtAudio_8h.html#aafca92882d25915560018873221e44b8

 

windowsでofSoundStream周りの仕様が知りたいときは、
ofRtAudioSoundStream関連のソースを読めばいいということが分かったので、
とりあえずは大丈夫かなー

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>