================================================================
 【   名  称   】 ASAnalyzer
 【 バージョン 】 1.21
 【  公 開 日  】 2010/02/26
 【  動作環境  】 Windows 98/2000/XP/Vista
 【   作  者   】 あっきー
 【  連 絡 先  】 ackiesound@hotmail.co.jp
================================================================

【概要】
  音声スペクトル解析機能、基本周波数解析機能を提供するDLLです。

【使用条件等】
  ・個人の非商用利用に限ります。
  ・著作権は作者であるあっきーが有します。
  ・本DLLを使用することによって生じた損害に関して、作者は一切
    責任を負わないものとします。
  ・本DLLを使用するソフトを公開する際、作者に連絡する必要は
    ありません。また、本DLLを使用していることを付属のドキュメント
    等に書く必要はありません。

【その他】
  バグ、ご意見、ご要望等ありましたらメールでお知らせください。
  あっきー
  Mail    : ackiesound@hotmail.co.jp
  WebPage : http://ackiesound.ifdef.jp/

【更新履歴】
 ver.1.21 2010/02/26
  スペクトル、基本周波数を正常に解析できないことがあるバグを修正。

 ver.1.2 2009/12/16
  解析対象のチャンネル,基準周波数を指定できるようにした。

 ver.1.1 2009/09/09
  半音あたりのブロック数を指定できるようにした。

 ver.1.0 2009/09/01
  初公開


----------------------------------------------------------------
 音声データの解析
----------------------------------------------------------------

int AS_AnalyzeWaveData(
    void *wavdata,              // wavデータ
    unsigned short sndspc[],    // 音声スペクトル
    int *pitch,                 // 基本周波数[cent]
    int wavdatasize,            // データのサイズ[サンプル]
    int wavsampleps,            // サンプリング周波数[Hz]
    int wavbit,                 // ビット数(8or16)
    int wavchannel,             // チャンネル数(1or2)
    int nnoffset,               // 解析する最低音[ノートナンバー]
    int nnrange,                // 解析する音階の範囲[半音]
    int blockpn,                // 半音あたりのブロック数(1-20)
    int targetch,               // 対象のチャンネル
    double freqa4               // 基準周波数[Hz]
);

 wavdataに音声の波形データ、wavdatasizeにwavdataのサンプル数、
 wavsamplepsにサンプリングレート、wavbitにビット数、wavchannelに
 チャンネル数を指定してください。

 wavデータのサンプル数は、解析したい最低音の25波長分以上必要です。
 解析したい最低音がC1=32.7Hzの場合、25/32.7=0.765秒以上のデータが
 必要です。サンプル数が足りないと、低音域で正しい結果が得られません。
 ただし、多すぎると処理に時間がかかります。サンプル数は2のn乗である
 必要はありません。

 nnoffsetには解析する最低音をC4=60とする半音単位で、nnrangeに
 音階の範囲を半音単位で指定してください。(C1からB7まで解析したい
 場合はnnoffset=24,nnrange=84を指定してください。)

 blockpnには半音あたりのブロック数を指定してください。1なら半音ごと、
 5なら20セントごと、10なら10セントごとにスペクトルを解析します。
 blockpnが1の場合、sndspc[0]が最低音、sndspc[nnrange-1]が最高音の成分です。
 blockpnに1以外の値を指定した場合は、sndspc[blockpn/2]が最低音の
 成分になります。（blockpnが5の場合、sndspc[0]が最低音-40セント、
 sndspc[2]が最低音+0セントになります。blockpnが10の場合、
 sndspc[0]が最低音-50セント、sndspc[5]が最低音+0セントになります。）

 targetchには解析対象のチャンネルを指定してください。
  #define AS_CH_LPR 0   // L+R
  #define AS_CH_LMR 1   // L-R
  #define AS_CH_L   2   // L
  #define AS_CH_R   3   // R
 モノラルの場合、 この値は無視されます。

 freqa4にはA4の周波数を指定してください。通常、A4は440.0Hzです。

 音声スペクトルはsndspcに代入されます。あらかじめnnrange*blockpn
 要素分のメモリを確保しておいてください。sndspc[]は0〜65535の値を
 とります。sndspcが不要な場合はNULLを指定してください。

 基本周波数はC4を6000とする1cent単位でpitchに代入されます。不要な
 場合はNULLを指定してください。

 戻り値
  #define AS_ERR_NOERR  0   // 成功
  #define AS_ERR_NOMEM  1   // メモリ不足により失敗
  #define AS_ERR_BADPRM 2   // パラメータが不正


----------------------------------------------------------------
 DLLのバージョンを取得
----------------------------------------------------------------

int AS_GetDllVer();

 DLLのバージョンを取得します。ver.1.21なら121を返します。


----------------------------------------------------------------
 1cent単位の音階を周波数に変換
----------------------------------------------------------------

double AS_Cent2Freq(
    int cent            // C4を6000とする1cent単位の音階
);

 C4を6000とする1cent単位の音階を周波数[Hz]に変換します。


----------------------------------------------------------------
 周波数を1cent単位の音階に変換
----------------------------------------------------------------

int AS_Freq2Cent(
    double freq         // 周波数[Hz]
);

 周波数[Hz]をC4を6000とする1cent単位の音階に変換します。


----------------------------------------------------------------
 ノートナンバーを周波数に変換
----------------------------------------------------------------
double AS_Nnum2Freq(
    int nnum            // C4を60とする半音単位
);

 C4を60とする半音単位の音階を周波数[Hz]に変換します。


----------------------------------------------------------------
 周波数をノートナンバーに変換
----------------------------------------------------------------
int AS_Freq2Nnum(
    double freq         // 周波数[Hz]
);

 周波数[Hz]をC4を60とする半音単位の音階に変換します。

