OpenGLの修行という事で、一先ずOpenGLでFFTのデータを可視化するパッチを組んでみました。
パッチ
FFTデータをリストにして、jit.gl.luaのfft関数に可変長引数として与えています。
jit.gl.luaは可変長引数の長さが83を超えると、Maxが予期しない理由で終了するバグがあるようです。注意です。サンプル数の多いFFTデータ(例えば1024)をどうやってjit.gl.luaに渡すかを検討していきたいです。
※FFTampは、Maxオデッセイに書いてあったコードを使いました。
TestVisualizeFFT.lua
[js]
this.autowatch = 1
this.gc = 1
local gl = require("opengl")
local GL = gl
local _fft = {};
function fft(…)
_fft = {…}
end
function draw()
gl.ClearColor(0,0,0,1);
gl.Clear(GL.COLOR_BUFFER_BIT);
gl.Begin(GL.TRIANGLES)
–gl.Begin(GL.POLYGON)
–gl.Begin(GL.LINE_LOOP)
–gl.Begin(GL.TRIANGLE_STRIP)
for i = 1 , #_fft do
local a = _fft[i];
gl.Color(_fft[i],_fft[(i + 1)%#_fft + 1],_fft[(i+2)%#_fft + 1],_fft[i]);
gl.Vertex(a * math.cos(2 * math.pi * (i-1)/#_fft),a * math.sin(2 * math.pi * (i-1)/#_fft,0));
end
gl.End();
gl.Flush();
end
[/js]
参考図書
- 2061:Maxオデッセイ – FFTのシグナルデータをリストで取得する部分のプログラムを参考にしました。
- OpenGL SuperBible: Comprehensive Tutorial and Reference (4th Edition) – Kindleで読めるOpenGL2.1の本。とりあえず買ってみたので、今後勉強してみる予定。