📄 mmf2ma1.h
字号:
}PLAY_POS_INFO_TIME;
#ifdef mycplusplus
class MMF2MA1_CLASS {
private:
#endif
#ifdef MMF2MA1_DECLARE_MEMBER
// MMF僼傽僀儖娭楢僨乕僞
MMF2MA1_STATIC UINT32 m_toplevel_body_size; // 僩僢僾儗儀儖偺body size丅CRC偺俀僶僀僩傕娷傑傟傞丅
MMF2MA1_STATIC UINT8 m_format_type[MMF_MAX_TRACKS]; // Format Type
MMF2MA1_STATIC UINT8 m_sequence_type[MMF_MAX_TRACKS]; // Sequence Type
MMF2MA1_STATIC UINT8 m_timebase_d[MMF_MAX_TRACKS]; // TimeBase_D[ms]
MMF2MA1_STATIC UINT8 m_timebase_g[MMF_MAX_TRACKS]; // TimeBase_G[ms]
MMF2MA1_STATIC UINT32 m_input_pos_abs; // 擖椡偐傜師偵撉傒崬傓埵抲丅
MMF2MA1_STATIC UINT8 m_channel_status[MMF_MAX_TRACKS][2]; // Channel Status
MMF2MA1_STATIC bool m_is_first_event; // 嵟弶偺僀儀儞僩偺慜偵媥晞傪擖傟傞偨傔偵巊偆僼儔僌
#ifndef NO_MA1_EXCLUSIVE
MMF2MA1_STATIC MA1_EXCLUSIVE_DATA m_ma1_exclusive;
#endif
// MA1僼僅乕儅僢僩僼傽僀儖娭楢僨乕僞
MMF2MA1_STATIC UINT8 m_ma1_max_part; // 曄姺偝傟偨屻偺MA1偺嬋拞偱巊傢傟傞壒悢丅
MMF2MA1_STATIC UINT8 m_ma1_tempo_reg; // MA1偵愝掕偡傞僥儞億儗僕僗僞偺抣丅幚嵺偺僥儞億偼8728/m_ma1_temp_reg[攺/暘]
// 撪晹僨乕僞
MMF2MA1_STATIC UINT32 m_sequence_start_pos_abs[MMF_MAX_TRACKS]; // 僔乕働儞僗僨乕僞偺巒傑傞埵抲丅
MMF2MA1_STATIC UINT32 m_sequence_size[MMF_MAX_TRACKS]; // 僔乕働儞僗僨乕僞偺僒僀僘丅0偼僩儔僢僋偑懚嵼偟側偄偙偲傪堄枴偡傞丅
MMF2MA1_STATIC UINT8 m_mmf_track_number[MA1_MAX_PART]; // MA1偺僷乕僩斣崋偐傜MMF偺僩儔僢僋乛僠儍儞僱儖斣崋傊偺懳墳昞
MMF2MA1_STATIC UINT8 m_mmf_channel_number[MA1_MAX_PART]; // MA1偺僷乕僩斣崋偐傜MMF偺僩儔僢僋乛僠儍儞僱儖斣崋傊偺懳墳昞
MMF2MA1_STATIC UINT8 m_min_note[MA1_MAX_PART]; // 奺僠儍儞僱儖偺嵟掅壒丅
MMF2MA1_STATIC UINT8 m_max_note[MA1_MAX_PART]; // 奺僠儍儞僱儖偺嵟崅壒丅
#if OCTAVE_RANGE_OVER_TYPE == 1
MMF2MA1_STATIC UINT8 m_playable_min_note[MA1_MAX_PART]; // 尰嵼偺儅儖僠僾儖愝掕偱敪壒壜擻側奺僠儍儞僱儖偺嵟掅壒丅
MMF2MA1_STATIC UINT8 m_playable_max_note[MA1_MAX_PART]; // 尰嵼偺儅儖僠僾儖愝掕偱敪壒壜擻側奺僠儍儞僱儖偺嵟崅壒丅
MMF2MA1_STATIC bool m_warning_note_removed_by_range; // 壒堟傪偼偢傟偰壒晞偑敪壒偝傟側偄偲偒偵true偲側傞
#endif
// 忋婰偺m_min_note,m_max_note偵偼埲壓偺幃偵傛傞悢抣壔偝傟偨壒掱偑擖傞丅
// (Contorlo Message偵傛傞OctaveShift抣)*12 + (NoteMessage偺OctaveBlock抣)*12 + NoteNumber -1
// MMF偱昞尰偱偒傞壒偺斖埻偼丄偙偺昞尰偱偼 56 偐傜 199 偱偁傞丅
// 椺偊偽No Shift, Octave=2=MidHigh, C#偺応崌128偵側傞丅
// MMF偺No Shift, Octave=2=MidHigh,A偑MA-1偲MA1偵偍偗傞A4=440Hz偲掕媊偝傟偰偄傞丅
// 偟偨偑偭偰丄MA-1偱敪壒偱偒傞壒堟丄
// C2# 偐傜 C8 傪偙偺悢幃偱昞尰偡傞偲
// 104 偐傜 175 偵側傞丅
// 傑偨MA1偱敪壒偱偒傞壒堟偼丄儅儖僠僾儖偺愝掕傪侾偲偡傞偲
// C3# 偐傜 C6 傪偙偺悢幃偱昞尰偡傞偲
// 116 偐傜 151 偵側傞丅
MMF2MA1_STATIC UINT8 m_program_change[MA1_MAX_PART]; // 奺僷乕僩偺壒怓斣崋
MMF2MA1_STATIC UINT8 m_bank_change[MA1_MAX_PART]; // 奺僷乕僩偺壒怓斣崋
MMF2MA1_STATIC UINT8 m_volume_change[MA1_MAX_PART]; // 奺僷乕僩偺儃儕儏乕儉
MMF2MA1_STATIC UINT8 m_modulation_change[MA1_MAX_PART]; // 奺僷乕僩偺儌僕儏儗乕僔儑儞
MMF2MA1_STATIC MMF2MA1_INTERNAL_NOTE m_note_buffer[MA1_MAX_PART]; // 僲乕僩偺暘妱丄曄姺帪偵巊偆僲乕僩梡僶僢僼傽丅
// SINT16 m_priority_list[MA1_MAX_PART]; // m_priority_list[0]偐傜弴偵傕偭偲傕愭偵僲乕僩僆儞偵側傞僲乕僩偺僠儍儞僱儖偑擖偭偰偄傞丅-1偑儕僗僩偺廔椆傪偁傜傢偡丅
MMF2MA1_STATIC SINT16 m_prev_part_number; // convert_note偵偍偄偰慜夞擖椡偝傟偨壒偺僷乕僩斣崋傪婰壇偡傞偨傔偵巊梡
MMF2MA1_STATIC UINT8 m_same_timing_count; //摨偠僞僀儈儞僌偱巒傑傞僀儀儞僩偺悢
MMF2MA1_STATIC UINT8 m_same_timing_list[MA1_MAX_PART]; //摨偠僞僀儈儞僌偱巒傑傞僀儀儞僩偺僷乕僩斣崋傪婰榐
MMF2MA1_STATIC SINT16 m_note_shift[MA1_MAX_PART];
MMF2MA1_STATIC SINT16 m_program_octave_shift[MA1_MAX_PART]; // control message偵傛傞僆僋僞乕僽僔僼僩12偺攞悢偱擖傞
MMF2MA1_STATIC UINT16 m_max_track_number; // 撉傒崬傓僩儔僢僋偺嵟戝悢丅偙偺曄悢傪挻偊傞僩儔僢僋偼柍帇偝傟傞丅
MMF2MA1_STATIC PLAY_POS_INFO_TIME m_play_pos_info[MMF_MAX_TRACKS]; // 僩儔僢僋偛偲偺墘憈奐巒丄廔椆埵抲忣曬
MMF2MA1_STATIC PLAY_POS_INFO_TIME m_play_pos_info_song; // 嬋慡懱偺墘憈奐巒丄廔椆埵抲忣曬
MMF2MA1_STATIC PLAY_POS_INFO m_phrase_list[MMF_MAX_TRACKS][PHRASE_LIST_SIZE]; // 嬋慡懱偺墘憈奐巒丄廔椆埵抲忣曬
MMF2MA1_STATIC UINT8 m_phrase_tag[2]; // 庢傝弌偝傟傞傋偒僼儗乕僘柤丅0,0側傜枹掕媊丅
MMF2MA1_STATIC Conv_in *m_p_conv_in; // 擖椡僆僽僕僃僋僩偺億僀儞僞
MMF2MA1_STATIC Conv_out *m_p_conv_out; // 弌椡僆僽僕僃僋僩偺億僀儞僞
MMF2MA1_STATIC MMF2MA1_RESULT crc_check(void);
MMF2MA1_STATIC MMF2MA1_RESULT pass1(void);
MMF2MA1_STATIC MMF2MA1_RESULT decide_start_stop(void);
MMF2MA1_STATIC MMF2MA1_RESULT pass2(void);
#ifndef NO_MA1_EXCLUSIVE
MMF2MA1_STATIC MMF2MA1_RESULT exclusive_voice_para_store(
UINT8 address,
UINT8 *exc_data
);
MMF2MA1_STATIC MMF2MA1_RESULT read_exclusive(UINT32 exclusive_size);
bool MMF2MA1_CLASS_CC get_user_voice_num(
UINT8 bank_num,
UINT8 program_num,
UINT8 *puser_voice_num
);
#endif
MMF2MA1_STATIC MMF2MA1_RESULT pass3(void);
MMF2MA1_STATIC MMF2MA1_RESULT pass4(void);
MMF2MA1_STATIC MMF2MA1_RESULT pass5(void);
MMF2MA1_STATIC bool check_note_range(void);
MMF2MA1_STATIC MMF2MA1_RESULT tempo_time_base_decision(void);
MMF2MA1_STATIC MMF2MA1_RESULT ma1_header_output(void);
MMF2MA1_STATIC MMF2MA1_RESULT ma1_tail_output(void);
MMF2MA1_STATIC MMF2MA1_RESULT put_ma1_byte(UINT8); // 偙偺曄姺梡僋儔僗偐傜曄姺偝傟偨僨乕僞傪侾僶僀僩弌椡偡傞娭悢丅
MMF2MA1_STATIC bool seek_data(UINT32 pos);
MMF2MA1_STATIC UINT32 get_seek_pos(void);
MMF2MA1_STATIC MMF2MA1_RESULT get_byte(UINT8 *pdata); // 1byte偺僨乕僞傪Conv_in *m_p_conv_in偐傜撉傒崬傓丅
MMF2MA1_STATIC MMF2MA1_RESULT skip_data(UINT32 skip_size);
MMF2MA1_STATIC MMF2MA1_RESULT get_chunk_head(UINT8 *pid,UINT32 *psize);
MMF2MA1_STATIC SINT16 get_part_number(UINT8 track_number, UINT8 channel_number);
MMF2MA1_STATIC MMF2MA1_RESULT get_duration_gatetime(
UINT32 *pdg // 侾乣俁僶僀僩偱昞尰偝傟傞duration 傑偨偼 gatetime
);
MMF2MA1_STATIC MMF2MA1_RESULT get_note(
UINT8 track, // I
UINT32 *p_byte_count, // I/O: 撉傒崬傒奐巒埵抲丅僩儔僢僋偺愭摢偑侽
UINT32 *p_pos_abs, // I/O: 撉傒崬傒奐巒埵抲偵偍偗傞愨懳僨儖僞僞僀儉
MMF2MA1_INPUT_NOTE *p_input_note_buffer, // O
bool *p_is_track_end // O
);
MMF2MA1_STATIC MMF2MA1_RESULT convert_note(
UINT8 track, // MMF偱偺僩儔僢僋斣崋
UINT8 part_number, // MA1忋偱偺僷乕僩斣崋
UINT8 key, // 撪晹昞尰偱偺壒掱
UINT32 pos_abs, // 愨懳奐巒埵抲[僗僥僢僾]
UINT32 gatetime, // 帩懕帪娫[僗僥僢僾]
bool is_end // is_end == true -> 忋婰偺僷儔儊乕僞偼柍岠偱僶僢僼傽
// 偵巆偭偰偄傞僨乕僞傪偡傋偰弌椡偡傞丅
);
MMF2MA1_STATIC MMF2MA1_RESULT convert_key(
UINT8 part_number,
UINT8 key,
UINT8 *pma1_key // MA1偺壒晞僨乕僞傾僪儗僗3N+0偵擖傞僶僀僩僨乕僞
// BL1, BL0, NT3, NT2, NT1, NT0, CH1, CH0
);
MMF2MA1_STATIC MMF2MA1_RESULT output_note(
UINT8 part_number, // 僷乕僩斣崋
UINT32 pos_abs_step,// 曄姺廔椆帪崗
/* bool * const pis_end, // 偙偺僷乕僩part_number偺僶僢僼傽偵擖偭偰偄傞僨乕僞傪偡傋偰弌椡偟偨側傜true傪曉偡丅*/
bool same_timing_part // 摨偠帪崗偵巒傑傞壒偑偁傟偽
);
MMF2MA1_STATIC UINT32 time2step(
UINT32 pos_abs // MMF偱偺愨懳帪娫
);
MMF2MA1_STATIC bool output_note_event(
UINT8 ma1_key, // 壒晞僨乕僞$00h偵擖傞僨乕僞
MMF2MA1_TI_TK_DATA ti_tk, // TI偲TK
UINT8 vib // Vibrato: 0 -> OFF, 1 -> ON
);
MMF2MA1_STATIC bool output_rest_event(
UINT8 ma1_key, // 壒晞僨乕僞$00h偵擖傞僨乕僞
MMF2MA1_TI_TK_DATA ti_tk // TI偲TK
);
MMF2MA1_STATIC void get_ti_tk(
UINT32 interval, //
UINT32 gate, //
MMF2MA1_TI_TK_DATA *pti_tk //
);
MMF2MA1_STATIC void mmf2ma1_init_everytime(void);
#endif /* MMF2MA1_DECLARE_MEMBER */
#if defined(mycplusplus)
public:
// 偙偺僋儔僗偺儐乕僓乕偵岞奐偝傟偰偄傞娭悢丅
Mmf2ma1();
~Mmf2ma1(){};
#endif
/* 奜晹偵岞奐偡傞桞嶰偺娭悢, set_resource, convert */
MMF2MA1_RESULT set_resources( /* 僨乕僞傪庢傝崬傓偨傔偺儕僜乕僗娭悢傪愝掕偡傞娭悢丅 */
Conv_in *p_conv_in, /* 擖椡僆僽僕僃僋僩偺億僀儞僞 */
Conv_out *p_conv_out /* 弌椡僆僽僕僃僋僩偺億僀儞僞 */
);
MMF2MA1_RESULT convert(void); // 僼僅乕儅僢僩曄姺偺杮懱
void mmf2ma1_init(void);
bool set_max_track(UINT16); // 嵟戝撉傒崬傒僩儔僢僋悢傪愝掕偡傞娭悢丅
bool set_phrase(UINT8 *);
#if defined(mycplusplus)
};
#endif
#endif
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -