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
にも、ほんの少しだけ寄与していると思います。
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 を使うときは、これを選ぶといいのではないでしょうか。
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
東京大学 : 応用音響学
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/
もしかしたら有名かもしれません。フリーです。
検索すると日本語解説ページもあるようです。
Praat
http://www.fon.hum.uva.nl/praat/
24 bit PCM ― 2010年01月20日 05:07
現在 RH1FFT では、8/16 bit PCM, 32/64 bit Float 形式にしか対応していません。
ちょっと時代に乗り遅れていましたが、どうやら 24 bit PCM 形式が出回っている模様です。
ただ、それなりに柔軟に対応できるようには作っているのですが、24 bit PCM に対応するのはかなり大変な作業になります。
実際に要望が出るまでは保留しようと思うので、要望があればお知らせください。
ちょっと時代に乗り遅れていましたが、どうやら 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 はちょっと使い物になりませんでしたが、こちらはよさそうな感じです。
手元の環境ではちょっと音飛びがしますが、設定でなんとかなるかもしれません。
困っている方は、試してみる価値があるのではないでしょうか。
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 版
公式サイトからダウンロードしてください。
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 対応 (ループバックキャプチャー対応)
- 外部プログラムの並列 (バックグラウンド) 実行
いずれも、まだ何も目処はついていません。
長い目でみてやってください。
- ウィザード (録音ボリューム設定など)
- メタ情報ファイル
- マクロ、プラグイン
- 周波数別閾値オーバー警告 (マクロ実行)
- 複数プロセス同期 (縦軸/横軸設定)
- 自己相関関数リアルタイム表示
- ピーク周波数表示 --> 音階表示
- 録音データ加工でフィルター入力時に周波数グラフにカーソル表示
- 複数の録音データを比較して平均化、コヒーレンス計算して信頼性算出
- オクターブ解析、バンド別倍率
- 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
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 版で出せばよかったですね。
次バージョンからは、そうすることにします。
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 版で出せばよかったですね。
次バージョンからは、そうすることにします。
最近のコメント