# SNDInstData

## 定義

      #include <nitro/snd.h>

      typedef struct SNDInstData
      {
          u8 type;
          u8 padding_;

          struct SNDInstParam {
              u16 wave[2];
              u8 original_key;
              u8 attack;
              u8 decay;
              u8 sustain;
              u8 release;
              u8 pan;
          } param;
      } SNDInstData;

## 要素

`type` | インストタイプです。
`wave` | 波形データ情報配列です。
`original_key` | オリジナルキーです。60が中央のドです。
`attack` | エンベロープのアタックです。値の範囲は0〜127で、値が大きいほど、速く立ち上がります。
`decay` | エンベロープのディケイです。値の範囲は0〜127で、値が大きいほど、速く減衰します。
`sustain` | エンベロープのサステインです。値の範囲は0〜127で、値が大きいほど、高いゲインを維持します。
`release` | エンベロープのリリースです。値の範囲は0〜127で、値が大きいほど、速く減衰します。 （ただし値がSND_BANK_DISABLE_RELEASE(=255)の時は特別に、ノートオフしてもリリースしないように動作します。）
`pan` | パンです。値の範囲は、0(左)〜64(中央)〜127(右)です。

## 説明

インストデータ構造体です。バンクデータ中の各インスト毎のパラメータを保持しています。

この構造体は、 `SND_ReadInstData()` で取得し、 `SND_WriteInstData()` で 更新することができます。

インストタイプ`type`は以下の値を取ります。

表 . SNDInstType

ラベル | 説明
--- | ---
SND_INST_PCM | PCM波形データ
SND_INST_PSG | PSG矩形波
SND_INST_NOISE | ノイズ
SND_INST_DIRECTPCM | PCM波形データ（直接アドレス指定）
SND_INST_NULL | 空のインスト（発音しません）

波形情報配列`wave`には、波形データの情報などが入りますが、 インストタイプ`type`毎に異なった意味を持ちます。

表 . 波形情報配列

インストタイプ | wave[0] | wave[1]
--- | --- | ---
SND_INST_PCM | 波形アーカイブ中のインデックス番号 | バンク中での波形アーカイブ番号
SND_INST_PSG | デューティ比 | （未使用）
SND_INST_NOISE | （未使用） | （未使用）
SND_INST_DIRECTPCM | `SNDWaveData` 構造体のアドレスの下位16ビット | `SNDWaveData` 構造体のアドレスの上位16ビット
SND_INST_NULL | （未使用） | （未使用）

## 参照

SND_ReadInstData, SND_WriteInstData, SNDWaveData

## 履歴

2005/05/10 リリース255の時の動作に関する説明追加
2005/03/17 インストタイプSND_INST_NULLの追加
2005/01/19 SNDWaveDataへのリンク追加
2004/10/21 必要なインクルードファイルの誤り訂正
2004/07/20 初版