# SND_SetupCapture

## 構文

      #include <nitro/snd.h>

      void SND_SetupCapture(
              SNDCapture capture,
              SNDCaptureFormat format,
              void* buffer_p,
              u32 length,
              BOOL loopFlag,
              SNDCaptureIn in,
              SNDCaptureOut out );

## 引数

`capture` | キャプチャ識別子です。
`format` | キャプチャデータのフォーマットです。
`buffer_p` | キャプチャバッファの先頭アドレスです。４バイトアライメントされている必要があります。
`length` | キャプチャバッファ長です。ワード単位で、値の範囲は、0〜0xffffです。
`loopFlag` | ループフラグです。
`in` | キャプチャ入力です。
`out` | キャプチャ出力です。

## 返り値

なし。

## 説明

キャプチャのセットアップを行います。

キャプチャの周波数は、対応するチャンネルのタイマーで設定します。 対応するチャンネルは、`SND_LockChannel()` で ロックした上、 `SND_SetChannelTimer()` などで、 タイマーをセットします。 キャプチャを開始するためには、 `SND_StartTimer()` を使います。

キャプチャ識別子`capture`は、以下の値から選択します。

表 . SNDCapture

ラベル | 説明
--- | ---
SND_CAPTURE_0 | キャプチャー0です。Ｌミキサーまたはチャンネル0の出力をキャプチャします。タイマーはチャンネル1と共通です。
SND_CAPTURE_1 | キャプチャー1です。Ｒミキサーまたはチャンネル2の出力をキャプチャします。タイマーはチャンネル3と共通です。

キャプチャデータのフォーマット`format`は、下記の値から選択します。

表 . SNDCaptureFormat

ラベル | 説明
--- | ---
SND_CAPTURE_FORMAT_PCM8 | 8ビットPCM
SND_CAPTURE_FORMAT_PCM16 | 16ビットPCM

キャプチャバッファの先頭アドレス`buffer_p`は、４バイトアライメントされている必要があります。 キャプチャバッファ長`length`は、ワード単位で指定します。

ループフラグ`loopFlag`をTRUEにすると、 キャプチャバッファの終端までキャプチャすると、バッファの先頭からキャプチャを続けます。 FALSEにすると、キャプチャバッファの終端までキャプチャすると、自動的にキャプチャは停止します。

キャプチャ入力`in`は、下記の値から選択します。

表 . SNDCaptureIn

ラベル | 説明
--- | ---
SND_CAPTURE_IN_MIXER | ＬミキサーまたはＲミキサーの出力をキャプチャします。
SND_CAPTURE_IN_CHANNEL | チャンネル加算器の出力をキャプチャします。

キャプチャ出力`out`は、下記の値から選択します。

表 . SNDCaptureOut

ラベル | 説明
--- | ---
SND_CAPTURE_OUT_NORMAL | チャンネル1または3の出力を、通常出力に送ります。
SND_CAPTURE_OUT_CHANNEL_MIX | チャンネル1または3の出力を、それぞれのチャンネル加算器へ送ります。（通常出力にも送られます。）

### 注意

チャンネル加算器の出力をキャプチャするロジックには不具合があり、 正常にキャプチャできません。詳しくは、「NITROプログラミングマニュアル」をご覧下さい。

この関数は、ARM7コマンド予約関数です。 この関数を呼びだした後、 `SND_FlushCommand()` で コマンドを発行して始めて、処理が行われます。

また、処理の完了と同期を取る必要がある場合は、 まず、この関数呼び出しの直後に、 `SND_GetCurrentCommandTag()` で、コマンドタグを取得しておきます。 そしてコマンド発行後に、取得したコマンドタグを使って `SND_IsFinishedCommandTag()` または、 `SND_WaitForCommandProc()` を呼びだして、 処理の完了をチェックしたり、待ったりします。

## 参照

SND_LockChannel, SND_SetChannelTimer, SND_StartTimer, SND_FlushCommand, SND_GetCurrentCommandTag, SND_IsFinishedCommandTag, SND_WaitForCommandProc

## 履歴

2005/06/13 NITROプログラミングマニュアル改訂に伴う修正
2005/02/17 ARM7コマンド処理の注意書き追加
2005/01/06 TEGに関する記述削除
2004/07/20 初版