高速リアルタイム スペクトラムアナライザー WaveSpectra for Windows95/98/NT4 --------------------------------------------------------------------------- 【はじめに】 この WaveSpectra は、サウンドカードや、Waveファイルを入力とする音声信号を FFT(高速フーリエ変換)して、リアルタイムにその周波数成分(スペクトラム)を 表示するツールです。 できるだけ高速に動くように作りましたので、CPUやディスプレイカードの性能、 および表示サイズにもよりますが、最近の標準以上の機械では毎秒数十フレーム の表示更新速度が得られ、充分パソコンをスペアナとして使用することが できます。 (例1) 50フレーム/秒 4096点 FFT、画面サイズ:起動直後のデフォルトサイズ AMD K6-200MHz, RIVA TNT 65k色 (例2) 27フレーム/秒 4096点 FFT、画面サイズ:起動直後のデフォルトサイズ Note: MMX Pentium 133MHz, Chips&Tech 65554 256色 ※ 20フレーム/秒 程度以上の速度が得られれば、ほぼ入力の変化に リアルタイムに追従して見えます。 ※ 最近の高速マシンをお持ちの方は、もっと高速表示できます! ※ DirectDraw 必須。 ※ 24bit,32bit Waveフォーマット対応。 測定機能としては、ピークホールド波形、平均波形、リードアウト、 オーバーレイ(ロード、セーブ付き)、THD(+N)、S/N、RMS などがあり、 Spectrum 3D表示や、Waveリサジュー表示もできます。 (表示画面は、任意のタイミングでクリップボードへコピーできます) さらに、Waveファイル再生時には、位置指定トラックバーのツマミの動きに追従した 分析/波形表示機能や、任意の正確な位置での分析機能もあります。 (サウンドデバイスが無い場合や未対応フォーマットのWaveファイルでも、 任意位置分析機能は使用可能) また、サウンドデバイスから入力する時には、同時にファイルへ録音しながら動作 させることが出来ます。 様々な測定機能もありますが、とりあえずは あまり難しいことを考えずに Waveファイル演奏用のプレーヤーや、録音機として使ってみて下さい。 音楽のスペクトルの変化を見ているだけでもなかなか楽しいものです。 ※ 前バージョンからの変更点は、最後尾の履歴をご覧ください。 --------------------------------------------------------------------------- <<< 注意 >>> 以前のバージョンをお使いの方で、今回のバージョンを 同一ディレクトリに 重ね書きされるかたは、トラブルを避けるために、出来るだけ これまでの WS.INI を削除 してから起動して下さい。(そのままで使えない訳ではないのですが…) ~~~~~~~~~~~~~ また、大変多機能になっておりますので、便利に使っていただくために、 この説明書に一通り目を通して頂くようお願い致します。 【インストール】 適当なディレクトリに WS.EXE を入れるだけです。 そして、起動するためのショートカット等、適当に作っておけばそれで終わりです。 また、使用中も WINDOWS\SYSTEM ディレクトリや、レジストリにも一切書き込み しない、行儀の良い?ソフトです(^^) ただし、ウィンドウ位置や表示条件その他を保存して、次の起動時に 再現するための WS.INI ファイルを、起動した WS.EXE と同じディレクトリに 作ります。 (終了時に自動的に作ります。 最初は無くてもかまいません) ※ この程度のユーティリティにレジストリを汚されるのを作者は好まない(^^;)ので 推奨はされていませんが?、INI ファイルを使っています。 (あまりいないでしょうが、マルチユーザー環境の方、ごめんなさい… ま、複数個、別々にディレクトリを作って入れて下さい) 【アンインストール】 ディレクトリごと WS.EXE と WS.INI を消去するだけで終わりです。 --------------------------------------------------------------------------- 【使用方法】 ◎Waveファイルの演奏 Wave ファイルを入力とする時は、「Waveファイルを開く」ボタンを押し、 ファイルを読み込んだあと、「プレイ」ボタンを押すだけです。 ※ エクスプローラー等からファイルをドラッグ&ドロップしても開くことが 出来ます。 「ストップ」ボタン、「ポーズ」ボタンは特に説明はいらないでしょう。 ※ ポーズ中に Wave/Spectrum の各表示ウィンドウへマウスカーソルを移動 することによって、リードアウト(値の読み出し)が出来ます。 (詳細は後述の【リードアウト】の項参照) ◎早送り/巻戻し トラックバーの左右の部分をクリックしたり、ノブをドラッグすることで 任意の位置へ「早送り/巻戻し」することが出来ます。 (V1.10 から) ※ Waveファイル演奏の場合のみ、ポーズ中には、トラックバーの位置変更 に対して、Wave/Spectrum表示 も追従するようなりました。 さらに、サンプル数や経過時間で正確に任意の位置を指定する機能も 追加されています。 (詳細は後述の【分析位置 精細指定機能】の項参照) (V1.11 から) ※ Waveファイルの長さが短くて、上の 分析位置 精細指定機能 を使おうにも プレイ&ポーズのボタン動作では間に合わない場合のために、シフトキーを 押しながらプレイボタンを押すことで、最初からポーズ状態でスタート できるようになりました。 ◎サウンドデバイスからの入力/録音 「サウンドデバイスからの入力/録音」ボタンを押すと、サウンドデバイスの入力を 直接入力信号として使用できます。 また、後述の「設定」によって、ファイルへの同時書込みをする設定にすると、 ファイルへ同時録音してWaveファイルを作成することが出来ます。 ◎Lch/Rch切替え 「Lch/Rch切替え」ボタンで、ステレオ信号の場合の表示するチャンネルを 切替えることができます。(上がっていれば Lch、押込まれていれば Rch) ◎測定モード 「測定モード」ボタンで、測定モードになります。 (詳細は後述の【測定モード】の項参照) ◎設定 「設定」ボタンで、各種設定を変更することができます。 (詳細は後述の【設定】の項参照) ◎終了は、特に専用ボタンは無いので、左上のシステムメニューボタンか 右上の "閉じる"ボタン{X}で終了して下さい。 ※キーボードの場合は Alt+F4 です。 --------------------------------------------------------------------------- 【キーボードによる操作】 ◎各ボタンはキーボードでも操作できます。 [メインウィンドウ] Ctrl+O(オー) : Waveファイルを開く Ctrl+P : プレイ (Waveファイル再生のポーズ中は、 位置指定ウィンドウを開く) Ctrl+S or ESC : ストップ Ctrl+R : サウンドデバイスからの入力/録音 Ctrl+U : ポーズ Ctrl+L : Lch/Rch切替え Ctrl+M : 測定モード On/Off Ctrl+T : 設定 Ctrl+C : 押された時点の表示画面をクリップボードへコピー ※ V1.20 から追加 コピーの範囲は【設定】[その他] の項参照 スペース : Waveファイルがロードされている時は、 交互に、プレイ <--> ポーズと同じ。 Waveファイルがロードされていない時は、 交互に、サウンドデバイスからの入力/録音 <--> ポーズ と同じ。 ※ V1.10 からは、従来の ストップ との切替えから ポーズ との切替えに変わりました。 Alt+F4 : 終了 [位置指定ウィンドウ] Home : 先頭へ PageUp : 左方向位置移動(左矢印ボタンと同じ) PageDown : 右方向位置移動(右矢印ボタンと同じ) End : 末尾へ --------------------------------------------------------------------------- (V1.20 から) 【24bit,32bit Waveフォーマットについて】 対応フォーマットは、次の3種類です。 1. 24bit int (3byte/sample) 2. 32bit int (4byte/sample) 3. 32bit normalized float (絶対値 1.0以下) (4byte/sample) (3. は 再生のみ対応。 またこの時、メインウィンドウ上の Wave: 表示部の bit数の前に、 'F' の文字が付き、"F32bit" と表示されます) また、これまでとの互換性および見易さのために、内部では全て 整数部16bit(-32768〜32767)、小数部8bit(又は16bit)の浮動小数点値に 変換してから処理しています。 よって、波形のリードアウト等では小数部が追加されます。 ※ なお、サンプリング周波数は 24bit以下のものも含め、 200kHz まで対応しています。 録音時は、設定用リストボックス中に設定された周波数のみ選択可能ですが、 再生時は、任意の周波数に対応しています。 (サウンドデバイスが対応していない周波数の場合でも、通常の再生は できませんが、分析位置 精細指定機能 を用いて分析する事ができます) --------------------------------------------------------------------------- 【設定】 ◎最も右側の「設定」ボタンを押すとダイアログボックスが開き、表示やFFT その他の設定を変更することができます。 ※ V1.10 から、以前の [表示] タブページが [Wave] と [Spectrum] に分割 されました。 ※ V1.20 から、 [入力/録音] タブが [再生/録音]タブに変更されました。 ※ V1.20 から、 [その他] タブが追加されました。 [Wave] === 表示タイプ === ●通常 通常の波形表示です。 (V1.10 から) ●リサジュー (X-Y) Stereo Lch / Rch での、リサジュー(X-Y)表示です。 録音時の位相チェック、マイクアレンジチェックなどに有用です。 Lch が Y軸、Rch が X軸 に設定されています。 なお、この時の表示ウィンドウは常に正方形になります。 ◇ベジェ曲線で描く チェックをすると、リサジュー波形をベジェ曲線で描きます。 通常、直線で繋いでいるのが、少し滑らかに繋がるようになる 場合もあります。 (僅かですが遅くなります) ◇中央 チェックすると、常にウィンドウ中央に表示されます。 === 縦軸(Amplitude) === ・倍率: Wave波形の振幅データの表示倍率を設定します。 x1 の時、最大振幅までのデータを全て表示します。 === 横軸(Time) === ・倍率: Wave波形の時間軸の表示倍率を設定します。 x1 の時、FFT されているデータ長分を全て表示します。 === 高速表示 === 多少画面がちらついても高速表示したいときチェックします。 次項の DirectDraw を併用すると、ちらつかないようにする ことも出来ます。 === DirectDraw === DirectDraw が使用可能で、かつ、"高速表示" をチェック した場合に選択できるようになり、チェックして有効にすると DirectDraw を使用します。 DirectDraw を使うといっても垂直帰線期間チェックをするだけ ですが、垂直帰線期間を待って一気に画面書込みをするようになる ため、ちらつきが無くなるはずですが、表示サイズが大きい場合や 遅いCPUの場合には、帰線期間中に書ききれずに、ちらつきが残って しまう場合も有りますし、それまで待つようになるため、かえって 遅くなってしまうこともありますので、その場合は 一番高速になる 組合わせを探してみて下さい。(後述【その他】の項、参照) また、ドライバによってはソフトウェアエミュレーションの場合も あるようで、その場合は効果がありません。 [Spectrum] === 表示タイプ === ●通常 通常のSpectrum表示です。 (V1.10 から) ◇ピークのみ描く チェックすると、Spectrumのピークのみを繋いで波形を表示 します。 グラフの表示密度が高くて画面の1ドットに実際には複数のデータ が対応している場合(Log表示の周波数の高周波の部分など)には、 グラフが重ならなくなるので、見易くなります。 (表示も僅かですが速くなります) ※ ただし、表示データ数が少なくなるので、グラフの繋がりが 荒くなり、本来とは少し違う表示となる部分が出てきます。 (V1.10 から) ●3D表示 Spectrumを3種類の方向で複数個 3D表示します。 ◇方向 (/,|,\) 3D表示のグラフの伸びていく方向を、右上、上、左上、から 指定します。 ◇傾き 隣り合う各々のグラフの水平方向のずれを、ドット単位で指定 します。 大きな値にするほど角度が大きくなります。 ※ 一番上でグラフの端がコーナーを通過するように描かれるため、 傾きを大きくするほど、1つのグラフの横方向の長さは 短くなっていきます。 (ただし、表示ウィンドウのサイズの半分以下にはならない ようにしてありますので、それ以上の傾きになる場合は、 上コーナーを通過しなくなります) ◇ライン数 縦方向に何本グラフを描くかを指定します。 ※ ただし、実際のグラフ描画間隔を等間隔(整数)にする必要から、 表示ウィンドウサイズによっては指定した ライン数 にならない こともあります。 実際のライン数は、3D表示の左上に "31L" などと表示されます。 また、同時に、そのライン数がどれだけの時間分に相当するか、 の秒間も表示されます。 ※ 描画方法の制限によって、ウィンドウサイズを変更した場合 には、それまでのグラフが一旦全てクリアされますので 注意して下さい。 (停止中も同じです) 注1: 3D表示では、見易くするために、通常モードでの "ピークのみ描く" のチェックに有無にかかわらず、チェックした時と同じ方法でのみ グラフが描かれます。 また、"高速表示" がチェックされていても、常にそうでない通常の 方法でのみ描かれるので、条件にもよりますが、ウィンドウを最大化 などで大きくした場合には、描画が大変遅くなることがあります。 注2: 3D表示中は、測定モードには移行できません。 === 縦軸(Amplitude) === ◇リニア: Spectrum波形の振幅データをそのまま表示したいときに 選択します。 ・倍率: Spectrum波形の振幅データの表示倍率を設定します。 ◇dB: Spectrum波形の振幅データを dB 表示したいとき選択します。 ・レンジ: dB 表示レンジを選択します。 (40 〜 160dB) ※ V1.20 から ・シフト: 表示波形をシフトアップする値を選択します。 (Auto, 6 〜 18dB, Norm.) ※原理的に 最大振幅のサイン波のスペクトル値は、 最大直流の -6dB となること、さらにFFT時に窓関数を かけることで、さらに少ない値になるため、その分 シフトアップして表示できるようにしてあります。 ※Auto モード どの窓関数を用いても自動的に最大振幅のサイン波の 値が0dBになるように補正されます。 通常は Auto にしておけばよいでしょう。 (V1.10 から) ※常に最大値を0dBに固定する、Normalizeモード を追加しました。 インパルス応答測定時など、相対値のみを 分かりやすく表示したい時などに便利です。 === 横軸(Time) === ◇リニア: Spectrum波形の周波数軸をそのまま表示したいときに 選択します。 ・倍率: Spectrum波形の周波数軸の表示倍率を設定します。 x1 の時、全ての周波数成分が表示されます。 倍率を上げると、周波数の低い部分のみが拡大表示 されていきます。 ◇Log: Spectrum波形の周波数軸を対数表示したいとき 選択します。 === 高速表示 === 多少画面がちらついても高速表示したいときチェックします。 DirectDraw が使える時は併用すると、ちらつかないように することも出来ます。 === DirectDraw === DirectDraw が使用可能で、かつ、"高速表示" をチェック した場合に選択できるようになり、チェックして有効にすると DirectDraw を使用します。 ※ === Wave === の同項、参照のこと。 ※ 以上、全ての表示設定機能は計算/表示中でもリアルタイムに変更できます。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [FFT] === サンプルデータ数 === FFT のデータ長です。 (2048 〜 65536) ※ V1.20 から 当然多い方が周波数分解能は上がりますが、計算時間は 多くかかります。 逆にデータ長が短い場合は、周波数分解能は落ちますが、 音楽などのスペクトルの時間変化を細かく観察できることに なります。(データ長が長いと細かい変化を見ることはできません) ※ 最少周波数分解能は、サンプリング周波数÷サンプルデータ数 です。 (例)44100samples/sec 4096点FFT の場合、10.77Hz ※ サンプルデータ数は、計算/表示中は変更できません。 停止中のみ変更できます。 === 窓関数 === FFT のための窓関数を選択します。 ※窓関数 (Window Function) 本来は信号が周期的で連続しているものとする FFT において、 一部分を切り出すことによる誤差を減らすための前処理として、 波形データに掛け合わせる関数です。 (詳しくは関連の専門書をご覧ください) 音楽波形の観察など通常は、近接したスペクトルの表示と分離特性の バランスが比較的良い「ハニング」窓でよいでしょう。 後述、THD 測定などでは、少し離れたスペクトルの分離特性の良い 「ブラックマン」や「ブラックマン-ハリス」窓がよいでしょう。 ※ V1.20 から、「ブラックマン-ハリス」窓 を追加しました。 ※ 窓関数は計算/表示中でもリアルタイムに変更できます。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ (V1.20 から) [再生/録音] ※ V1.20 から、旧 [入力/録音] タブより変更されました。 === 再生 === ●デバイス 再生に使用するデバイスを選択します。 ※ Wave Mapper を選択すると、Windowsで設定されているデバイスが 使用されます。 ●使用可能フォーマット このボタンを押すと、現在選択されている再生デバイスで使用する事が 可能なフォーマット(サンプリング周波数、ビット長、Stereo/Mono) の一覧表が表示されます。 「S」は StereoとMono両方が使用可、 「M」は Monoのみ、 「-」は使用できないフォーマットであることを表します。 ※ 「s」は Stereo のみを表します。(まず無いと思いますが(^^;;) ※ 現在設定されているフォーマットの部分が反転表示されます。 (表中に該当するものが無いフォーマットであった場合を除く) ※ 以上は、再生動作中は変更できません。 === 録音 === ●デバイス 入力/録音に使用するデバイスを選択します。 ※ Wave Mapper を選択すると、Windowsで設定されているデバイスが 使用されます。 ●使用可能フォーマット このボタンを押すと、現在選択されている録音デバイスで使用する事が 可能なフォーマット(サンプリング周波数、ビット長、Stereo/Mono) の一覧表が表示されます。 「S」「M」「-」等は、再生の場合と同じです。 ※ 現在設定されているフォーマットの部分は点線の枠で囲まれて 表示されています。 使用可能なフォーマットの内のどれかを、マウスで "ダブルクリック" することによって、次項で設定するのと 同じく、入力用フォーマットを設定することができます。 (ただし、設定できるのは、サンプリング周波数とビット長 のみです。 Stereo/Mono は次項で設定してください) ●フォーマット サウンドデバイス入力のフォーマットを設定します。 注1: 選択できる全てのフォーマットがサウンドデバイスでサポート されているとは限らないことに注意して下さい。 (ソフト的にサンプリング周波数変換される場合もあります) また、逆にサポートはされているがリストに無いフォーマットは 今のところ選択することはできません。(例: 8kHz s/sなど) ※ 上項の使用可能フォーマット一覧表をもとに設定して下さい。 ※ 上項の使用可能フォーマット一覧表上でダブルクリックにより 設定するのと全く同じです。 双方が連動しています。 注2: ここでのフォーマットの変更は、次に入力/録音動作が実際に 行われた時にはじめて有効になります。 (メインウィンドウ上の表示も、その時に変わります) ●録音モード 「入力/録音ボタン」を押した時の動作を設定します。 ◇サウンドデバイスからの入力のみ サウンドデバイスからの直接入力をデータとして計算/表示します。 ◇ファイルへ同時書き込みする こちらを選択しておくとファイルへ録音しながら計算/表示します。 「入力/録音ボタン」を押すたびに、出力するファイル名を指定する ための ダイアログボックス が開きます。 (V1.11 から) ※ シフトキーを押しながら「入力/録音ボタン」を押すことで、 一時的に現在の設定とは逆のモードでスタートするように なりました。 普通は入力モニターのみ、たまにファイルへ録音、といったような 場合に便利です。 ※ 以上は、録音動作中は変更できません。 (V1.20 から) [その他] === 画面コピー (Ctrl+C) === クリップボードへの画面コピーの範囲を選択します。 全ウィンドウ : WaveSpectra全体 (Alt+PrtScrn キーと同じ) Wave+Spectrum: WaveとSpectrum (いわゆるクライアント領域全体) Waveのみ : Waveのみ Spectrumのみ : Spectrumのみ (測定モードの下部パネルは含まず) Spectrum+測定モードパネル : Spectrumのみ (測定モードの下部パネルを含む) ◇マウスカーソルを含める チェックすると、マウスカーソルも含めて画面コピーできるように なります。 リードアウトの時などに便利でしょう。 === Waveファイルを開いたあと自動演奏する === チェックすると、ドラッグ&ドロップでの場合も含めて、Waveファイル を開いたあと、プレイボタンを押さなくても自動的に演奏するように なります。 ※ 以上は動作中でもリアルタイムに変更できます。 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ === 表示休止時間 === (V1.10 から、コンボボックス位置が下部に変わりました) 表示時間間隔を調整します。 0 の時、フルスピードでFFT計算/表示します。 このときCPU使用率は、100% となります。 これでは速すぎて困る時?や、他のソフトのために CPU使用率を下げたい時には、0 以外の値を設定して下さい。 設定した時間(ms)だけ間隔を開けて計算/表示します。 (その間CPUは他に開放されます) 注: 特に、姉妹ソフト WaveGene と同時使用する時は、ここが 0 だと、 WaveGeneからの出力が途切れたり、表示がぎくしゃくしたりする ことがありますので、適当な値を設定して下さい。 ※ メインウィンドウ上部(L/Rボタンの左)に、現在の表示更新レート fps が表示されますので、参考にして下さい。 ※ 20フレーム/秒 程度以上が出ていれば、ほぼ入力にリアルタイムに 追従して表示されます。 ※ コンボボックスのリスト中の値だけでなく、任意の値を設定する ことができます。 === 表示カラー === (V1.10 から、コンボボックス位置が下部に変わりました) 表示カラーセットを3種類から選択できます。 1. 普通のWindows95風表示 2. 画面のプリントに適した、白を背景とした表示 3. オシロスコープのCRT風の表示 (デフォルト)(V1.10 から) =========================================================== ※ 設定ダイアログボックスを閉じる時、ダイアログボックスの 「キャンセル」ボタンを押して閉じると、それまでの全ての 設定が、ダイアログボックスを開いた時の状態に戻ります。 よって、一時的に別の設定にすることができます。 =========================================================== --------------------------------------------------------------------------- 【リードアウト】 ◎ポーズ中にマウスカーソルを Wave/Spectrum 表示ウィンドウへ移動すると、 マウスカーソルが十字形に変わり、その中心が示す部分の波形の値を読み取る ことが出来ます。(小さな表示ウィンドウがカーソルと共に移動します) 注: Spectrum 3D表示の場合はリードアウトできません。 ※ このときのマウスカーソルの位置は、横方向(時間軸/周波数軸)だけが 読み取りに関係します。 その位置に対するグラフの縦軸の値が読み出されるだけなので、マウス自身の 縦方向の位置は表示される値とは無関係です。 ※ グラフの表示密度が高くて画面の1ドットに実際には複数のデータが 対応している場合(Log表示の周波数の高周波の部分など)には、 上のようにカーソルを合わせただけでは、その内のどれを表示したら よいか決定できないので、飛び飛びのデータしか読み取れません。 ↓このような場合には、次の「自動ピーク検出機能」が役に立ちます。 ●自動ピーク検出機能 マウスカーソルを読み取りたい波形のピーク(頂)やディップ(谷)の近くに 近づけてから、マウスの左ボタンをクリックすると、自動的にその部分へ 引き込まれ、その部分の値が表示されます。 正確にマウスカーソルを合わせる必要が無いので便利です。 また、自動的にその付近のデータ自身のピークやディップの位置を求めて、 再び逆にその対応するグラフの表示位置へカーソルを移動しているので、 上記のようにグラフが重なっていて読み取り困難な部分でも、正確に読み取る ことが可能です。 ※ ピークの部分を読みたい場合には、それより少し上側へ、 ディップの部分を読みたい時には、それより少し下側へ、マウスカーソルを おいてから左ボタンをクリックするようにすると、ほぼ確実に目的の位置へ "引き込ませる" ことが出来ます。 注: Spectrum表示で、V1.10 からの "ピークのみ描く" をチェックしている 場合は、当然ながらピーク部分のみの検出となります。 --------------------------------------------------------------------------- (V1.10 から) 【分析位置 精細指定機能】 Waveファイル演奏の場合のみ、ポーズ中には、トラックバーの位置変更 に対して、Wave/Spectrum表示も追従するように動作するので、任意の位置の Wave波形 および Spectrum を観測することができます。 さらに、その場合にのみトラックバーの上に現れる、細長い「位置精細指定」 ボタンを押すことで表示される "位置指定ウィンドウ" で、サンプル数や 経過時間で表される任意の位置を正確に指定することが出来ます。 ※ メインウィンドウのトラックバーと、位置指定ウィンドウでの移動操作とは 双方連動しており、どちらで位置を変更しても構いません。 また、その位置からWaveファイルの演奏を再開することもできます。 ※ 位置指定ウィンドウは、その右上の"閉じる"ボタン[X}を押すか、 「位置精細指定」ボタンを再度押すことで閉じることが出来ます。 (Waveファイルの演奏を再開した場合や、停止した場合には、一時的に閉じます) [位置指定ウィンドウ] 最左に、現在のWave位置がサンプル数とファイル先頭からの秒数で表示され、 その右に、ファイルの最後の位置(全ファイルサイズ)が同様に表示されます。 ◎位置移動ボタン 2つの左右方向の矢印ボタン、および「先頭へ」「末尾へ」で、現在位置を 移動することが出来ます。 ※ 左右矢印ボタンは、しばらく押し続けるとリピートします。 ※ 左右矢印ボタンは、シフトキーと共に押すと、その間だけ一時的に 移動量を 10倍 にすることができます。 注:「末尾へ」ボタンで移動する"末尾"とは、実際にはファイルの末尾を 越えた先の、全てゼロの状態であることに注意してください。 そこから、左矢印ボタンで戻った分だけが、分析されるデータとして 左から分析窓へ"戻ってくる"ことになります。 例えば、末尾へ移動後、1サンプルだけ戻ると、本来のファイルの 最後のサンプルデータ1つだけが、一番左の先頭データ(それ以外の 右側は全てゼロです)となってFFTされることになります。 ◎移動量 左右矢印ボタンでの移動量を設定します。 "サンプル数"、または "秒" で指定でき、それぞれの移動量をコンボボックス で設定できます。 ※ コンボボックスのリスト中の値だけでなく、任意の値を設定する ことができます。 ◎マーカー 任意の位置を2ヶ所までマーカーとして記憶でき、いつでもそこへ移動する ことが出来ます。 赤丸の位置記憶ボタンを押すことで、現在の位置がマーカーとして記憶され、 横にその位置の時間が表示されます。 (表示は便宜上"時間"ですが、位置そのものは、正確にサンプル数で記憶 されています) 「JUMP」ボタンを押すことで、記憶されたマーカーの位置へ移動できます。 ※ ヒント1 ファイル先頭から何秒目などの、決まった時間位置へ移動させたい場合は、 一旦、「先頭へ」ボタンで先頭へ移動させた後、移動量コンボボックスへ そこの時間(またはサンプル数)を入力してから、右矢印移動ボタンを 押すことで可能です。 (V1.11 から) ※ ヒント2 Spectrum 3D表示の場合、位置変更をする毎に、1つずつ Spectrum のグラフ がシフトしながら増えていきます。 よって、この機能をうまく使うと、ある位置から任意の間隔での複数の Spectrumを まとめて3D表示することができます。 3D表示全体を一旦消去したい場合には、ウィンドウの大きさを変えることで 消去できます。(ちょっと面倒ですが(^^;;) ほんの少しだけウィンドウ枠を動かせばよいでしょう。 (V1.20 から) ※ Waveファイルのフォーマットが、再生デバイスの未対応フォーマットである 場合や、初めから全くサウンドデバイスが無い場合などでも、この 分析位置 精細指定機能 を用いて分析する事ができます。 (オフラインモード) このような場合、ファイルを開いた後、プレイボタンを押すと、 それらの理由で再生できない という内容のメッセージボックスが 毎回表示されます。 これが煩わしい場合には、プレイボタンを押す時に、通常の再生可能な 場合と同じく、シフトキーを押しながらプレイボタンを押すことで 最初からポーズ状態でスタートすれば、上のメッセージボックスは 表示されません。 --------------------------------------------------------------------------- (V1.10 から) 【測定モード】 「測定モード」ボタンを押して測定モードにすると、下部に操作ボタンが現れ、 Spectrum表示ウィンドウの左に各種測定結果を表示する部分が取られ、 グラフ表示ウィンドウが少し右へ縮小されます。 ◎リアルタイム最大値表示機能 左の測定値表示エリアの最上部には、測定Spectrumの最大値の、周波数と振幅が 常に表示されます。 ※ このとき、その周波数位置を示す短いマーカーが、グラフ表示ウィンドウの 上側横軸の下に表示されます。 ◎リードアウト機能 測定モード中は、常にマウスカーソルを Spectrum表示ウィンドウ中の任意の 場所でクリックすることによって、リードアウトカーソル(縦点線)が表示 され、その部分の波形の値を読み取ることが出来ます。 値は左の測定値表示エリアの最大値の下に表示されます。 ※ 現在表示されているのと同じ位置でマウスを再度クリックすることによって、 リードアウトカーソルを消すことが出来ます。 ※ リードアウトカーソルは、グラフの表示密度の高い部分では、最も近辺の ピーク値を探して"引き込まれる"ようになっています。 注1: このため、測定実行中にリードアウトカーソルを消そうとして、同じ位置 でマウスをクリックしても、グラフの凹凸の状態の変化によって、同じ 位置を指定できないことがあります。 このような場合には、一旦別の位置(固定されたピークや、グラフ 表示密度の低いLog表示の低周波部など)にカーソルを移してから、 そこを再度クリックすれば消すことができます。 注2: ポーズ中においてのみは、通常モードと同じく、小さな表示ウィンドウ 付きのリードアウトとなります。 またこの時は、上のようなピーク検出だけでなく、自動ディップ検出 機能も同様に働きます。 ◎下部の各種ボタン ●Main メインスペクトラム(通常のリアルタイム測定波形)の表示をしたり、 消したりすることができます。 ※ 以下、単に測定波形と言った場合には、このメインスペクトラムを 指すこととします。 ●Peak このボタンが押されている間、測定波形のピークのみをホールドした波形を、 オーバーレイ1(詳細後述)のバッファに常に取り込みます。 この時、オーバーレイ1 の表示(OVL1ボタン)も同時に On にされますので、 意図的に Off にしない限り、測定波形とピークホールドされた波形が 同時に表示されることになります。 ※ ボタンが押されていない間は、ピークの更新はされません。 ※ ピークのリセットは、再度このボタンを押すことによって可能です。 (ボタンを押し下げる度に、バッファをリセットしてからピークホールド 動作を開始します) ※ ピークホールドされた波形の表示のみ On/Off するには、OVL1 ボタンを 使って下さい。 ●Ave(rage) このコンボボックスを、"1" 以外の数に設定すると、その数分の測定波形の 平均波形を、オーバーレイ2(詳細後述)のバッファに取り込みます。 この時、オーバーレイ2 の表示(OVL2ボタン)も同時に On にされますので、 意図的に Off にしない限り、測定波形と平均波形が同時に表示されること になります。 ※ コンボボックスのリスト中の値だけでなく、任意の値を設定する ことができます。 ※ 平均波形は、それぞれ各点の指定回数分の単純平均を繋いだものです。 ※ 平均動作を停止するには、"1"("0" でも可)を設定して下さい。 ※ 平均波形の表示のみ On/Off するには、OVL2 ボタンを使って下さい。 === オーバーレイ (Overlay) === スペクトラムの測定結果の保存および重ね書きのためのもので、1 と 2 の 2つあります。 ●OVL1 および OVL2 ボタン オーバーレイ1 または 2 の表示の On/Off を指定します。 ※ 表示中は、リードアウトカーソルで測定波形と同様に値を読み出すことが できます。 ※ 設定ダイアログ、=== Spectrum 表示タイプ === における "ピークのみ描く" の設定は、オーバーレイに対しても有効です。 ●キャプチャボタン (赤丸) このボタンを押した瞬間の測定波形データを、オーバーレイ1 または 2 のバッファに取り込むことができます。 この時、対応するオーバーレイ の表示(OVL1 又は OVL2ボタン)も同時に On にされますので、明示的に Off にしない限り、測定波形と取込んだ波形が 同時に表示されることになります。 ※ キャプチャ時には、一般的には ピークホールド、または 平均動作 を 停止しておく必要があります。 ただし、それぞれの動作中に意図的にキャプチャすること自体は、特に 差し支えがあるわけではありません。 ●コメント用エディットボックス ここにオーバーレイのデータの簡単な説明を書いておくことができます。 後述のオーバーレイデータの保存の際に、このコメントも保存され、後の 読込み時に再び表示されます。 ●L(oad) ボタン 保存しておいたオーバーレイデータファイルを読込みます。 ※ 現在設定されている、FFTデータ長、サンプリング周波数 と同じ設定で 保存されたオーバーレイデータファイルでないと、読込むことは できません。 ●S(ave) ボタン オーバーレイのバッファにあるデータを、ファイルに保存します。 ※ オーバーレイデータは、*.WSO という拡張子で保存されますが、 実際の内容はテキストフォーマットで、いわゆる CSV フォーマット になっています。 よって、Excel 等の他のアプリケーションに読込むことも可能です。 {フォーマット詳細} "WaveSpectra Overlay",1.10 ← 1行目 タイトルとバージョン "Comment","Overlay Test1" ← 2行目 コメント "Sampling Frequency",44100 ← サンプリング周波数 "FFT Samples",4096 ← FFTサンプル数 "Amplitude",2049 ← 以下に振幅データが、2049個続くことを示す 1.0397973969882,0.99449218972777,0.858296426766904, ...... ↑ 以下、2049個の振幅データ(直流分から順に、1行に 8個ずつで繰返し) ※ データ数は、(Sampling Frequency) / 2 + 1 ※ 周波数間隔は、(Sampling Frequency) / (FFT Samples) ※ データは、FFT結果の絶対値そのものです。(Max. 32768) dB処理等はされていません。 つまり、出力時の画面表示設定等には無関係です。 注1: 既述、Peak(ピークホールド)、Ave(平均) の結果は、同じくこの オーバーレイバッファに格納されていることに注意してください。 すなわち、それぞれの結果も他のオーバーレイデータと同じく、 Load/Save 等が可能です。 注2: リードアウト、ポーズ中の、自動ピーク/ディップ検出機能についての補足 波形表示がオーバーレイのみ(メイン波形がOff)の場合、 リードアウトカーソルの自動ピーク検出機能の対象は、オーバーレイに 変わります。 またこのとき、オーバーレイ1 が 2より優先されます。 つまり、オーバーレイ1 および 2 共が表示されている場合は、 ピーク検出は、オーバーレイ1 に対して働きます。 === その他の測定機能 === ●THD ボタン 全調波歪み(Total Harmonic Distortion)、および THD+N(Noise)または S/N(Signal to Noise Ratio)を測定表示します。 ※ THD+N と S/N は、表示の違い(逆数のdB)だけですので、THD ボタンを 押す度に THD との組合わせが切り替わるようになっています。 ※ 測定対象基本波は、リードアウトカーソルが表示中なら、それが示す位置 の周波数、リードアウトカーソルが消されている場合には、自動検出 された最大値の周波数、となります。 (よって、通常、リードアウトカーソルは消しておく方が便利です) ※ THDは、使用する窓関数のメインローブ/サイドローブ(誤差成分の キレ具合?)の形の違いによって値が変わります。 特に基本波が低周波の場合、低次高調波までのデータ数が少ないため、 窓関数の影響による誤差が多くなり、一般に大きなTHD値となります。 (このような場合、ハニングより、キレの良い?ブラックマンや ブラックマン-ハリス の方が良いかもしれません。 また、分析データ長を長くすることでも、誤差を少なくできます。 詳しくは関連の専門書をご覧ください) 注: 測定対象について 波形表示がオーバーレイのみ(メイン波形がOff)の場合、 測定の対象は、オーバーレイに変わります。 またこのとき、オーバーレイ1 が 2より優先されます。 つまり、オーバーレイ1 および 2 共が表示されている場合は、 測定は、オーバーレイ1 に対して働きます。 ●RMS ボタン Wave波形の実効値(Root Mean Square value)を、最大振幅のsin波の それに対する比として dB表示します。 ※ これのみ、測定対象は切出された元のWaveデータを直接使っています。 よって、窓関数の種類等には影響されません。 注: THD, RMS 共に、FFT実行中は表示されません。 ストップ または ポーズ ボタンでの停止時に測定、表示されます。 --------------------------------------------------------------------------- 【その他】 ◎ 計算/表示の高速化について 計算を高速化するには、 1. 高速なCPUに変える(^^;; 2. FFTのサンプルデータ数を下げる。 表示を高速化するには、 1. 高速なディスプレーカードに変える(^^;; 2. WaveSpectraの表示サイズを小さくする(^^;; 3. 多少ちらつくのを我慢して、設定ダイアログで高速表示に チェックを付ける。 また、DirectDrawを併用してみる。 ※ V1.10 から追加された、Spectrum表示の "ピークのみ描く" をチェックすると、みかけ上ちらつきが減るので良いかも‥‥ 4. 画面の表示モードを 256色等の色数の少ないモードに変更する。 ※これはかなり効きます。 またドライバによっても大分違うようです。 ※ FFT の計算自体はかなり高速(K6-200MHz 4096点で 約9ms 窓関数や後処理 を入れても 10数ms)で、実際には全表示更新時間の内のかなりの部分を画面表示 の時間に取られており、ディスプレーカードの表示能力が結構効いています。 (全画面表示などの大画面にした時の描画速度の低下も、ディスプレーカード によってかなり違うようです。 ほとんど低下しない場合もあります) また、ディスプレーカードやWindowsのメモリーの使用環境にも結構 影響される ようです。(起動直後と、色々なアプリ使用後では速度が違うことがあります) ◎ DirectDrawの使用について V1.01 より、Wave, Spectrum へそれぞれ分割したので、様々に組合わせる ことで、最適になるように設定することが出来るようになりました。 ※ 表示画面が小さい場合は、全く使用しない方が速い場合もありますし、 大画面にした場合でも、垂直帰線消去期間を待つので、速い機械の場合は 2つともチェックすると、かえって遅くなる場合が多いはずです。 この場合、時間のかかる Spectrum の方だけチェックすると、時間のかからない Wave の方も同じ帰線期間中に書き終わってしまうので、最も速い結果が得られ るようです。 ※ 目安として、Wave、Spectrum 共に "高速表示" を On にして、その場合の 表示更新レート fps が、ディスプレーカードのリフレッシュレートを 充分(1〜2割?)安定して越えている場合には、そのままで Spectrum の方の DirectDraw のみチェックすると、最も良い結果が得られます。 (遅い機械の場合は、リフレッシュレートの半分の値を目標にして同様に すると良いようです) ◎ スプリットバーについて Wave/Spectrum 表示エリア中央のスプリットバーをドラッグすることで 2つのエリアの比率を変えることが出来ます。 片方の表示エリアを無くしてしまうことも出来ます。 ※ これまで特に説明もしませんでしたが、メインウィンドウのサイズも、当然 自由に変えられます(^^; ◎ 時間その他の表示について ・Waveファイルの演奏中は、トラックバーの上部左側へ経過時間、右側に そのデータの全演奏時間が表示されます。 ・サウンドデバイスからの入力中は、トラックバーの上部左側へ"赤色"で Wave In. と表示されます。 (「ストップ」ボタンを押すまで入力を続けます) ・ファイルに書込みながらのサウンドデバイスからの録音中は、 トラックバーの上部左側へ"赤色"で経過時間、右側には、書き込みドライブの 書き込み可能な "残り時間" が表示されます。 ◎ サウンドデバイスからの入力時の遅れについて サウンドデバイスからの入力時には、先読みしてから処理するWaveファイル からの入力と違って、入力バッファにデータが溜まってからでないと処理 できないため、必ずいくらかの遅れが生じます。 ※ サンプリング周波数が 44100s/s の時にはあまり気にならない程度ですが、 11025s/s のように低い時や、FFTのサンプル数が多い時はかなり遅れます。 ◎ 8bitのデータについて データが8bitの場合、-128 〜 127 の値を256倍することで16bitのデータ と同様に扱って計算/表示しています。 よって、Wave の振幅の表示も256倍した値でそのまま表示していますので、 目盛りの表示等は 最大128 ではないので注意してください。 また、Spectrum は、256倍の分(約48dB)だけシフトアップされて表示されます。 ◎ 設定ダイアログを既に開いていて、他のウィンドウの下に隠れている場合 (メインウィンドウを最大化している時など)は、 再び「設定」ボタンを 押すと、ダイアログが前面に現れます。 ◎ 表示カラーセットのカスタマイズについて ダイアログ等によるカスタマイズは出来ませんが、いまでも取り敢えず WS.INI を直接エディタで編集することで、任意の表示カラーにカスタマイズ することが出来ます。 Windowsのカラー表記(16進)ですが、簡単にコメントを付けておいたので お分かり頂けると思います。 (V1.10 から) ◎ リサジュー表示の際の速度について リサジュー表示をなめらかに表示するには、30〜40fps 以上の表示速度が必要 なようですが、逆に速すぎる場合にも表示がバラバラに途切れて醜くなることが あるようです。 そのような場合には表示休止時間を適当に設定して速度を落とすと奇麗に表示 されるようになります。 よって、Spectrumウィンドウを最少化して無くした場合など、FFT計算が キャンセルされ、速くなりすぎるのを防ぐため、内部で自動的に表示休止 時間が追加設定(5)されるようにしてあります。 (V1.10 から) ◎ 動作中、および、分析位置 精細指定機能 の際の Wave表示について 従来より、FFT動作中のWave波形表示は、波形の流れを出来るだけ止めて 見易くするために、オシロスコープのトリガー動作と同じことをさせて表示 しています。 (トリガーレベル:0 Slope:+) ポーズ時は、前バージョンまでは演奏中と同じく、止まった時点でのトリガー 動作させた波形を表示させていましたが、今回からは、分析位置精細指定機能 のために、停止時は、トリガー動作の無い そのままの Waveデータを表示する ように変更しました。 よって、その時FFTされているWaveデータそのものが先頭から表示されている ことになります。 (特に、=== 横軸(Time) === の倍率を x1 にした場合には、 FFT されているWaveデータの全てのサンプルが表示されていることに なります) ◎ おまけ テレビの音声などをモニターすると結構面白いです。 水平同期信号の漏れはもちろんのこと、局によって音声の帯域も違うこと、 NHK TV の音声はローカル切替制御?のために 10kHz 付近の信号がフィルタ されて欠損していること等が良く解ります(^_^) --------------------------------------------------------------------------- ※ このプログラムは Borland C++ Builder 3 で作成されています。 ※ Windows95/98/NT4 で動作します。 --------------------------------------------------------------------------- 【免責】 本プログラムを使用した上でのいかなる損害についても、作者は一切の責任を 負いません。 --------------------------------------------------------------------------- ◎ このプログラムは、フリーソフトウェアです。 著作権は efu にあります。 ※転載を希望される場合には、必ず先にメールで連絡してください。 無断での転載はしないでください。 ご感想、ご希望、障害の報告、その他、お気軽にこちらまで宜しくお願いいたします。 E-Mail: efu@mba.nifty.ne.jp 最新版は、 http://member.nifty.ne.jp/efu/ 姉妹品、 WaveSpectraのお供に! 多機能、高精度 テスト信号発生ソフト ------------------> WaveGene CD-RでのCD-DA作成時や、サウンドカードのテストに便利! 自動頭出し機能付き Waveファイル専用比較ソフト --------> WaveCompare も宜しく(^_^) (CD-R のメディアの情報もあります) 2000.01.25 efu --------------------------------------------------------------------------- WaveSpectra 履歴 2000.01.25 V1.20 1.24bit,32bit Waveフォーマットへ対応。 それによるバッファの構成を変更。 2.FFTサンプル数を 65536 まで拡張。 3.窓関数に Blackman-Harris (4 Term) を追加。 4.Spectrum Amplitude レンジ を、40〜160dB に拡大。 (但しステップは 20dB間隔) 5.画面コピー(Ctrl+C)機能の追加。 6.ファイルを開くかドラッグ&ドロップしたあと、プレイボタン を押すことなく自動的に演奏する機能の追加。 7.再生/録音デバイスの指定機能、および使用可能フォーマットの 表示機能の追加。 (そのための設定ダイアログタブの変更) 8.再生時に使用可能フォーマットでない場合や、再生デバイスが 全く無い場合でも、位置精細指定モードでのみ動作するように した。(オフラインモード) 9.再生中の ポーズで、位置設定ウィンドウが表示される設定 の時、FFT動作が終了してしまい、ポーズ解除で再開しないこと があったのを修正。 10.録音中の ポーズの解除時、その後のWaveに対するSpectrum表示 の応答がそれまでより少し遅れる事があったのを修正。 11.再生/録音で、一旦 デバイスオープンエラーが起こると、その後 再起動しなければそれがリセットされなかったバグを修正。 12.データ以前に大きなダミーのチャンクがあるWaveファイルで 一般保護エラーになっていたバグを修正。 13.その他、細かな修正、変更。 99.06.19 V1.11 1.WAVEファイル演奏中でのポーズ時、トラックバーによる位置変更 に対して、Spectrum 3D表示の場合でも追従するようにした。 (分析位置 精細指定機能) 2.WAVEファイルのプレイボタンをシフトキーと共に押した場合には ポーズ状態からスタートするようにした。 (プレイ&ポーズが間に合わないような、短いファイルの 分析位置 精細指定機能のため) 3.位置精細設定ボタンをOnのままにもできるようにし、ポーズ解除 の度に消えていた位置設定ウィンドウを、ポーズした時は いつも 出たままにできるようにした。 4.録音ボタンをシフトキーと共に押した場合には、一時的に現在の 録音モードとは逆のモードになるようにした。 5.その他、細かな修正、変更。 99.06.13 V1.10 1.Spectrum 3D表示追加。 2.Wave リサジュー表示追加。 3.測定モード追加。 ピークホールド波形、平均波形、リードアウト、 オーバーレイ(ロード、セーブ付き)、THD(+N)、S/N、RMS 4.設定ダイアログの構成の変更。 入力/録音 でのフォーマットの入力方法の変更、拡張。 また、fps表示をメインウィンドウで常に表示するように変更。 5.WAVEファイル演奏中でのポーズ時、トラックバーによる位置変更 に対して、Wave/Spectrum表示も追従するようにした。 さらに、サンプル数や経過時間で精密に任意の位置を指定する 機能の追加。(2ヶ所のマーカーも利用可能) 6.FFT計算の高速化。 (FFT部分は約2倍) (Stereo同時表示目的だったものを、ちゃんと?Mono用にした) 7.グラフ表示の精度アップ。 8.Spectrum のグラフ表示の時ピークのみ表示するモード追加。 9.Spectrum dB表示シフトに、常に最大値を0dBとする Normalizeモード追加。 10.Spectrum 振幅 dB表示のレンジの間隔を、10dB間隔に変更。 11.Wave と Spectrum のウィンドウ比率を保存するようにした。 12.キー操作で、プレイ/録音 中のスペースキーを ポーズ機能 に変更。 ストップ は、従来の Ctrl+S の他に ESCキー も追加。 13.カラーセットのデフォルトをセット3(オシロ風)に変更。 14.一部ソフトが作る、不正なヘッダのWAVEファイルに対応。 15.その他、細かな修正、変更。 98.12.09 V1.02 1.表示速度が最大2割程度アップ。 2.Wave 表示の拡大率に、20追加。 3.Spectrum dB表示の時に、窓関数による低下を自動補正する Autoモード追加。 4.NT で起動できないことがあったのを修正。 5.NT 上で起動/終了を繰り返す度に、WS.INI 中の ColorSet1 のコメント行がどんどん増えていくのを修正。 6.サウンドカードによっては16bitのWAVEフォーマットが正常に 表示できないことがあったのを修正。 7.一旦トラックバーを動かすと、その後キー入力ができなくなった のを修正。 8.Spectrum のリードアウトの1dB以下の表示の不具合を修正。 9.その他、細かな修正、変更。 98.11.11 V1.01 同名のソフトが存在したため WaveSpectra と名前変更。 (Waveシリーズとなって、かえって良いかも(^_^)) 1.リードアウト(値の読出し)できるようにした。(ポーズ中) 2.DirectDraw(V.Blankチェック)の使用を、Wave,Spectrum 両方に分割した。 3."表示ディレイ"の名称を、"表示休止時間"に変更。 4. 2,3 に伴う WS.INI 内の名称変更。 5.計算表示中に強制終了した場合に、計算表示スレッドが完全に 停止しないうちにメインウィンドウが閉じ、アクセス違反と なることがあったのを修正。 6.設定ダイアログを開いたまま終了すると、必ず設定ボタンを 押したことになっていたのを、キャンセルしたことになるよう 修正。 7.バージョン/コピーライト表示を忘れていた(^^; 8.その他、細かな修正、変更。 98.10.30 V1.00 (WinSpectra) ---------------------------------------------------------------------------