CRI ADX  Last Updated: 2024-03-21 14:32 p
スペクトラムアナライザ

サンプルのディレクトリ

/cri/pc/samples/criatomex/spectrum_analyzer

サンプルで使用しているデータ

/cri/common/smpdata/criatomex/
  • SampleProject.acf
  • AtomCueSheet.acb
  • AtomCueSheet.awb

サンプルの解説

バスに流れている音声の周波数解析を行うサンプルです。
スペクトラムアナライザは 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);
}
void criAtomExAsr_SetBusFilterCallback(CriSint32 bus_no, CriAtomExAsrBusFilterCbFunc pre_func, CriAtomExAsrBusFilterCbFunc post_func, void *obj)
void criAtomDspSpectra_Reset(CriAtomDspSpectraHn spectra)
スペクトラムアナライザのリセット
void criAtomDspSpectra_Process(CriAtomDspSpectraHn spectra, CriUint32 num_channels, CriUint32 num_samples, CriFloat32 *pcm[])
スペクトラム解析
CriAtomDspSpectraHn criAtomDspSpectra_Create(const CriAtomDspSpectraConfig *config, void *work, CriSint32 work_size)
スペクトラムアナライザの作成
const CriFloat32 * criAtomDspSpectra_GetLevels(CriAtomDspSpectraHn spectra)
スペクトル解析結果の取得
enum CriAtomPcmFormatTag CriAtomPcmFormat
PCMフォーマット