SyntaxHighlighter

2011-08-29

KinectでFFT

注)β時代のSDKを使っていた頃の記事です。最新版では動かないと思います。。。

KinectのマイクロフォンからのデータをFFTできたら面白いかなあと思った続き。

いろいろあって、すごく時間が空いてしまったような気がするけど、とりあえず、kinectのマイクロフォンのデータを取得する関数からの出力を使って、FFTができるようになった。

いろいろ変なところもあろうが、該当部分のソースを晒してみることにした。

  • FFTの本体
const int fftLength = 1024;
byte[] rawData;
const int rawDataLength = 1024 * 2;
AForge.Math.Complex[] fftBuf;

public void doFFT(Stream audioStream)
{
  int recordLength = rawDataLength;
  while (recordLength > 0)
  {
    int count = audioStream.Read(rawData, 0, recordLength);
    recordLength -= count;
  }
  for (int i = 0; i < fftLength; i++)
  {
    fftBuf[i].Re = (rawData[2 * i + 1] << 8 | rawData[2 * i]);
    fftBuf[i].Im = 0;
  }
  AForge.Math.FourierTransform.FFT(fftBuf, AForge.Math.FourierTransform.Direction.Forward);
}
  • 使う側
using (var source = new KinectAudioSource())
 {
   source.SystemMode = SystemMode.OptibeamArrayOnly;
   using (var audioStream = source.Start())
   {
     while (true)
     {
       doFFT(audioStream);
     }
   }
}

ぶっちゃけ、これだけ。あとは枝葉末節(AForgeライブラリに関しては、以前の記事を参照のこと)。


スピードは、FFTの処理自体は付いてきてくれているはずだけど。。。この後、前回記事のように、FFTの結果をスペクトルっぽく表示しているのだけど、ちょっと遅れているように感じる。。。どこか悪いのだろうか??
あと、関数から取得できるデータって、1入力だけなのかしら。マイク4つあるはずだから、4入力取得できる方法があるのかしら(しっかりマニュアル読んでないだけだけど)。


しかし、慣れてないせいもあって、C#、というよりWindowsで図とか表示するの難しいなあ。KinectやらFFTで悩んでいる時間より、画面に図形とかを表示する方法が分からなくて悩んでいる時間のほうが長いや。。。


3 件のコメント:

  1. こんにちは。
    kinectのマイクでFFTをしようと思っており、
    こちらのブログを参考にさせていただきました。
    しかし、
    KinectとAForgeの使い方にまだ慣れておらず、
    動かすことができませんでした。
    全体のソースコードを載せていただくことはできないでしょうか?
    お返事お待ちしております。

    返信削除
    返信
    1. studentAさん>
      この内容はKinectSDKβの頃に書いたものですので、おそらく最新版のSDKでは動かないと思います。
      最近のSDKは触れていないので、アップデートできていません。
      Audioの使い方自体は最新SDKに付属している、サンプルを参照にされたほうが良いです。

      削除
    2. そうでしたか。
      AudioのサンプルとAForgeを組み合わせてみようと思います。
      ffuyyoさんどうもありがとうございました!

      削除

Related Posts Plugin for WordPress, Blogger...