1 #ifndef _MOD_H__000314_1610 /* 2重インクルード防止の番兵 */
2 #define _MOD_H__000314_1610
5 #define MAX_PATTERNS ( 256 )
6 #define MAX_INSTRUMENTS ( 128 )
7 #define MAX_SAMPLES_IN_INSTRUMENT ( 16 )
8 #define MAX_SAMPLES ( MAX_INSTRUMENTS * MAX_SAMPLES_IN_INSTRUMENT )
9 #define MAX_CHANNELS ( 64 )
12 /*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
14 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━*/
18 /* インストゥールメントのエンベロープ制御点 */
20 U16 x ; /* エンベロープ制御点の x 座標 */
21 U16 y ; /* エンベロープ制御点の y 座標 */
28 S32 FormatType ; /* フォーマットタイプ */
30 S32 bLoopMode ; /* ループ再生モードか? TRUE / FALSE */
31 S32 bAutoGainControl ; /* 自動ゲインコントロールするか? TRUE / FALSE */
32 S32 bDone ; /* 再生終了したか? TRUE / FALSE */
34 S32 TickCount ; /* テンポ処理用 */
35 S32 nTickPerRow ; /* テンポ処理用(1 Row あたりの tick 数)*/
37 S32 nWavePerSec ; /* WAVE 出力デバイスの周波数(Hz) */
38 S32 nWavePerTick ; /* 最小割り込み単位期間当たりの生成波形数 */
39 S32 nRestWave ; /* 次の割り込みまでの残存波形データ数 */
41 S32 Row ; /* パターンデータ内スキャン位置 */
42 S32 BreakSequence ; /* 分岐先(Sequence)*/
43 S32 BreakRow ; /* 分岐先(Row)*/
44 S32 PatternDelay ; /* コマンド EEx 用遅延数(Row 単位) */
45 S32 FinePatternDelay ; /* コマンド X6x 用遅延数(Tick 単位) */
47 S32 idxSequenceData ; /* シーケンスデータ読み取り位置 */
49 S32 GlobalVolume_ ; /* グローバルボリューム(0x00_ ~ 0x40_)*/
50 S32 GlobalVolumeSlide ; /* グローバルボリューム、スライド値 */
51 S32 GlobalVolumeScale_ ; /* 全体の音量スケーリング値(0_ ~ 1_)*/
52 S32 GainControlScale_ ; /* ゲイン調整用 音量スケーリング値(0_ ~ 1_)*/
55 S32 AntiNoiseVal_L ; /* 波形の修正値、左 */
56 S32 AntiNoiseVal_R ; /* 波形の修正値、右 */
58 /* XM 形式 ヘッダー情報 その1 */
60 char aszID_Text[ 17 ]; /* XM 形式識別文字列 */
61 char aszModuleName[ 21 ]; /* データの名前(1文字余分に)*/
62 S32 ID_Byte ; /* XM 形式識別用 */
63 char aszTrackerName[ 21 ]; /* 本データを作成したトラッカー名(1文字余分に)*/
64 S32 VersionNumber ; /* データのバージョンナンバー */
67 /* XM 形式 ヘッダー情報 その2 */
69 S32 HeaderSize ; /* ヘッダー領域のサイズ */
70 S32 SongLength ; /* aPatternOrderTable の長さに換算した、曲の全長 */
71 S32 RestartPosition ; /* 曲のループ時、復帰位置 */
72 S32 NumberOfChannels ; /* 総チャンネル数 */
73 S32 NumberOfPatterns ; /* 総 Pattern 数 */
74 S32 NumberOfInstruments ; /* 総 Instrument 数 */
76 bit 0 : 0 なら AmigaPeriod モード
79 S32 DefaultTempo ; /* 1 Row 当りの Tick 数、デフォルト値 */
80 S32 DefaultBPM ; /* BPM デフォルト値 */
81 U8 aPatternOrderTable[ 256 ]; /* 演奏する Pattern の順序を表したテーブル */
86 S32 PatternHeaderLength ; /* ヘッダー領域のサイズ */
87 S32 PackingType ; /* Pattern の圧縮形式(常に 0 らしい)*/
88 S32 NumberOfRowsInPattern ; /* Pattern 内の総 Row 数 */
89 S32 PackedPatterndataSize ; /* 圧縮された状態での Pattern のデータサイズ */
92 U8 *pPatternData ; /* パターンデータへのポインター */
93 } *(apXM_PATTERN[ MAX_PATTERNS ]);
97 void *pSampleData ; /* サンプリングデータへのポインター */
98 S32 SampleLength ; /* サンプリングデータの波形要素数 */
99 S32 SampleLoopStart ; /* サンプリングのループ開始位置(波形要素単位)*/
100 S32 SampleLoopLength ; /* サンプリングのループ区間の長さ(波形要素単位)*/
101 S32 Volume ; /* サンプリングのデフォルト音量 */
102 S32 FineTune ; /* サンプリングのデフォルト FineTune 値 */
104 Bit 0-1: 00 = No loop
107 Bit 4: 0 = 8-bit sampledata
108 1 = 16-bit sampledata
110 S32 Panning ; /* サンプリングのデフォルトパン位置 */
111 S32 RelativeNoteNumber ; /* 音階の修正値 */
112 S32 Reserved ; /* 予約領域 */
113 char aszSampleName[23]; /* サンプリングの名前(1文字余分に)*/
116 S32 VoiceMode ; /* 各種フラグ */
117 } *(apXM_SAMPLE[ MAX_SAMPLES ]);
120 struct XM_INSTRUMENT {
121 S32 InstrumentSize ; /* データサイズ */
122 char aszInstrumentName[ 23 ]; /* インストゥールメントの名前(1文字余分に)*/
123 S32 InstrumentType ; /* インストゥールメントの形式(常に 0 らしい)*/
124 S32 NumberOfSamplesInInstrument ; /* このインストゥールメントに含まれるサンプリング数 */
125 S32 SampleHeaderSize ; /* サンプリングのヘッダー情報のサイズ */
126 U8 aSampleNumberForAllNotes[ 96 ]; /* 全音階別のサンプリング番号 */
127 ENVELOPE aPointsForVolumeEnvelope[ 12 ]; /* ボリュームエンベロープの制御点(最大 12)*/
128 ENVELOPE aPointsForPanningEnvelope[ 12 ]; /* パンエンベロープの制御点(最大 12)*/
129 S32 NumberOfVolumePoints ; /* ボリュームエンベロープの制御点の数 */
130 S32 NumberOfPanningPoints ; /* パンエンベロープの制御点の数 */
131 S32 VolumeSustainPoint ; /* ボリュームエンベロープのサステインポイント */
132 S32 VolumeLoopStartPoint ; /* ボリュームエンベロープのループ開始位置 */
133 S32 VolumeLoopEndPoint ; /* ボリュームエンベロープのループ終了位置 */
134 S32 PanningSustainPoint ; /* パンエンベロープのサステインポイント */
135 S32 PanningLoopStartPoint ; /* パンエンベロープのループ開始位置 */
136 S32 PanningLoopEndPoint ; /* パンエンベロープのループ終了位置 */
138 bit 0: 0 = エンベロープ OFF
146 bit 0: 0 = エンベロープ OFF
153 S32 AutoVibratoType ; /* 自動ビブラート、波形種類 */
154 S32 AutoVibratoSweep ; /* 自動ビブラート、MAX 振幅に到達するまでの Tick 数 */
155 S32 AutoVibratoDepth ; /* 自動ビブラート、MAX 振幅 */
156 S32 AutoVibratoRate ; /* 自動ビブラート、振動速度 */
157 S32 VolumeFadeout ; /* KeyOff 時のフェードアウト速度 */
158 S32 Reserved ; /* 予約領域 */
161 XM_SAMPLE *apAllNoteXM_SAMPLE[ 96 ]; /* 全音階別サンプリング情報へのポインター */
162 U8 VolumeEnvelopeTable[ 325 ]; /* 展開済みの、ボリュームエンベロープ */
163 U8 PanningEnvelopeTable[ 325 ]; /* 展開済みの、パンエンベロープ */
164 } *(apXM_INSTRUMENT[ MAX_INSTRUMENTS ]);
168 /* 現在の Row の内容(NoteDelay の遅延読み込みを考慮)*/
169 S32 idxNowPatternNote ;
171 S32 NowVolumeColumn ;
177 /* インストゥールメント情報へのポインター */
178 XM_INSTRUMENT *pPendingXM_INSTRUMENT ;
179 XM_INSTRUMENT *pPlayingXM_INSTRUMENT ;
181 /* サンプリング情報へのポインター */
182 XM_SAMPLE *pPlayingXM_SAMPLE ;
185 S32 idxLastRealNote ;
191 S32 PeriodLowLimit_ ; /* 下限 */
192 S32 PeriodHighLimit_ ; /* 上限 */
195 S32 PlayingFineTune ;
198 S32 PlayingVolume_ ; /*(0x00_ ~ 0x40_)*/
199 S32 FinalVolume_ ; /*(0x00_ ~ 0x40_)*/
200 S32 FinalVolume_L_ ; /*(0x00_ ~ 0x40_)*/
201 S32 FinalVolume_R_ ; /*(0x00_ ~ 0x40_)*/
202 S32 VolumeSlide ; /* 音量スライド値 */
203 S32 FineVolumeSlide ; /* 音量スライド値(FineVolumeSlide 用)*/
204 S32 VolumeScale_ ; /* チャンネル単位の音量スケーリング値(0_ ~ 1_)*/
207 S32 PlayingPanning_ ; /*(左:0x000_ ~ 0x0FF_:右)*/
208 S32 FinalPanning_ ; /*(左:0x000_ ~ 0x100_:右)*/
209 S32 PanningSlide ; /* パン スライド値(コマンド Pxy 用)*/
212 S32 idxVolumeEnvelopeTable ; /* ボリュームエンベロープのテーブル参照位置 */
213 S32 idxPanningEnvelopeTable ; /* パンエンベロープのテーブル参照位置 */
216 S32 VibratoType ; /* タイプ */
217 S32 VibratoPosition_ ; /* 波形位置 */
218 S32 VibratoRate ; /* 速度 */
219 S32 VibratoDepth ; /* 振幅 */
222 S32 TremoloType ; /* タイプ */
223 S32 TremoloPosition_ ; /* 波形位置 */
224 S32 TremoloRate ; /* 速度 */
225 S32 TremoloDepth ; /* 振幅 */
228 S32 PortamentoInc ; /* period 加算量(Portamento 用)*/
229 S32 TonePortamentoInc ; /* period 加算量(Tone-Portamento 用)*/
230 S32 TonePortamentoDst_ ; /* period 目標値(Tone-Portamento 用)*/
231 S32 FinePortamentoInc ; /* period 加算量(Fine-Portamento 用)*/
232 S32 ExtraFinePortamentoInc ; /* period 加算量(Extra Fine-Portamento 用)*/
235 S32 ArpeggioPeriod_[2] ;
236 S32 idxArpeggio ; /* 0 -> 1 -> 2 繰り返し */
238 /* Tremor(コマンド Txy)関係 */
239 S32 TremorCount ; /* カウンター */
240 S32 TremorOnTime ; /* KeyOn 期間(tick 数)*/
241 S32 TremorOffTime ; /* KeyOff 期間(tick 数)*/
242 S32 bTremorMute ; /* ミュート状態か? TRUE / FALSE */
244 /* Multi retrig(コマンド Rxy)関係 */
245 S32 MultiRetrigCount ; /* カウンター */
246 S32 MultiRetrigInterval ; /* 間隔 */
247 S32 MultiRetrigVolumeChange ; /* 音量の変化のさせ方 */
250 S32 PanbrelloType ; /* タイプ */
251 S32 PanbrelloPosition ; /* 波形位置 */
252 S32 PanbrelloRate ; /* 速度 */
253 S32 PanbrelloDepth ; /* 振幅 */
255 /* Pattern loop(コマンド E6x)関係 */
256 S32 PatternLoopCount ; /* ループ回数カウント用 */
257 S32 PatternLoopRow ; /* ループポイント(Row)*/
259 /* KEYOFF フェードアウト関係 */
260 S32 bFadeOut ; /* フェードアウト中? TRUE / FALSE */
261 S32 FadeOutVolume_1_15_16 ; /* フェードアウト用、音量倍率(固定少数 16 bit)*/
263 /* Auto-Vibrato 関係 */
264 S32 AutoVibratoPosition ; /* 波形位置 */
265 S32 AutoVibratoDepth_ ; /* 振幅 */
268 S32 bSurround ; /* Surround は有効か? TRUE / FALSE */
271 U32 SamplePosition_ ; /* サンプリングの再生位置 */
272 U32 SampleRate_ ; /* サンプリングの再生レート */
273 U32 SampleOffset ; /* コマンド 9xx で指定したオフセット値(最後に指定した値)*/
274 U32 SampleHighOffset ; /* コマンド XAx で指定したオフセット値(最後に指定した値)*/
275 S32 bGrissando ; /* Grissando は有効か? TRUE / FALSE */
276 S32 VolumeColumnContinueValue ; /* VolumeColumn 専用、特殊な continue 再現用 */
279 XM_SAMPLE *pLastPlayingXM_SAMPLE ; /* 前回のサンプリング */
280 U32 LastSamplePosition_ ; /* 前回のサンプリングの再生位置 */
281 S32 LastWaveVal_L ; /* 波形の最終値、左 */
282 S32 LastWaveVal_R ; /* 波形の最終値、右 */
283 S32 LastSampleVolume_L_ ; /* 音量の最終値、左 */
284 S32 LastSampleVolume_R_ ; /* 音量の最終値、右 */
285 } aCHANSTAT[ MAX_CHANNELS ];
286 void* Instance;// NaCl インスタンス
292 typedef MOD::XM_ID XM_ID ;
293 typedef MOD::XM_HEADER XM_HEADER ;
294 typedef MOD::XM_PATTERN XM_PATTERN ;
295 typedef MOD::XM_SAMPLE XM_SAMPLE ;
296 typedef MOD::XM_INSTRUMENT XM_INSTRUMENT ;
297 typedef MOD::CHANSTAT CHANSTAT ;
299 /*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
304 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━*/
306 MOD *pMOD /* this ポインター */
307 ,void *pMusDat_ /* メモリ上にファイルを読み込み、そのポインターをここに指定 */
308 ,S32 lMusDat /* データサイズ */
312 /*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
317 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━*/
318 S32 MOD__ReleaseSong(
319 MOD *pMOD /* this ポインター */
323 /*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
328 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━*/
330 MOD *pMOD /* this ポインター */
331 ,S32 Volume /* 音量 0 ~ 256(それ以上にも設定可能)*/
335 /*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
340 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━*/
341 S32 MOD__Set_nWavePerSec(
342 MOD *pMOD /* this ポインター */
343 ,S32 nWavePerSec /* WAVE 出力デバイスの周波数(Hz) */
347 /*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
348 ▼ ループ再生モード / 非ループ再生モード の指定
352 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━*/
353 S32 MOD__Set_bLoopMode(
354 MOD *pMOD /* this ポインター */
355 ,S32 bLoopMode /* ループ再生モードか? TRUE / FALSE */
359 /*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
360 ▼ 自動ゲインコントロールするかどうか の指定
364 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━*/
365 S32 MOD__Set_bAutoGainControl(
366 MOD *pMOD /* this ポインター */
367 ,S32 bAutoGainControl /* 自動ゲインコントロールするか? TRUE / FALSE */
371 /*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
372 ▼ 再生を初期化(内部パラメーターを初期化し、先頭から再生し直す)
376 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━*/
378 MOD *pMOD /* this ポインター */
382 /*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
387 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━*/
389 MOD *pMOD /* this ポインター */
390 ,U32 *pWaveOutPut /* 波形出力先(L R をひとまとめにして、U32 単位で出力する)*/
391 ,S32 nWaveOutPut /* 出力波形数 */
395 /*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
400 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━*/
402 MOD *p /* this ポインター */
406 /*━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
411 ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━*/
412 MOD *MOD__Create(void* Instance /* Naclインスタンス */