# NNS_SndArcInitOnMemory

## 構文

      #include <nnsys/snd.h>

      void NNS_SndArcInitOnMemory( NNSSndArc* arc, void* data );

## 引数

`arc` | サウンドアーカイブを管理する NNSSndArc構造体のポインタです。
`data` | サウンドアーカイブデータのポインタです。32バイトアライメントされている必要があります。

## 返り値

なし。

## 説明

メモリ上のサウンドアーカイブデータを使って、サウンドアーカイブ構造体を初期化します。 サウンドアーカイブ構造体は静的に確保することを推奨します。 動的に確保する場合は、後述の注意点に気をつけてください。

サウンドアーカイブの初期化は、この関数か `NNS_SndArcInit`関数で行います。 この関数でサウンドアーカイブを初期化すると、サウンドデータのメモリ管理やロードが不要になります。 また、ファイルシステムが有効である必要はありません。 ただし、より多くのメモリが必要となります。

初期化したサウンドアーカイブは、自動的にカレントサウンドアーカイブに設定されます。 カレントサウンドアーカイブを変更するには、 `NNS_SndArcSetCurrent`関数を使います。

### 注意

サウンドアーカイブ構造体は、サウンドアーカイブが不要になった時点で破棄することができます。 ただし、破棄するサウンドアーカイブ構造体のポインタが、 カレントサウンドアーカイブとして、セットされている可能性について留意してください。

また、サウンドアーカイブを破棄し、 同じアドレスに異なるサウンドアーカイブデータを展開する場合、 前のサウンドアーカイブを破棄する前に、

    SND_InvalidateSeqData(data, (u8*)data + dataSize);
    SND_InvalidateBankData(data, (u8*)data + dataSize);
    SND_InvalidateWaveData(data, (u8*)data + dataSize);
    u32 tag = SND_GetCurrentCommandTag();
    (void)SND_FlushCommand( SND_COMMAND_BLOCK );
    SND_WaitForCommandProc(tag);

のようにし、各データを無効化しておくようにしてください。

## 参照

NNS_SndArcInit, NNS_SndArcSetCurrent

## 履歴

2009/02/19 異なるサウンドアーカイブを同じアドレスにロードして使用する場合の注意書きを追加
2005/10/18 アライメント値の誤記修正
2004/09/06 NNS_SndArc構造体の動的確保に関する注意書き追加
2004/06/01 初版