スペクトラムアナライザ

サンプルのディレクトリ

/cri/pc/samples/criatomex/spectrum_analyzer

サンプルの解説

バスに流れている音声の周波数解析を行うサンプルです。
スペクトラムアナライザはcriAtomDspSpectra_Create関数で作成します。
コンフィグ構造体(CriAtomDspSpectraConfig)によって解析バンド数を指定することができます。
バスの音声を取得するには、criAtomExAsr_SetBusFilterCallbackでコールバック関数を登録します。
このコールバック関数はオーディオ処理を行う度にオーディオスレッドから呼び出されます。
バスの音声をスペクトラムアナライザで解析するコードを以下に示します。
void main()
{
    /* スペクトラムアナライザの作成 */
    app_obj->dsp_hn = criAtomDspSpectra_Create(NULL, NULL, 0);

    /* バスフィルタコールバックの登録 */
    /* 備考)下記の例ではバス7を通る信号に対して解析を実行。 */
    criAtomExAsr_SetBusFilterCallback(7, app_filter_callback, NULL, app_obj);

    for (;;) {
        /* スペクトル情報の取得 */
        spectra_ptr = criAtomDspSpectra_GetLevels(app_obj->dsp_hn);

        for (i = 0; i < NUM_BANDS; i++) {
            /* 値をデシベル値に変換 */
            decibel = 20.0f * log10f(spectra_ptr[i]);

            /* 表示範囲の選択 */
            /* 下記の例では-96dB以上の値を表示 */
            graph[i] = (CriSint32)(decibel + 96.0f);
        }
        Sleep(10);
    }
}

/* フィルターコールバック */
static void app_filter_callback(void *obj, CriAtomPcmFormat format,
    CriSint32 num_channels, CriSint32 num_samples, void *data[])
{
    AppObj *app_obj = (AppObj*)obj;

    /* 音声再生時以外は何もしない */
    if ((num_channels <= 0) || (num_samples <= 0)) {
        criAtomDspSpectra_Reset(app_obj->dsp_hn);
        return;
    }

    /* スペクトルの解析 */
    criAtomDspSpectra_Process(app_obj->dsp_hn, num_channels, num_samples, (CriFloat32 **)data);
}

CRI Middleware logo Copyright (c) 2006-2018 CRI Middleware Co., Ltd.