SNDEX_SetIirFilter

定義

#include <twl/snd.h>
SNDEXResult
SNDEX_SetIirFilter(SNDEXIirFilterTarget target,
                   const SNDEXIirFilterParam* pParam)

引数

target IIRフィルタをかける対象 SNDEXIirFilterTarget列挙型。
pParam IIRフィルタの性能を決定する SNDEXIirFilterParam構造体。

返り値

SNDEX_RESULT_SUCCESS 一連の処理が正常に完了した場合に返ります。
SNDEX_RESULT_ILLEGAL_STATE NITROプラットフォーム上で当関数を呼び出した場合、CODECをCODEC-DSモードで動作させている場合に返ります。
SNDEX_RESULT_BEFORE_INIT サウンド拡張機能をSNDEX_Init()により初期化していない場合に返ります。
SNDEX_RESULT_EXCLUSIVE 他のサウンド拡張機能に関する処理を実行中の場合に返ります。 サウンド拡張機能に関する各処理は排他制御により同時には行えませんのでご注意下さい。
また、ARM7内での排他制御エラーが発生した場合にも返ります。この場合はARM7内での処理進捗状況に依存したエラーですので、リトライすると状況が改善する可能性があります。
SNDEX ライブラリの概要にある通り、シャッター音再生処理中もこのエラーを返します。
SNDEX_RESULT_PXI_SEND_ERROR ARM7へのPXIコマンド発行に失敗した場合に返ります。 ARM7へのPXI送信キューが飽和した場合や、ハードウェアがエラーを検知した場合に発生するエラーですので、リトライすると状況が改善する可能性があります。
SNDEX_RESULT_ILLEGAL_TARGET 引数 target の値が有効範囲外だった場合に返ります。

説明

マイク入力される音声データにかけるIIRフィルタ(1〜5段)を設定します。
ただし、多段のフィルタを設定するには、本関数を段数分呼ぶ必要があります。

$TwlSDK/docs/TechnicalNotes/IIR_FilterBuilder.xls を使うことで、ローパスフィルタ、ハイパスフィルタ、バンドパスフィルタ、
バンドエリミネーションフィルタのパラメータを作成することができます。ただし、特性を指定してパラメータを算出するといったことはできません。
詳しくは、IIR_FilterBuilder の使い方をご覧下さい。

処理の完了はPXI受信割込みにより検知しますので、PXI受信割込みを禁止していると当関数内部でブロックし続けることに注意して下さい。

また、シャッター音の再生音量を維持するために、DSP_PlayShutterSound() 実行中は
SNDEX_RESULT_EXCLUSIVE を返して何もせずに終了します。
さらに、シャッター音再生中はライブラリ側で IIR フィルタの設定を一時的に初期化し、再生後に再設定するようになっています。

IIR フィルタの設定が終了するまでスリープやハードウェアリセットの実行を待つようになっています。
詳しくは、スリープハードウェアリセット・シャットダウンの概要をご覧下さい。

注意

IIR フィルタは一度に1段ずつしか設定できません。IIR フィルタ設定中に本関数を再度呼んでもエラー SNDEX_RESULT_EXCLUSIVE が返ります。

IIR フィルタ1段の設定には 数10msec〜100msec の時間がかかります。設定時に ARM7側で SPI の排他制御を行うため、この間は MIC のサンプリングや
TP のサンプリング、PM、NVRAM が待たされてしまい、遅延が発生します。

従って本関数と並行して、以上のデバイスを用いた処理を行う場合は注意する必要があります。

IIR フィルタのパラメータ設定には十分に注意する必要があります。
IIRフィルタを、入力音声データのゲインを大きくするように設定した場合、
入力ソースによっては計算結果が飽和してしまい音が割れたりすることがあります。入力ソースが不定な場合は、基本的にゲインを小さくする方向で IIRフィルタを使用して下さい。
また、IIR フィルタを複数段設定した場合は、各段ごとに飽和しないように注意する必要があります。
入力波形に対して、1段ずつ順番にフィルタがかかるためです(フィルタの適用順については SNDEXIirFilterTarget をご覧ください)。
特に、IIRフィルタは過去の出力データを利用するため、それらを増幅するようなパラメータを設定すると本体音量の値や SNDEX_SetMute() による消音状態にかかわらず、スピーカーから音が鳴ることがあります。

本関数の使用時には、フィルタを設定する対象 target によって制限があります。