サポートする 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 版で出せばよかったですね。
次バージョンからは、そうすることにします。

ソースコードの規模 (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

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

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

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

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

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 版

24 bit PCM2010年01月20日 05:07

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

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
にも、ほんの少しだけ寄与していると思います。

PC で出力中の音を録音する方法2009年12月05日 17:55

 http://cessna373.asablo.jp/blog/2006/02/21/262966
にある「公式マニュアルの FAQ に載っている方法」というのは、「録音コントロールで "WAVE 出力ミックス" を選択する」というものです。
これは標準的に使用できるものだと思っていたのですが、どうやらサウンドカード依存で、"WAVE 出力ミックス" を使えない環境もあるようです。

こういう場合は以下のような方法を使用しなければなりませんが、いずれも手軽さや汎用性の面で満足できるものではありません。
 - ヘッドフォン出力端子をマイク入力端子に接続する。
 - Virtual Audio Cable (http://software.muzychenko.net/eng/vac.html) のようなソフトウェアを使用する。

多分、サウンドデバイス用のフィルタードライバを作って、出力するデータを横取りすればいいのでしょうが、それはちょっときつそうですね。

次バージョン予告:ソノグラフのバッファサイズの自動調節2009年12月05日 17:52

ソノグラフのバッファサイズについて。
 http://cessna373.asablo.jp/blog/2006/01/27/228270
 http://cessna373.asablo.jp/blog/2006/01/27/228282

ソノグラフの最適なバッファサイズは、ウィンドウサイズや表示周波数範囲を変更すると変わります。
コンテキストメニュー [バッファサイズ調節] で、その時点での最適値に設定することができます。

次バージョンでは、さらにこれを自動的に実行する機能を追加します。
すなわち、ウィンドウサイズや表示周波数範囲を変更したときに、[バッファサイズ調節] と同様の処理が自動的に走るようになります。

自動調節を行うかどうかは、[オプション]-[ソノグラフ] で設定することができます。
自動調節が煩わしいときは、ここの [自動調節] オプションを Off にしてください。
(デフォルトでは On になっています)

次バージョン予告:メインダイアログ上で解析パラメータを変更2009年11月28日 19:03

次バージョンでは、メインダイアログ上で、[オプション]-[解析] ページなどにある設定を変更できるようにする予定です。
設定できる内容は、[オプション] ダイアログで設定できるものとまったく同じです。
[オプション] ダイアログへのショートカットのようなものと考えてください。

どの設定をできるようにするかの選択は、個人的に変更することが多そうなものをピックアップしてみました。
これらは今後変更される可能性があります。

将来的には、「どの設定をメインダイアログ上で行えるようにするか」を設定する機能も検討してみますが、今回はとりあえずこんなところでどうでしょうか。

次バージョン予告:FFT パラメータの設定方法の変更2009年11月28日 18:54

今までは、FFT のパラメータは「FFT ブロックサイズ」と「解析間隔」で指定するようになっていました。
 http://cessna373.asablo.jp/blog/2008/06/04/3562431

次バージョンでは、これを「FFT データ点数(ライン数)」と「オーバーラップ率」で指定するように変更する予定です。
これまでのパラメータとの関連は、以下のようになります。
 「FFT データ点数」を大きくする <--> 「FFT ブロックサイズ」を大きくする
 「オーバーラップ率」を大きくする <--> 「解析間隔」を小さくする

ただ問題は、内部パラメータは元のままということです。
すなわち、「FFT データ点数」と「オーバーラップ率」を内部で「FFT ブロックサイズ」と「解析間隔」に変換して、内部的にはそれらの値を使用しています。
「解析間隔」は、内部的に 1 以上 1000 以下の整数という制限があるので、有効な「オーバーラップ率」(実効オーバーラップ率) は、指定した値とは異なる場合があります。

問題もあるかもしれませんが、少しこれで様子を見てみようと思います。