# SND_SetupAlarm

## 構文

      #include <nitro/snd.h>

      typedef void (*SNDAlarmHandler)( void* arg );

      void SND_SetupAlarm(
              int alarmNo,
              u32 tick,
              u32 period,
              SNDAlarmHandler handler,
              void* arg );

## 引数

`alarmNo` | アラーム番号です。値の範囲は、0〜7です。
`tick` | 最初にアラームが発動するまでのチックカウントです。
`period` | 周期的にアラームを発動させる間隔です。
`handler` | アラームが発動したときに呼びだされるアラームハンドラです。 このコールバックは割り込みハンドラ内から呼び出されます。
`arg` | アラームハンドラの引数に渡される値です。

## 返り値

なし。

## 説明

サウンドアラームをセットアップします。

サウンドアラームを使うと、チャンネルの発音やキャプチャなどと正確に同期した処理が行えます。 アラームを開始するためには、`SND_StartTimer()` を使います。

アラームを開始すると、まず始めに、チックカウント`tick`後にアラームが発動します。 その後、アラーム周期`period`間隔で、アラームが発動します。 アラーム周期`period`に0を入れると、始めの１回だけアラームが発動した後、自動的に停止します。

アラームが発動すると、アラームハンドラ`handler`が呼びだされます。 アラームハンドラの引数には、`arg`が渡されます。

チックカウント`tick`及び、アラーム周期`period`の１単位は、 サウンドタイマークロックSND_TIMER_CLOCKの32分周です。 例えば、チャンネルタイマーの値が`timer`のチャンネルと完全に同期させたい場合は、 `timer`÷32を設定します。 この時、`timer`は32で割り切れなければなりません。

### 注意

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

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

## 参照

SND_StartTimer, SND_FlushCommand, SND_GetCurrentCommandTag, SND_IsFinishedCommandTag, SND_WaitForCommandProc

## 履歴

2005/06/01 コールバックが割り込みハンドラから呼び出される旨を補足
2005/02/17 ARM7コマンド処理の注意書き追加
2004/10/21 handler引数をアラームハンドラと呼ぶように統一
2004/07/20 初版