#include <nnsys/snd.h>typedef void (*NNSSndCaptureCallback)(
void* bufferL,
void* bufferR,
u32 len,
NNSSndCaptureFormat format,
void* arg
);BOOL NNS_SndCaptureStartSampling( void* buffer_p, u32 bufSize, NNSSndCaptureFormat format, int sampleRate, int interval, NNSSndCaptureCallback callback, void* arg );
buffer_p |
サンプリングバッファのポインタです。32バイトアライメントされている必要があります。 |
bufSize |
サンプリングバッファのサイズです。interval * 64の倍数で無ければなりません。最大値は0x7fff8です。 |
format |
サンプルデータのフォーマットです。 |
sampleRate |
サンプリングレートです。 |
interval |
コールバックインターバルです。2以上の値を指定します。 |
callback |
サンプリングコールバック関数のポインタです。 |
arg |
サンプリングコールバック関数の引数となるパラメータです。 |
サンプリングを開始します。
キャプチャー機能を使ってミキサー出力をキャプチャし、コールバック関数でサンプリングしたデータを取得します。 サンプリング動作中は、16チャンネル中の2チャンネル(チャンネル1及びチャンネル3)を消費します。 チャンネル1またはチャンネル3が、シーケンスによって使用中の場合、発音中の音は強制的に停止させられます。
サンプリングを使うためには、サンプリングバッファが必要になります。
サンプリングバッファが小さいほど頻繁にコールバック関数が呼びだされます。
先頭アドレスbuffer_pは、32バイトアライメントされている必要があります。
また、バッファサイズbufSizeは、interval * 64の倍数で無ければなりません。
サンプルデータのフォーマットformatは、下記の値から選択します。
16ビットの方が、音質は良くなりますが、8ビットの時に比べて2倍の頻度で
コールバック関数が呼びだされるようになります。
表 . NNSSndCaptureFormat
| ラベル | 説明 |
|---|---|
| NNS_SND_CAPTURE_FORMAT_PCM8 | 8ビットPCM |
| NNS_SND_CAPTURE_FORMAT_PCM16 | 16ビットPCM |
サンプリングレートsampleRateは、
値が大きいほどキャプチャしたデータの音質は良くなりますが、その分頻繁にコールバック関数が
呼びだされます。
コールバックインターバルintervalは、サンプリングバッファが全体にキャプチャする間に、
何回コールバック関数が呼びだされるのかを指定します。
通常は2を指定し、半分を読みとり中に残り半分にサンプリングします。
コールバック関数callbackは、
コールバックインターバルintervalで指定した間隔で、サンプリングバッファにキャプチャされる毎に呼びだされます。
引数には、Lミキサー成分bufferLおよびRミキサー成分bufferRの
先頭アドレスのポインタと、バッファのサイズlenが入れられます。
フォーマットformatとユーザー引数argは、
NNS_SndCaptureStartSampling関数の引数に入れたものと同じものが渡されます。
引数に渡されるバッファは、キャプチャが完了した領域を指しています。
NNS_SndCaptureCreateThread関数で キャプチャースレッドを起動しているときは、コールバック関数はキャプチャースレッドから呼びだされます。 キャプチャースレッドを起動していない場合は、コールバック関数はIRQハンドラから呼びだされます。
サンプリング開始の失敗には、以下の原因が考えられます。
2005/06/27 関数失敗の原因を追加
2005/01/06 TEGに関する記述削除
2004/09/13 初版