ダイアログのスナップと連動2007年01月09日 21:25

ブログのネタが尽きて更新が滞っているのはご愛嬌。
今後は無理にネタを作らず不定期に更新していきます。

次バージョンでは、ダイアログのスナップと連動を実装します。
対象は [表示設定][オプション][表示範囲][レベルメーター] の四つのモードレスダイアログと、メインダイアログです。

スナップは、ダイアログを近づけていったら端にピタッとくっつく機能です。ただしくっつくといっても位置的に並ぶだけで、ツールバーのように埋め込まれるわけではありません。
連動は、メインダイアログを動かすと、それに合わせてメインダイアログにくっついているダイアログも同時に動かす機能です。
Winamp のような動作、といっても分かる人は限られるでしょうか。

またこれに伴い [表示設定][オプション][表示範囲][レベルメーター] の各ダイアログの位置と表示/非表示を次回起動時に復元するようにします。

この変更は、主に [表示範囲] ダイアログ(縦軸表示範囲設定)をもっと気軽に使えるようにすることを意図しています。
横軸と同じように縦軸の表示範囲もメインダイアログ上で変更できるようにすればスマートなのですが、ダイアログのデザインと実装は少し手間がかかるので、当面はこれでお茶を濁したいと思います。

ダイアログのスナップと連動の実装2007年01月09日 21:27

 http://cessna373.asablo.jp/blog/2007/01/09/1103214
ではダイアログのスナップと連動について書きましたが、その実装についての話題です。

以下のサイトに Winamp プラグインの具体的なプログラム例が載っており、スナップや連動も実装されています。
 http://www.codeproject.com/dialog/winampwnd.asp
ソースコードを解読するより自分で実装する方が楽だったこともあって結果的にはあまり参考にしなかったのですが、「これだけ頑張る必要があるのか」ということだけは認識させてもらいました。

上記のプログラム例では WM_LBUTTONDOWN や WM_MOUSEMOVE などのマウスメッセージをすべて追いかけて処理していますが、RH1FFT では WM_MOVE や WM_MOVING などのタイミングで処理しているのが最も異なる点でしょうか。
実際のスナップや連動の処理は本質的には同じ事を行っているのかもしれません。

ホワイトノイズの作成方法2007年01月20日 21:13

ホワイトノイズについては以下を参考にしてください。
 http://cessna373.asablo.jp/blog/2006/11/03/608969

一様乱数でもホワイトノイズになるようですが、RH1FFT では http://ja.wikipedia.org/wiki/%E3%83%9B%E3%83%AF%E3%82%A4%E3%83%88%E3%83%8E%E3%82%A4%E3%82%BA
にあるように正規乱数を使用しています。
(次バージョンで追加予定)

ただし、平均 0, 標準偏差 0.5 の正規乱数のうち、[-1, 1] の範囲内にあるもののみ採用しています。確率的には 5% 弱のものが捨てられることになり、その分厳密な正規分布とは異なります。
この辺りの処理を厳密に行おうとすると、不自然に 0 に偏ったデータになってしまうので、妥協しています。

ピンクノイズの作成方法2007年01月20日 21:15

ピンクノイズについては以下を参考にしてください。
 http://cessna373.asablo.jp/blog/2006/11/06/682682

もしかしたら直接生成する方法もあるのかもしれませんが、RH1FFT ではホワイトノイズに -3 dB/octave のフィルターを適用して作成しています。
(正確には 20*log10(1/√2) ≒ -3.0103 dB/octave)
ただし本当にすべての周波数帯にこれを適用してしまうと、低周波が大きくなりすぎるので、20Hz 以上の部分にのみ適用しています。
したがって、20Hz 未満はフラットな(ホワイトノイズと同じ)特性です。

ホワイトノイズ、ピンクノイズについては以下も参考にしてください。
 http://en.wikipedia.org/wiki/Colors_of_noise

ウィザードのアイデア2007年01月23日 22:53

使いやすさを目指して開発を行っているRH1FFTですが、
FFTそのものにあまり詳しくない人にも使っていただけるよう、
最低限の設定を対話式にできるようにウィザードを考えています。

実は以前も検討したのですが、整理している途中で挫折したので
今回はなんとか実装まで持っていけるように、できる範囲で
検討したいと思います。

通常FFTで音声を解析する場合、
1.サンプル音でレンジの調整
2.基準音によるキャリブレーション(私は使ったことがないが)
3.測定条件の設定(測定時間、FFTの周波数分解能、トリガー設定)
4.測定
5.データの保存
6.解析位置を時間グラフで指定
7.時間グラフ上でピークの周波数と振幅の記録

という流れになります。
とりあえずこれらをできるだけウィザードできるものを検討したいとおもいます