NNS_SndCaptureStartSampling

構文

#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ハンドラから呼びだされます。

サンプリング開始の失敗には、以下の原因が考えられます。

  • キャプチャがサンプリング以外の用途で使用中
  • チャンネル1またはチャンネル3が、サンプリングやシーケンスによる発音以外の用途で使用中

参照

NNS_SndCaptureCreateThread

履歴

2005/06/27 関数失敗の原因を追加
2005/01/06 TEGに関する記述削除
2004/09/13 初版