ユーザーPCM出力

サンプルのディレクトリ

/cri/pc/samples/criatomex/user_pcm_output

サンプルの解説

criAtomEx_Initialize_WASAPI 関数を実行すると、Atomライブラリは内部的にWASAPIを初期化し、音声の出力に使用します。
これに対し、初期化関数に criAtomEx_InitializeForUserPcmOutput_PC 関数を使用した場合、AtomライブラリはWASAPIの初期化を行いません。
(Atomライブラリ内でサウンドを出力する処理が行われなくなります。)
criAtomEx_InitializeForUserPcmOutput_PC 関数を使用してライブラリを初期化する場合、サウンドの出力処理はアプリケーション側で行う必要があります。
具体的には、 criAtomExAsr_GetPcmDataFloat32 関数でAtomライブラリから出力用のPCMデータを取得し、アプリケーション側で音声出力処理を行う形になります。
/* メイン処理 */
int main(int argc, char *argv[])
{
        :
    /* ユーザーPCM出力用にライブラリを初期化 */
    criAtomEx_InitializeForUserPcmOutput_PC(NULL, NULL, 0);
        :
}

/* サウンド出力スレッド処理 */
static CriUint32 user_sound_output_func(
    void *obj, CriUint32 nch, CriFloat32 *sample[], CriUint32 nsmpl)
{
        :
    /* PCMデータを取得 */
    num_written = criAtomExAsr_GetPcmDataFloat32(nch, nsmpl, sample);

    /* 取得したPCMデータを出力 */
        :
}
[備考]
criAtomEx_InitializeForUserPcmOutput_PC 関数を使用してライブラリを初期化した場合、ライブラリの終了処理を criAtomEx_FinalizeForUserPcmOutput_PC 関数を用いて行う必要があります。
注意:
criAtomExAsr_GetPcmDataFloat32 呼び出しは、独立したスレッド上で定期的に行う必要があります。
現状、AtomライブラリのAPIには、PCMデータが出力されるまで処理を返さないものがいくつか存在します。
(ボイスプールの破棄処理等。)
こういった関数と本関数とを同一スレッド上で順番に呼び出すと、当該APIがPCMデータの出力を永遠に待ち続ける形になり、処理が復帰しなくなる可能性があります。

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