VC++ /arch コンパイラオプション (SSE2 の使用)2010年01月09日 02:50

プログラマ向けです。

VC++ には /arch コンパイラオプションがあります。
 http://msdn.microsoft.com/ja-jp/library/7t5yh4fd(VS.80).aspx

これは、SSE/SSE2 を使用するかどうかを指定するものです。
SSE/SSE2 を使用するように指定した場合、SSE/SSE2 が使えない CPU では動作しなくなります。
デフォルトでは off になっており、RH1FFT (x86) でも基本的に指定していません。

このオプションを on にしても、自動で SIMD 計算してくれるようになるわけではないと思います(調べたわけではありませんが)。
ただ、FFT 計算部分で SSE2 を on にしてみたところ、かなり速くなることが分かりました(~二倍くらい?)。
そこで、FFT 計算部分のみ、SSE2 が使用できる環境では /arch:SSE2 でコンパイルしたコードを呼び出すようにしました。

SSE2 が使用できるかどうかは、CPUID 命令で取得できます。そのあたりは "SSE2" "CPUID" などで調べてみてください。
 http://ja.wikipedia.org/wiki/Streaming_SIMD_Extensions
によると、SSE2 は Pentium 4 で導入されたようです。
 http://ja.wikipedia.org/wiki/Pentium_4
を見ると、時期的には 2000 年以降に購入した PC では、ほぼ確実に使用できるということですね。

ところでこの /arch オプションは、x64 ビルドでは使用できません。
x64 環境では必ず SSE2 が使用できるので、off にする必要がないためです。
32 bit が 64 bit になったところで実行速度が速くなるわけではないのですが、こういう恩恵はありそうです。

ちなみに SSE2 の使用は、次バージョンのソノグラフ描画の高速化
 http://cessna373.asablo.jp/blog/2009/11/08/4684069
にも、ほんの少しだけ寄与していると思います。

FFT ライブラリ2010年01月09日 02:52

FFT ライブラリとして有名なのは FFTW だと思います。
 http://www.fftw.org/

これが使えれば SSE2 の使用
 http://cessna373.asablo.jp/blog/2010/01/09/4803642
とか、その辺何も考えなくてもいいのですが、残念ながら GPL です。

オープンソース(あるいは個人利用)プログラムで FFT を使うときは、これを選ぶといいのではないでしょうか。

信号処理、音声解析の資料2010年01月09日 02:54

たまたま見つけた雑多なものを紹介します。

東京大学 : 応用音響学
http://ocw.u-tokyo.ac.jp/wp-content/uploads/lecture-notes/Engin_01/

京都大学 : ディジタル信号処理
http://vision.kuee.kyoto-u.ac.jp/lecture/dsp/

奈良先端科学技術大学院大学 : 計測情報処理
http://www.soi.wide.ad.jp/class/98010/slides/

関西学院大学 : シグナルプロセシング
http://ist.ksc.kwansei.ac.jp/~kawabata/lectures.d/signal/

情報通信の基礎理論
http://www.yobology.info/text/index.htm

ディジタル信号処理
http://ufcpp.net/study/dsp/index.html

SpeechLinks
http://www.speech.cs.cmu.edu/comp.speech/SpeechLinks.html

その他
http://note.sonots.com/SciSoftware.html
http://shower.human.waseda.ac.jp/~m-kouki/pukiwiki_public/index.php

音声解析ソフトウェア2010年01月09日 02:59

使っていないので使い勝手などは分かりませんが。
もしかしたら有名かもしれません。フリーです。
検索すると日本語解説ページもあるようです。

Praat
 http://www.fon.hum.uva.nl/praat/

24 bit PCM2010年01月20日 05:07

現在 RH1FFT では、8/16 bit PCM, 32/64 bit Float 形式にしか対応していません。
ちょっと時代に乗り遅れていましたが、どうやら 24 bit PCM 形式が出回っている模様です。
ただ、それなりに柔軟に対応できるようには作っているのですが、24 bit PCM に対応するのはかなり大変な作業になります。
実際に要望が出るまでは保留しようと思うので、要望があればお知らせください。

Windows XP でループバック録音を可能にするソフト2010年01月20日 05:09

ループバック録音というのは、PC で出力中の音を録音することです。
 http://cessna373.asablo.jp/blog/2009/12/09/4747684
こんなページもあって、やはり困っている人は多いようです。
 http://www.atamanikita.com/stereo-mix/

これをソフトウェア的に解決するものとして、以前 Virtual Audio Cable というものを紹介しましたが、他にも以下のようなソフトがありました。
 TiVSound
 http://homepage2.nifty.com/t_ishii/vs/index.html
Virtual Audio Cable はちょっと使い物になりませんでしたが、こちらはよさそうな感じです。
手元の環境ではちょっと音飛びがしますが、設定でなんとかなるかもしれません。
困っている方は、試してみる価値があるのではないでしょうか。

RH1FFT V3.00 リリース2010年01月25日 00:17

RH1FFT V3.00 を公開しました。
公式サイトからダウンロードしてください。
 http://www.asahi-net.or.jp/~es3t-kbt/fft/

主な変更点は以下のとおりです。
 - 解析パラメータを「FFT データ点数」「オーバーラップ率」に変更
 - UI の改善
  - メインダイアログで解析パラメータを設定
  - マウスホイールで表示範囲を変更
  - マウスドラッグでソノグラフの色を変更
 - ソノグラフ描画の高速化
 - Windows Vista/7 での問題の修正
 - マルチモニターでの問題の修正
 - 64 bit 版

RH1FFT V3.10 予告2010年01月25日 00:20

以前からの残項目は、以下のような感じです。
 - ウィザード (録音ボリューム設定など)
 - メタ情報ファイル
 - マクロ、プラグイン
 - 周波数別閾値オーバー警告 (マクロ実行)
 - 複数プロセス同期 (縦軸/横軸設定)
 - 自己相関関数リアルタイム表示
 - ピーク周波数表示 --> 音階表示
 - 録音データ加工でフィルター入力時に周波数グラフにカーソル表示
 - 複数の録音データを比較して平均化、コヒーレンス計算して信頼性算出
 - オクターブ解析、バンド別倍率
 - Wavelet 変換
 - 周波数別歪み表示 (with 相関関数による位置あわせ)
 - 再生と録音を同時に行ってひずみや遅れを計測

他にも以下について検討中です。
 - 24 bit PCM (WAVEFORMATEXTENSIBLE) 対応
 - ソノグラフ 3D 化 (ウォーターフォールグラフ)
 - フォルマント表示 (ケプストラム/LPC解析)
 - WASAPI 対応 (ループバックキャプチャー対応)
 - 外部プログラムの並列 (バックグラウンド) 実行

いずれも、まだ何も目処はついていません。
長い目でみてやってください。

ソースコードの規模 (V3.00)2010年01月25日 00:23

V3.00 のソースコードの規模を調べました。
 V3.00 : ファイル数 369, ステップ数 68,253

今回はこれまでより大きく増えましたが、まあ間も空いてますからね。

ここらで自己満足の意味も込めて、歴代の記録を載せておきます。
 V2.40 : ファイル数 319, ステップ数 60,494
 V2.30 : ファイル数 284, ステップ数 57,288
 V2.21 : ファイル数 275, ステップ数 53,747
 V2.20 : ファイル数 273, ステップ数 53,043
 V2.10 : ファイル数 271, ステップ数 51,673
 V2.00 : ファイル数 264, ステップ数 50,408
 V1.31 : ファイル数 244, ステップ数 45,234
 V1.30 : ファイル数 218, ステップ数 41,838
 V1.21 : ファイル数 197, ステップ数 37,505
 V1.20 : ファイル数 195, ステップ数 37,007
 V1.10 : ファイル数 178, ステップ数 34,014
 V1.00 : ファイル数 172, ステップ数 31,697

サポートする Windows バージョン2010年01月25日 00:24

現在の RH1FFT では Windows 98/Me は正式サポート対象外となっていますが、
 http://cessna373.asablo.jp/blog/2009/11/01/4668284
では、今後も一応 98/Me を視野に入れると書きました。

しかしリリースしてから気づいたのですが、RH1FFT V3.00 は 98/Me では動作しません。
上記のようなエラーが表示されて、起動すらしません。

どうやら Visual Studio 2008 でビルドしたものは、98/Me では動作しないようです。
 http://msdn.microsoft.com/ja-jp/library/bb531344.aspx
今さら Visual Studio 2005 に戻すのはつらいので、今後要望が出ない限り、98/Me は完全に対象外とさせていただきます。

こんなことなら x86 も Unicode 版で出せばよかったですね。
次バージョンからは、そうすることにします。