#author("2022-11-06T21:48:14+09:00;2022-11-06T21:46:49+09:00","default:gstaff","gstaff") #author("2024-08-31T18:22:07+09:00","default:gstaff","gstaff") &size(18){''目次''}; [[主な特長>MIDI機能/主な特長]]~ [[使用前の準備>MIDI機能/使用前の準備]]~ [[GIMICをMIDIキーボードや他のMIDI音源と接続する>MIDI機能/GIMICをMIDIキーボードや他のMIDI音源と接続する]]~ [[基本操作>MIDI機能/基本操作]]~ [[演奏する>MIDI機能/演奏する]]~ [[音色を作る>MIDI機能/音色を作る]]~ [[アルペジエーター>MIDI機能/アルペジエーター]]~ [[全体に関する機能を設定する>MIDI機能/全体に関する機能を設定する]]~ [[スタンダードMIDIファイルを再生する>MIDI機能/スタンダードMIDIファイルを再生する]]~ [[MIDIインプリメンテーション>MIDI機能/MIDIインプリメンテーション]]~ ---- ''ファイルフォーマット''~ ---- [[トラブルシューティング>MIDI機能/トラブルシューティング]]~ [[変更履歴>MIDI機能/変更履歴]] *gtb(GIMIC Timbre Bank)ファイルフォーマット概要 [#q8dffbfb] *gtb(GIMIC Timbre Bank)ファイルフォーマット概要 [#r0b02412] 多バイト数値データは全てリトルエンディアン **全体構造 [#n647b6f3] **全体構造 [#bdf96a41] |Offset|Size(byte)|Field|Description|h |0x00|8|sig|ファイル識別用の固定データ"GMCTIMB"+ 0x00 | |0x08|4|chunk_start_pos|最初のチャンクデータのファイル内位置| |0x0c|4|mb_fw_version|作成されたマザーボードのファームウェアバージョン| |0x10|2|mb_type_tablerev|マザーボードID定義のバージョン(使用せず)| |0x12|2|soundmodule_tablerev|モジュールID定義のバージョン(使用せず)| |0x14|2|mb_type_id|データが作成されたマザーボード種別(使用せず)| |0x16|2|soundmodule_id|データが作成時のモジュール種別(使用せず)| |0x18|8|mb_serial_no|マザーボードシリアル番号(使用せず)| |chunk_start_pos|可変|chunkデータ|チャンクデータ| typedef struct { char sig[8]; // "GMCTIMB" gimic timble parameter uint32_t chunk_start_pos; // チャンクデータのファイル内開始位置 uint8_t mb_fw_version[4]; // MAJOR, MINOR, YEAR, MONTH uint16_t mb_type_tablerev; // GIMIC_MOTHERBOARD_ID_TABLEREV uint16_t soundmodule_tablerev; // GIMIC_SOUNDMODULE_TABLEREV uint16_t mb_type_id; // GIMIC_MOTHERBOARD_ID_MB uint16_t soundmodule_id; // データ作成時のモジュール char mb_serial_no[8]; // MBシリアル番号 char sig[8]; // "GMCTIMB" gimic timble parameter uint32_t chunk_start_pos; // チャンクデータのファイル内開始位置 uint8_t mb_fw_version[4]; // MAJOR, MINOR, YEAR, MONTH uint16_t mb_type_tablerev; // GIMIC_MOTHERBOARD_ID_TABLEREV uint16_t soundmodule_tablerev; // GIMIC_SOUNDMODULE_TABLEREV uint16_t mb_type_id; // GIMIC_MOTHERBOARD_ID_MB{1,2PRO,2STD,2LT} uint16_t soundmodule_id; // データ作成時のモジュール char mb_serial_no[8]; // MBシリアル番号 } PatchFileHeader; **rptcチャンク [#nc4e3e7d] **rptcチャンク [#c56d8ec5] |Offset|Size(byte)|Field|Description|h |0x00|4|chunk_type|チャンクタイプ"rptc"| |0x04|4|chunk_size|チャンクデータのデータサイズ(byte) =128| |0x08|4|chunk_crc|チャンクデータのチェックサム(CRC32)| |0x0c|128|patch_data|Patchデータブロック| **rbnkチャンク [#k835e7bc] **rbnkチャンク [#caed64fc] |Offset|Size(byte)|Field|Description|h |0x00|4|chunk_type|チャンクタイプ"rbnk"| |0x04|4|chunk_size|チャンクデータのデータサイズ(byte) =128_N| |0x08|4|chunk_crc|チャンクデータのチェックサム(CRC32) ...FW7.3では使用せず| |0x0c|128|patch_data|Patchデータブロック 0| |0x8c|128|patch_data|Patchデータブロック 1| |...|||| |0x0c+128_(N-1)|128|patch_data|Patchデータブロック N-1| typedef struct { uint32_t chunk_type; ///< データのタイプ uint32_t chunk_size; ///< データの中身のバイト数 uint32_t chunk_crc; ///< データの中身のCRC32 uint8_t chunk_data[]; ///< データの中身 uint32_t chunk_type; ///< データのタイプ uint32_t chunk_size; ///< データの中身のバイト数 uint32_t chunk_crc; ///< データの中身のCRC32 uint8_t chunk_data[]; ///< データの中身 } PatchFileChunk; **Patchデータブロック(PatchTypeOPM_FM) [#dd82a887] **Patchデータブロック(PatchTypeOPM_FM/PatchTypeOPZ_FM) [#w38bb2b3] |Offset|Size(byte)|Field|Description|h |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|12|slot0|スロット0(OPM_FM_SlotPatch)| |0x50|12|slot1|スロット1(OPM_FM_SlotPatch)| |0x5c|12|slot2|スロット2(OPM_FM_SlotPatch)| |0x68|12|slot3|スロット3(OPM_FM_SlotPatch)| |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|12|slot0|スロット0(OPM_FM_SlotPatch)| |0x50|12|slot1|スロット1(OPM_FM_SlotPatch)| |0x5c|12|slot2|スロット2(OPM_FM_SlotPatch)| |0x68|12|slot3|スロット3(OPM_FM_SlotPatch)| |0x74|1|fl_con|未使用(2bit), フィードバックレベル(3bit), アルゴリズム(3bit)| |0x75|1|slotMask|未使用(4bit), スロットマスク op.4,2,3,1 (4bit)| |0x75|1|slotMask|未使用(4bit), スロットマスク op.4,2,3,1(OPM) op.4,3,2,1(OPZ) (4bit)| |0x76|1|ne_nfrq|ne=1ならvoice7強制でノイズ有効(1bit), 未使用(2bit), ノイズ周波数(5bit)| |0x77|1|fastrelease0|非0ならキーオン前にリリースレートを最速にして強制消音| |0x78|1|fastrelease1|非0ならキーオン前にリリースレートを最速にして強制消音| |0x79|1|fastrelease2|非0ならキーオン前にリリースレートを最速にして強制消音| |0x7a|1|fastrelease3|非0ならキーオン前にリリースレートを最速にして強制消音| |0x7b|5|reserved|未使用| |0x77|1|fastrelease_oscw_fine0|非0ならキーオン前にリリースレートを最速にして強制消音(1bit), op波形(3bit), fine(4bit)| |0x78|1|fastrelease_oscw_fine1|非0ならキーオン前にリリースレートを最速にして強制消音(1bit), op波形(3bit), fine(4bit)| |0x79|1|fastrelease_oscw_fine2|非0ならキーオン前にリリースレートを最速にして強制消音(1bit), op波形(3bit), fine(4bit)| |0x7a|1|fastrelease_oscw_fine3|非0ならキーオン前にリリースレートを最速にして強制消音(1bit), op波形(3bit), fine(4bit)| |0x7b|1|egs_fixrg0|egs(2bit), 未使用(3bit), fixrg(3bit)| |0x7c|1|egs_fixrg1|egs(2bit), 未使用(3bit), fixrg(3bit)| |0x7d|1|egs_fixrg2|egs(2bit), 未使用(3bit), fixrg(3bit)| |0x7e|1|egs_fixrg3|egs(2bit), 未使用(3bit), fixrg(3bit)| |0x7f|1|reserved|未使用| **OPM_FM_SlotPatch [#w89f2afd] **OPM_FM_SlotPatch [#h424cb1f] |Offset|Size(byte)|Field|Description|h |0x00|7|common|スロット共通データ(SlotPatchCommon)| |0x00|7|common|スロット共通データ(SlotPatchCommon)| |0x07|1|dt1_mul|未使用(1bit), DT1(3bit), MUL(4bit)| |0x08|1|ks_ar|KS(2bit), 未使用(1bit), AR(5bit)| |0x09|1|ame_d1r|AME(1bit), 未使用(2bit), D1R(5bit)| |0x08|1|ks_fix_ar|KS(2bit), FIX(1bit), AR(5bit)| |0x09|1|ame_veloar_d1r|AME(1bit), VeloAR(2bit), D1R(5bit)| |0x0a|1|dt2_d2r|DT2(2bit), 未使用(1bit), D2R(5bit)| |0x0b|1|d1l_rr|D1L(4bit), RR(4bit)| typedef struct OPM_FM_SlotPatch { SlotPatchCommon common; uint8_t dt1_mul; uint8_t ks_ar; uint8_t ame_d1r; uint8_t ks_fix_ar; uint8_t ame_veloar_d1r; uint8_t dt2_d2r; uint8_t d1l_rr; } OPM_FM_SlotPatch; typedef struct OPM_FM_Patch { PatchCommon common_param; TonedSynthCommon tone_param; OPM_FM_SlotPatch slot[4]; uint8_t fl_con; uint8_t slot_mask; uint8_t ne_nfrq; ///< ne=trueの時はvoice7で発音する uint8_t fastrelease[4]; uint8_t reserved[5]; uint8_t fastrelease_oscw_fine[4]; // 1.3.4 uint8_t egs_fixrg[4]; // 2.(3).3 uint8_t reserved; } OPM_FM_Patch; **Patchデータブロック(PatchTypeOPN_FM) [#na526adf] **Patchデータブロック(PatchTypeOPN_FM) [#e820583e] |Offset|Size(byte)|Field|Description|h |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|12|slot0|スロット0(OPN_FM_SlotPatch)| |0x50|12|slot1|スロット1(OPN_FM_SlotPatch)| |0x5c|12|slot2|スロット2(OPN_FM_SlotPatch)| |0x68|12|slot3|スロット3(OPN_FM_SlotPatch)| |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|12|slot0|スロット0(OPN_FM_SlotPatch)| |0x50|12|slot1|スロット1(OPN_FM_SlotPatch)| |0x5c|12|slot2|スロット2(OPN_FM_SlotPatch)| |0x68|12|slot3|スロット3(OPN_FM_SlotPatch)| |0x74|1|fb_con|未使用(2bit), フィードバックレベル(3bit), アルゴリズム(3bit)| |0x75|1|fr_slotmask|非0ならキーオン前にリリースレートを最速にして強制消音 op.4,3,2,1(4bit), スロットマスク op.4,3,2,1(4bit)| |0x76|2|ch3_slot_lfo_env_en|Pitch LFO on op.4,3,2,1(4bit), Pitch EG on op4.3.2.1(4bit)| |0x78|2|ch3_fix_coarse_fine0|op1 Freq Fix(1bit), Coarse Tune(8bit), Fine Tune(6bit)| |0x7a|2|ch3_fix_coarse_fine1|op2 Freq Fix(1bit), Coarse Tune(8bit), Fine Tune(6bit)| |0x7c|2|ch3_fix_coarse_fine2|op3 Freq Fix(1bit), Coarse Tune(8bit), Fine Tune(6bit)| |0x7e|2|ch3_fix_coarse_fine3|op4 Freq Fix(1bit), Coarse Tune(8bit), Fine Tune(6bit)| **OPN_FM_SlotPatch [#x77bf2eb] **OPN_FM_SlotPatch [#ae23af4e] |Offset|Size(byte)|Field|Description|h |0x00|7|common|スロット共通データ(SlotPatchCommon)| |0x00|7|common|スロット共通データ(SlotPatchCommon)| |0x07|1|dt_mul|未使用(1bit), DT(3bit), MUL(4bit)| |0x08|1|ks_ar|KS(2bit), 未使用(1bit), AR(5bit)| |0x09|1|ame_ssgege_dr|AMON(1bit), SSG-EG_Enable(1bit), 未使用(1bit), DR(5bit)| |0x0a|1|ssgegn_sr|SSG-EG Wave(3bit), SR(5bit)| |0x0b|1|sl_rr|SL(4bit), RR(4bit)| typedef struct OPN_FM_SlotPatch { SlotPatchCommon common; uint8_t dt_mul; uint8_t ks_ar; uint8_t ame_ssgege_dr; uint8_t ssgegn_sr; uint8_t sl_rr; } OPN_FM_SlotPatch; typedef struct OPN_FM_Patch { PatchCommon common_param; TonedSynthCommon tone_param; OPN_FM_SlotPatch slot[4]; uint8_t fb_con; uint8_t fr_slot_mask; // ch3専用パラメータ uint16_t ch3_slot_lfo_env_en; uint16_t ch3_fix_coarse_fine[4]; } OPN_FM_Patch; **Patchデータブロック(PatchTypeSSG_PSG) [#s5344fe6] **Patchデータブロック(PatchTypeSSG_PSG) [#q33bd697] |Offset|Size(byte)|Field|Description|h |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|7|slot|スロット情報(SlotPatchCommon)| |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|7|slot|スロット情報(SlotPatchCommon)| |0x4b|2|dummy|未使用| |0x4d|1|hwenv_wave|未使用(5bit), エンベロープ選択(3bit)| |0x4e|2|reserved|未使用| |0x50|8|param_tone|SsgParam(Tone)| |0x58|8|param_noise|SsgParam(Noise)| |0x60|8|param_env|SsgParam(Env)| |0x50|8|param_tone|SsgParam(Tone)| |0x58|8|param_noise|SsgParam(Noise)| |0x60|8|param_env|SsgParam(Env)| |0x68|24|reserved2|未使用| **PatchTypeSSG_PSG [#ma9d2b4a] **SSG_PSG_SlotPatch [#xd63a84a] |Offset|Size(byte)|Field|Description|h |0x00|1|enable|0以外だとOn| |0x01|1|coarse_tune|周波数比またはノートナンバー Noiseでは不使用| |0x02|1|fine_tune|| |0x02|1|fine_tune| |0x03|1|fix_freq|0以外だと固定の周波数を書き込む| |0x04|1|start_time|1以上だとキーオン前に指定時間(ms)待つ| |0x05|1|gate_time|0以外だとキーオン後に指定時間(ms)で自動的にキーオフする| |0x06|1|invert_freq|周波数を反転させる| |0x07|1|enable_pitchmod|未使用(5bit), SWEnvのピッチへの入力有効(1bit), SWLFOのピッチへの入力有効(1bit)| typedef struct SsgParam { uint8_t enable; ///< 0以外だとOn uint8_t coarse_tune; ///< 周波数比またはノートナンバー Noiseでは不使用 uint8_t fine_tune; ///< uint8_t fix_freq; ///< 0以外だと固定の周波数を書き込む uint8_t start_time; ///< 1以上だとキーオン前に指定時間(ms)待つ uint8_t gate_time; ///< 0以外だとキーオン後に指定時間(ms)で自動的にキーオフする uint8_t invert_freq; ///< 周波数を反転させる uint8_t enable_pitchmod; ///< LSBがSWLFO,次のビットがSWEnvのピッチへの入力有効 } SsgParam; typedef struct SSG_PSG_Patch { PatchCommon common_param; TonedSynthCommon tone_param; SlotPatchCommon slot; uint8_t dummy; uint8_t hwenv_wave; uint8_t reserved[2]; SsgParam param[3]; // 0:Tone, 1:Noise, 2:Env uint8_t reserved2[24]; } SSG_PSG_Patch; **Patchデータブロック(PatchTypeOPN_RHYTHM) [#p35259d6] **Patchデータブロック(PatchTypeOPN_RHYTHM) [#mfc983ca] |Offset|Size(byte)|Field|Description|h |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|7|slot|スロット情報(SlotPatchCommon)| |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|7|slot|スロット情報(SlotPatchCommon)| |0x4b|1|dummy|未使用| |0x4c|8|voice0|OPN_RHYTHM_VoiceInfo| |0x54|8|voice1|OPN_RHYTHM_VoiceInfo| |0x5c|8|voice2|OPN_RHYTHM_VoiceInfo| |0x64|8|voice3|OPN_RHYTHM_VoiceInfo| |0x6c|8|voice4|OPN_RHYTHM_VoiceInfo| |0x64|8|voice5|OPN_RHYTHM_VoiceInfo| |0x4c|8|voice0|OPN_RHYTHM_VoiceInfo| |0x54|8|voice1|OPN_RHYTHM_VoiceInfo| |0x5c|8|voice2|OPN_RHYTHM_VoiceInfo| |0x64|8|voice3|OPN_RHYTHM_VoiceInfo| |0x6c|8|voice4|OPN_RHYTHM_VoiceInfo| |0x64|8|voice5|OPN_RHYTHM_VoiceInfo| |0x7c|4|reserved|未使用| **OPN_RHYTHM_VoiceInfo [#rfd0b8e9] **OPN_RHYTHM_VoiceInfo [#f21af69a] |Offset|Size(byte)|Field|Description|h |0x00|1|vol|音量| |0x01|1|pan|パン| |0x02|1|oneshot|on時にノートオフでキーオフしない| |0x03|1|attackTime|アタック時間| |0x04|1|attackSlope|アタック時の音量カーブ| |0x05|1|decayRate|減衰量| |0x06|1|decaySlope|減衰時の音量カーブ| |0x07|1|reserved|未使用| typedef struct OPN_RHYTHM_VoiceInfo { int8_t vol; int8_t pan; uint8_t oneshot; uint8_t attackTime; int8_t attackSlope; uint8_t decayRate; int8_t decaySlope; uint8_t reserved; } OPN_RHYTHM_VoiceInfo; typedef struct OPN_RHYTHM_Patch { PatchCommon common_param; TonedSynthCommon tone_param; SlotPatchCommon slot; uint8_t dummy; OPN_RHYTHM_VoiceInfo voice[6]; uint8_t reserved[4]; } OPN_RHYTHM_Patch; **Patchデータブロック(PatchTypeOPNA_ADPCM) [#e24378e3] **Patchデータブロック(PatchTypeOPNA_ADPCM) [#y81fa8e1] |Offset|Size(byte)|Field|Description|h |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|7|slot|スロット情報(SlotPatchCommon)| |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|7|slot|スロット情報(SlotPatchCommon)| |0x4b|1|dummy|未使用| |0x4c|8|samples0|OPNA_ADPCM_SampleInfo| |0x54|8|samples1|OPNA_ADPCM_SampleInfo| |0x5c|8|samples2|OPNA_ADPCM_SampleInfo| |0x64|8|samples3|OPNA_ADPCM_SampleInfo| |0x6c|8|samples4|OPNA_ADPCM_SampleInfo| |0x64|8|samples5|OPNA_ADPCM_SampleInfo| |0x4c|8|samples0|OPNA_ADPCM_SampleInfo| |0x54|8|samples1|OPNA_ADPCM_SampleInfo| |0x5c|8|samples2|OPNA_ADPCM_SampleInfo| |0x64|8|samples3|OPNA_ADPCM_SampleInfo| |0x6c|8|samples4|OPNA_ADPCM_SampleInfo| |0x64|8|samples5|OPNA_ADPCM_SampleInfo| |0x7c|4|reserved|未使用| **OPNA_ADPCM_SampleInfo [#n3e48824] **OPNA_ADPCM_SampleInfo [#p8feb43c] |Offset|Size(byte)|Field|Description|h |0x00|1|loop_sampleNo|ループ有効(1bit), サンプル番号(7bit)| |0x01|1|oneshot_baseKey|ノートオフ時に消音しない(1bit), 基準ノート番号(7bit)| |0x02|1|lowestKey|発音範囲(最下キー番号)| |0x03|1|highestKey|発音範囲(最高キー番号)| |0x04|2|fsample|サンプリングレート| |0x06|1|vol|音量| |0x07|1|pan|パン| typedef struct OPNA_ADPCM_SampleInfo { uint8_t loop_sampleNo; uint8_t oneshot_baseKey; uint8_t lowestKey; uint8_t highestKey; uint16_t fsample; int8_t vol; int8_t pan; } OPNA_ADPCM_SampleInfo; typedef struct OPNA_ADPCM_Patch { PatchCommon common_param; TonedSynthCommon tone_param; SlotPatchCommon slot; uint8_t reserved; OPNA_ADPCM_SampleInfo samples[6]; uint8_t reserved2[4]; } OPNA_ADPCM_Patch; **Patchデータブロック(PatchTypeOPL3_FM) [#c09910bf] **Patchデータブロック(PatchTypeOPL3_FM) [#y78c6dbb] |Offset|Size(byte)|Field|Description|h |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|12|slot0|スロット0(OPL3_FM_SlotPatch)| |0x50|12|slot1|スロット1(OPL3_FM_SlotPatch)| |0x5c|12|slot2|スロット2(OPL3_FM_SlotPatch)| |0x68|12|slot3|スロット3(OPL3_FM_SlotPatch)| |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|12|slot0|スロット0(OPL3_FM_SlotPatch)| |0x50|12|slot1|スロット1(OPL3_FM_SlotPatch)| |0x5c|12|slot2|スロット2(OPL3_FM_SlotPatch)| |0x68|12|slot3|スロット3(OPL3_FM_SlotPatch)| |0x74|1|fb_cnt1|未使用(4bit), フィードバックレベル(3bit), アルゴリズム上位ビット(1bit)| |0x75|1|fb_cnt2|未使用(4bit), 4opモード用アルゴリズム下位ビット(1bit)| |0x76|1|fastrelease0|op1 非0ならキーオン前にリリースレートを最速にして強制消音| |0x77|1|fastrelease1|op2 非0ならキーオン前にリリースレートを最速にして強制消音| |0x78|1|fastrelease2|op3 非0ならキーオン前にリリースレートを最速にして強制消音| |0x79|1|fastrelease3|op4 非0ならキーオン前にリリースレートを最速にして強制消音| |0x7a|6|reserved|未使用| **OPL3_FM_SlotPatch [#fd00e481] **OPL3_FM_SlotPatch [#jdd80c76] |Offset|Size(byte)|Field|Description|h |0x00|7|common|SlotPatchCommon| |0x00|7|common|SlotPatchCommon| |0x07|1|a_v_e_k_mul|AM(1bit), VIB(1bit), EGT(1bit), KSR(1bit), MUL(4bit)| |0x08|1|ksl_ws|KSL(2bit), 未使用(3bit), WS(3bit)| |0x09|1|ar_dr|AR(4bit), DR(4bit)| |0x0a|1|sr|キーオン直後のRR値(EGT=0時のみ有効)キーオフ時にRRに設定(4bit), 上位4bitは未使用| |0x0b|1|sl_rr|SL(4bit), RR(4bit)| typedef struct OPL3_FM_SlotPatch { SlotPatchCommon common; uint8_t a_v_e_k_mul; uint8_t ksl_ws; uint8_t ar_dr; uint8_t sr; uint8_t sl_rr; } OPL3_FM_SlotPatch; typedef struct OPL3_FM_Patch { PatchCommon common_param; ///< 2op,4opはcommon_param.patch_type で区別する TonedSynthCommon tone_param; OPL3_FM_SlotPatch slot[4]; uint8_t fb_cnt1; uint8_t fb_cnt2; uint8_t fastrelease[4]; uint8_t reserved[6]; } OPL3_FM_Patch; **Patchデータブロック(PatchTypeOPL3_RHYTHM) [#a6db1475] **Patchデータブロック(PatchTypeOPL3_RHYTHM) [#d27dc0c9] |Offset|Size(byte)|Field|Description|h |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|1|bd_mul1|BD(キャリア)の周波数倍率(4bit)| |0x15|1|bd_mul2|BD(モジュレータ)の周波数倍率(4bit)| |0x16|1|bd_m_level|BD(モジュレータ)の出力レベル(6bit)| |0x17|1|bd_m_ar_dr|BD(モジュレータ)のAR(4bit), BD(モジュレータ)のDR(4bit)| |0x18|1|bd_m_ws|BD(モジュレータ)のWS(3bit)| |0x19|1|bd_pan_fb_cnt|未使用(2bit), BDのパン(2bit,0=x,1=L,2=R,3=C), Feedback(3bit), 並列/直列(1bit)| |0x1a|1|sd_pan_fb_cnt|未使用(2bit), SDのパン(2bit,0=x,1=L,2=R,3=C), Feedback(3bit), 並列/直列(1bit)| |0x1b|1|tom_pan_fb_cnt|未使用(2bit), TOMのパン(2bit,0=x,1=L,2=R,3=C), Feedback(3bit), 並列/直列(1bit)| |0x1c|8|bd|OPL3_RHYTHM_RYTParam| |0x24|8|sd|OPL3_RHYTHM_RYTParam| |0x2c|8|hh|OPL3_RHYTHM_RYTParam| |0x34|8|tc|OPL3_RHYTHM_RYTParam| |0x3c|8|tom|OPL3_RHYTHM_RYTParam| |0x44|60|reserved|未使用| **OPL3_RHYTHM_RYTParam [#a17e802c] **OPL3_RHYTHM_RYTParam [#s8c11aa3] |Offset|Size(byte)|Field|Description|h |0x00|1|velo_sens|ベロシティ感度| |0x01|1|level|音量レベル| |0x02|1|tune|音程| |0x03|1|bend_dr|ピッチ減衰率| |0x04|1|bend_depth|ピッチ変化強度| |0x05|1|bend_slope|ピッチ変化カーブ| |0x06|1|ar_dr|AR(4bit), DR(4bit)| |0x07|1|ws|波形選択(3bit)| typedef struct OPL3_RHYTHM_RYTParam { uint8_t velo_sens; uint8_t level; int8_t tune; uint8_t bend_dr; int8_t bend_depth; int8_t bend_slope; uint8_t ar_dr; uint8_t ws; } OPL3_RHYTHM_RYTParam; typedef struct OPL3_RHYTHM_Patch { PatchCommon common_param; int8_t bd_mul[2]; uint8_t bd_m_level; uint8_t bd_m_ar_dr; uint8_t bd_m_ws; uint8_t bd_pan_fb_cnt; uint8_t sd_pan_fb_cnt; uint8_t tom_pan_fb_cnt; OPL3_RHYTHM_RYTParam bd; OPL3_RHYTHM_RYTParam sd; OPL3_RHYTHM_RYTParam hh; OPL3_RHYTHM_RYTParam tc; OPL3_RHYTHM_RYTParam tom; uint8_t reserved[60]; } OPL3_RHYTHM_Patch; **Patchデータブロック(PatchTypeSPC_PCM) [#o05c2d0e] **Patchデータブロック(PatchTypeSPC_PCM) [#p7983e54] |Offset|Size(byte)|Field|Description|h |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|7|slot|スロット情報(SlotPatchCommon)| |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|7|slot|スロット情報(SlotPatchCommon)| |0x4b|1|srcn|モード(1bit,0:sample,1:wavetable), 波形番号(7bit)| |0x4c|4|rate|サンプリングレート| |0x50|1|fixedKey_basekey|固定ピッチ(1bit), 基準キー番号(7bit)| |0x51|1|dr_ar|未使用(1bit), DecayRate(3bit), AttackRate(4bit)| |0x52|1|sl_sr1|SustainLevel(3bit), キーオン時のSustainRate(5bit)| |0x53|1|echo_pmOn_noiseOn_sr2|Echo(1bit), PitchModulation(1bit), Noise(1bit), キーオフ後のSustainRate(5bit)| |0x51|1|dr_ar|未使用(1bit), DecayRate(3bit), AttackRate(4bit)| |0x52|1|sl_sr1|SustainLevel(3bit), キーオン時のSustainRate(5bit)| |0x53|1|echo_pmOn_noiseOn_sr2|Echo(1bit), PitchModulation(1bit), Noise(1bit), キーオフ後のSustainRate(5bit)| |0x54|1|pwmFilter_pwmOctave_pwmWave2_pwmWave1|Wavetable用Filter(2bit), Wavetable用Octave(2bit), Wavetable用波形選択1(2bit), Wavetable用波形選択(2bit)| |0x55|1|polarity_pwmBlend|R位相反転(1bit), L位相反転(1bit), Wavetable用Blend(6bit)| |0x56|1|pwmBlend_lfo1_sens|LFO1->Blendのモジュレーション感度| |0x57|1|pwmBlend_lfo2_sens|LFO2->Blendのモジュレーション感度| |0x58|1|pwmBlend_env1_sens|Envelope1->Blendのモジュレーション感度| |0x59|1|pwmBlend_env2_sens|Envelope2->Blendのモジュレーション感度| |0x5a|1|pwmFilter_lfo1_sens|LFO1->Filterのモジュレーション感度| |0x5b|1|pwmFilter_lfo2_sens|LFO2->Filterのモジュレーション感度| |0x5c|1|pwmFilter_env1_sens|Envelope1->Filterのモジュレーション感度| |0x5d|1|pwmFilter_env2_sens|Envelope2->Filterのモジュレーション感度| |0x5e|1|pwmBlend_ksl_sens|KeyScaling->Blendのモジュレーション感度| |0x5f|1|pwmFilter_ksl_sens|KeyScaling->Filterのモジュレーション感度| |0x5e|1|pwmBlend_ksl_sens|KeyScaling->Blendのモジュレーション感度| |0x5f|1|pwmFilter_ksl_sens|KeyScaling->Filterのモジュレーション感度| |0x60|32|userWave|ユーザー波形テーブル(4bit*64)| typedef struct SPC_PCM_Patch { PatchCommon common_param; TonedSynthCommon tone_param; SlotPatchCommon slot; uint8_t srcn; uint32_t rate; uint8_t fixedKey_basekey; // 1.7 uint8_t dr_ar; uint8_t sl_sr1; uint8_t echo_pmOn_noiseOn_sr2; // 1.1.1.5 uint8_t pwmFilter_pwmOctave_pwmWave2_pwmWave1; // 2.2.2.2 uint8_t polarity_pwmBlend; // 2.6 int8_t pwmBlend_lfo_sens[SWLFO_NUM]; int8_t pwmBlend_env_sens[SWENV_NUM]; int8_t pwmFilter_lfo_sens[SWLFO_NUM]; int8_t pwmFilter_env_sens[SWENV_NUM]; int8_t pwmBlend_ksl_sens; int8_t pwmFilter_ksl_sens; uint8_t userWave[32]; } SPC_PCM_Patch; **Patchデータブロック(PatchTypeOPLL_FM) [#x2ef07f3] **Patchデータブロック(PatchTypeOPLL_FM) [#q1531b6d] |Offset|Size(byte)|Field|Description|h |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|12|slot0|スロット0(OPLL_FM_SlotPatch)| |0x50|12|slot1|スロット1(OPLL_FM_SlotPatch)| |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|12|slot0|スロット0(OPLL_FM_SlotPatch)| |0x50|12|slot1|スロット1(OPLL_FM_SlotPatch)| |0x5c|12|slot2|未使用| |0x68|12|slot3|未使用| |0x74|1|fb|フィードバックレベル(3bit)| |0x75|1|instNo|音色番号(4bit)| |0x76|10|reserved|未使用| **OPLL_FM_SlotPatch [#xc1a2fa2] **OPLL_FM_SlotPatch [#h7c51b7f] |Offset|Size(byte)|Field|Description|h |0x00|7|common|SlotPatchCommon| |0x00|7|common|SlotPatchCommon| |0x07|1|a_v_e_k_mul|AM(1bit), VIB(1bit), EGT(1bit), KSR(1bit), MUL(4bit)| |0x08|1|ksl_ws|KSL(2bit), 未使用(3bit), WS(3bit)| |0x09|1|ar_dr|AR(4bit), DR(4bit)| |0x0a|1|unused|未使用| |0x0b|1|sl_rr|SL(4bit), RR(4bit)| typedef struct OPLL_FM_SlotPatch { SlotPatchCommon common; uint8_t a_v_e_k_mul; uint8_t ksl_ws; uint8_t ar_dr; uint8_t unused; uint8_t sl_rr; } OPLL_FM_SlotPatch; typedef struct OPLL_FM_Patch { PatchCommon common_param; TonedSynthCommon tone_param; OPLL_FM_SlotPatch slot[4]; uint8_t fb; uint8_t inst_no; uint8_t reserved[10]; } OPLL_FM_Patch; **Patchデータブロック(PatchTypeOPLL_RHYTHM) [#p6e13aca] **Patchデータブロック(PatchTypeOPLL_RHYTHM) [#c63aa5fc] |Offset|Size(byte)|Field|Description|h |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|1|bd_mul1|未使用| |0x15|1|bd_mul2|未使用| |0x16|1|bd_m_level|未使用| |0x17|1|bd_m_ar_dr|未使用| |0x18|1|bd_m_ws|未使用| |0x19|1|bd_pan_fb_cnt|未使用| |0x1a|1|sd_pan_fb_cnt|未使用| |0x1b|1|tom_pan_fb_cnt|未使用| |0x1c|8|bd|OPLL_RHYTHM_RYTParam| |0x24|8|sd|OPLL_RHYTHM_RYTParam| |0x2c|8|hh|OPLL_RHYTHM_RYTParam| |0x34|8|tc|OPLL_RHYTHM_RYTParam| |0x3c|8|tom|OPLL_RHYTHM_RYTParam| |0x44|60|reserved|未使用| **OPLL_RHYTHM_RYTParam [#ec3428dc] **OPLL_RHYTHM_RYTParam [#j70f6552] |Offset|Size(byte)|Field|Description|h |0x00|1|velo_sens|ベロシティ感度| |0x01|1|level|音量レベル| |0x02|1|tune|音程| |0x03|1|bend_dr|ピッチ減衰率| |0x04|1|bend_depth|ピッチ変化強度| |0x05|1|bend_slope|ピッチ変化カーブ| |0x06|2|unused|未使用| typedef struct OPLL_RHYTHM_RYTParam { uint8_t velo_sens; uint8_t level; int8_t tune; uint8_t bend_dr; int8_t bend_depth; int8_t bend_slope; uint8_t unused[2]; } OPLL_RHYTHM_RYTParam; typedef struct OPLL_RHYTHM_Patch { PatchCommon common_param; int8_t bd_mul[2]; uint8_t bd_m_level; uint8_t bd_m_ar_dr; uint8_t bd_m_ws; uint8_t bd_pan_fb_cnt; uint8_t sd_pan_fb_cnt; uint8_t tom_pan_fb_cnt; OPLL_RHYTHM_RYTParam bd; OPLL_RHYTHM_RYTParam sd; OPLL_RHYTHM_RYTParam hh; OPLL_RHYTHM_RYTParam tc; OPLL_RHYTHM_RYTParam tom; uint8_t reserved[60]; } OPLL_RHYTHM_Patch; **PatchCommon [#ha60420e] **Patchデータブロック(PatchTypeDCSG) [#pc80b7b9] |Offset|Size(byte)|Field|Description|h |0x00|1|patch_type|1=PatchTypeOPN_FM| |0x01|1|lk_nxp_formatVersion|1b変更不可 1bエクスポート不可 6bフォーマットバージョン(後方互換性用)| |0x00|20|common_param|パッチデータ共通(PatchCommon)| |0x14|48|tone_param|TonedSynthCommon(TonedSynthCommon)| |0x44|7|slot|スロット情報(SlotPatchCommon)| |0x4b|4|dummy|未使用| |0x4f|1|tonetype|0-tone, 1-noise| |0x50|1|coarse_tune|周波数比またはノートナンバー Noiseでは不使用| |0x51|1|fine_tune|| |0x52|1|fix_freq|0以外だと固定の周波数を書き込む| |0x53|1|start_time|1以上だとキーオン前に指定時間(ms)待つ| |0x54|1|gate_time|0以外だとキーオン後に指定時間(ms)で自動的にキーオフする| |0x55|1|invert_freq|周波数を反転させる| |0x56|1|tonalnoise|音程感のあるノイズ| |0x57|1|followpitch|0-normal, 1-ch3 follow to ch3, 2-sync ch3| |0x58|39|reserved2|未使用| typedef struct DCSGParam { PatchCommon common_param; TonedSynthCommon tone_param; SlotPatchCommon common; uint8_t reserved[4]; uint8_t tonetype; // 0-tone, 1-noise uint8_t coarse_tune; // 周波数比またはノートナンバー Noiseでは不使用 uint8_t fine_tune; // uint8_t fix_freq; // 固定の周波数を書き込む uint8_t start_time; // 1以上だとキーオンをキャンセルして指定時間待つ uint8_t gate_time; // 0以外だとキーオンしてから指定時間で自動的にキーオフする uint8_t invert_freq; // 周波数の設定値を書き込み時に反転させる uint8_t tonalnoise; uint8_t followpitch; // 0-normal, 1-ch3 follow to ch3, 2-sync ch3 uint8_t reserved; uint8_t reserved2[38]; } SsgParam; **PatchCommon [#xb1c996e] |Offset|Size(byte)|Field|Description|h |0x00|1|patch_type|patch_type| |0x01|1|lk_nxp_formatVersion|1b保存エクスポート不可 1bクロック指定有効 6bフォーマットバージョン(後方互換性用)| |0x02|14|patch_name|Patch名(Shift-JIS,0終端)| |0x10|4|original_clock|作成時のチップクロック周波数| **TonedSynthCommon [#gf7c88e2] **TonedSynthCommon [#daddf591] |Offset|Size(byte)|Field|Description|h |0x00|1|transpose|トランスポーズ| |0x01|1|tuning|チューニング| |0x02|1|panpot|パン| |0x03|1|panpot_ksl_sens|KeyScaling->panpotのモジュレーション感度| |0x03|1|panpot_ksl_sens|KeyScaling->panpotのモジュレーション感度| |0x04|1|pitch_lfo1_sens|LFO1->Pitchのモジュレーション感度| |0x05|1|pitch_lfo2_sens|LFO2->Pitchのモジュレーション感度| |0x06|1|pitch_env1_sens|Envelope1->Pitchのモジュレーション感度| |0x07|1|pitch_env2_sens|Envelope2->Pitchのモジュレーション感度| |0x08|4|ksl|KeyScaleParam| |0x0c|12|sw_env1|EnvelopeParam| |0x18|12|sw_env2|EnvelopeParam| |0x08|4|ksl|KeyScaleParam| |0x0c|12|sw_env1|EnvelopeParam| |0x18|12|sw_env2|EnvelopeParam| |0x24|4|sw_lfo1|LFOParam| |0x28|4|sw_lfo2|LFOParam| |0x2c|1|lfo1_delay|LFO1のディレイ| |0x2d|1|lfo2_delay|LFO2のディレイ| |0x2e|1|transpose2|OPL3疑似4op音色の2音目のトランスポーズ値| |0x2f|1|tuning2|OPL3疑似4op音色の2音目のチューニング値| **LFOParam [#ccfd58a8] **LFOParam [#k7625358] |Offset|Size(byte)|Field|Description|h |0x00|1|midisync_wf_inputselect|MIDI Sync...テンポ同期(1bit), Waveform...LFO波形(3bit), Input...LFO感度入力源(4bit)| |0x01|1|keyonrst_inputdepth|KeyOn Reset...キーオン時に位相リセット(1bit), Depth(7bit)| |0x01|1|keyonrst_pms_ams|KeyOn Reset...キーオン時に位相リセット(1bit), PMS(3bit), 未使用(2bit), AMS(2bit)| |0x02|1|freq|Freq...LFOの速さ| |0x03|1|fadein|FadeIn...フェードインの長さ| |0x03|1|pmdbias|pmdbias(sint8)| **EnvelopeParam [#u48f339a] **EnvelopeParam [#s046c26c] |Offset|Size(byte)|Field|Description|h |0x00|1|inputselect|Input...Envelope感度入力源(4bit)| |0x01|1|inputdepth|Depth(7bit)| |0x00|1|attack_slope_inputselect|アタック時のカーブ(4bit), Input...Envelope感度入力源(4bit)| |0x01|1|amdbias|LFO用のamdbias(sint8)| |0x02|1|attack_time|A...アタック時間(7bit)| |0x03|1|attack_slope|アタック時のカーブ(4bit)| |0x03|1|attack_level|アタック後に達するレベル(sint8)| |0x04|1|hold_time|H...ホールド時間(7bit)| |0x05|1|decay_time|D...ディケイ時間(7bit)| |0x06|1|decay_release_slope|ディケイ時のカーブ(4bit), リリース時のカーブ(4bit)| |0x07|1|sustain_level|SL...サスティンレベル(7bit)| |0x08|1|release_time|RR...リリース時間(7bit)| |0x09|1|release_level|RL...リリースレベル(7bit)| |0x0a|1|key_scaling|KeyScaling| |0x0b|1|velocity_scaling|VelocityScaling| |0x0a|1|key_scaling|KeyScaling| |0x0b|1|velocity_scaling|VelocityScaling| **KeyScaleParam [#t22d1d6a] **KeyScaleParam [#k72f2263] |Offset|Size(byte)|Field|Description|h |0x00|1|min_level|MinLevel| |0x01|1|slope1_2|Min->Centerのカーブ(4bit), Center->Maxのカーブ(4bit)| |0x02|1|center_key|CenterKey| |0x03|1|max_level|MaxLevel| |0x00|1|pan_min_level|PanへのMinLevel(sint8)| |0x01|1|pan_max_level|PanへのMaxLevel(sint8)| |0x02|1|op1Curve_op3Curve|op1のカーブ(4bit), op3のカーブ(4bit)| |0x03|1|op2Curve_op4Curve|op2のカーブ(4bit), op3のカーブ(4bit)| **SlotPatchCommon [#wc531220] **opCurve [#o05ea943] |id|Type|h |0|Curve0_Normal| |1|Curve0_Reverse| |2|Curve1_Normal| |3|Curve1_Reverse| |4|Curve2_Normal| |5|Curve2_Reverse| |6|Curve3_Normal| |7|Curve3_Reverse| |8|Linear_Normal| |9|Linear_Reverse| |10|Exponential_Normal| |11|Exponential_Reverse| |12|DXExponential_Normal| |13|DXExponential_Reverse| **SlotPatchCommon [#bec50020] |Offset|Size(byte)|Field|Description|h |0x00|1|velo_sens|Velocity Sens...ベロシティ感度| |0x01|1|tl|TL...Total Level| |0x02|1|lfo1_sens|LFO1->TLへのモジュレーション感度| |0x03|1|lfo2_sens|LFO2->TLへのモジュレーション感度| |0x04|1|env1_sens|Envelope1->TLへのモジュレーション感度| |0x05|1|env2_sens|Envelope2->TLへのモジュレーション感度| |0x06|1|ksl_sens|KeyScaling->TLへのモジュレーション感度| |0x06|1|ksl_sens|KeyScaling->TLへのモジュレーション感度| typedef struct PatchCommon { uint8_t patch_type; ///< 音源種別 uint8_t lk_nxp_format_version; ///< 1.変更不可 1.エクスポート不可 6.フォーマットバージョン(後方互換性用) uint8_t lk_nxp_format_version; ///< 1.保存エクスポート不可 1.クロック指定有効 6.フォーマットバージョン(後方互換性用) char name[14]; ///< パッチ名 uint32_t original_clock; ///< 作成時のクロック周波数 } PatchCommon; typedef struct TonedSynthCommon { int8_t transpose; int8_t tuning; int8_t panpot; int8_t panpot_ksl_sens; int8_t pitch_lfo_sens[SWLFO_NUM]; int8_t pitch_env_sens[SWENV_NUM]; KeyScaleParam ksl; KeyScaleParam ksl; EnvelopeParam sw_env[SWENV_NUM]; LFOParam sw_lfo[SWLFO_NUM]; uint8_t lfo_delay[SWLFO_NUM]; int8_t transpose2; // OPL3で使用 int8_t tuning2; // OPL3で使用 } TonedSynthCommon; // LFOのパラメータ(4Byte) typedef struct LFOParam { uint8_t midisync_wf_inputselect; // 1.3.4 uint8_t keyonrst_inputdepth; // 1.7 uint8_t keyonrst_pms_ams; // 1.3.(2).2 uint8_t freq; uint8_t fadein; int8_t pmdbias; } LFOParam; // ソフトエンベロープのパラメータ(12Byte) typedef struct EnvelopeParam { uint8_t inputselect; int8_t inputdepth; uint8_t attack_slope_inputselect; int8_t amdbias; uint8_t attack_time; uint8_t attack_slope; int8_t attack_level; uint8_t hold_time; uint8_t decay_time; uint8_t decay_release_slope; uint8_t sustain_level; uint8_t release_time; uint8_t release_level; int8_t key_scaling; // 最大時に1oct上がる毎にnote=60を基準に半分に int8_t velocity_scaling; // 80を基準として32上がる毎に倍に } EnvelopeParam; // キースケールのカーブ定義(4Byte) typedef struct KeyScaleParam { int8_t min_level; uint8_t slope1_2; int8_t center_key; int8_t max_level; } KeyScaleParam; typedef struct KeyScaleParam { int8_t pan_min_level; int8_t pan_max_level; uint8_t op1Curve_op3Curve; uint8_t op2Curve_op4Curve; } KeyScaleParam; // スロット毎のパッチデータの共通部分 typedef struct SlotPatchCommon { uint8_t velo_sens; uint8_t tl; int8_t lfo_sens[SWLFO_NUM]; int8_t env_sens[SWENV_NUM]; int8_t ksl_sens; } SlotPatchCommon; **patch_type [#f7ee6350] **patch_type [#d1aec42c] |id|Type|h |0|PatchTypeUndefined| |0|PatchTypeUndefined| |1|PatchTypeOPM_FM| |2|PatchTypeOPN_FM| |3|PatchTypeOPN_FMch3(効果音モード)| |4|PatchTypeSSG_PSG| |5|PatchTypeOPN_RHYTHM| |6|PatchTypeOPNA_ADPCM| |7|PatchTypeOPL3_FM2op| |8|PatchTypeOPL3_FM4op| |9|PatchTypeOPL3_RHYTHM| |10|PatchTypeSPC_PCM| |11|PatchTypeOPLL_FM| |12|PatchTypeOPLL_RHYTHM| |13|PatchTypeOPZ_FM| |14|PatchTypeDCSG| |31|PatchTypeProgram|