Created
April 24, 2024 04:21
-
-
Save RigoLigoRLC/7d2cb2235204c93e8d78228122eb0119 to your computer and use it in GitHub Desktop.
Future Composer 1.4 module file format description
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <std/core.pat> | |
struct fc_pattern_index_entry_channel { | |
u8 pattern_id; | |
u8 transpose; | |
u8 sound_transpose; | |
}; | |
struct fc_pattern_index_entry { | |
fc_pattern_index_entry_channel channel[4]; | |
u8 speed; | |
}; | |
bitfield fc_note_info { | |
instrument_id : 6; | |
bool portamento_off : 1; | |
bool portamento_on : 1; | |
}; | |
struct fc_note { | |
u8 pitch; | |
fc_note_info info; | |
}; | |
struct fc_pattern { | |
fc_note notes[32]; | |
}; | |
struct fc_freq_seq { | |
u8 freq[64]; | |
}; | |
struct fc_volume_seq { | |
u8 volume[64]; | |
}; | |
struct fc_sample_metadata { | |
be u16 sample_point_count; | |
be u16 loop; | |
be u16 loop_point_count; | |
if (sample_point_count != 0) { | |
be u16 sample_block[sample_point_count + 1] @ _temp_sample_data_ptr; | |
_temp_sample_data_ptr += (sample_point_count + 1) * 2; | |
} | |
}; | |
struct fc_waveform_metadata { | |
u8 waveform_length; | |
if (waveform_length != 0) { | |
be u16 waveform_block[waveform_length] @ _temp_sample_data_ptr; | |
_temp_sample_data_ptr += waveform_length * 2; | |
} | |
}; | |
u32 _temp_sample_data_ptr; | |
struct fc14 { | |
u32 signature; | |
be u32 pattern_index_size; | |
be u32 pattern_data_offset; | |
be u32 pattern_data_size; | |
be u32 frequency_sequence_offset; | |
be u32 frequency_sequence_size; | |
be u32 volume_sequence_offset; | |
be u32 volume_sequence_size; | |
be u32 sample_data_offset; | |
be u32 waveform_data_offset; | |
u32 pattern_index_count = pattern_index_size / sizeof(fc_pattern_index_entry) [[export]]; | |
u32 pattern_data_count = pattern_data_size / sizeof(fc_pattern) [[export]]; | |
u32 frequency_sequence_count = frequency_sequence_size / sizeof(fc_freq_seq) [[export]]; | |
u32 volume_sequence_count = volume_sequence_size / sizeof(fc_volume_seq) [[export]]; | |
/* TEMP */ _temp_sample_data_ptr = sample_data_offset; | |
fc_sample_metadata sample_metadata[10]; | |
/* TEMP */ _temp_sample_data_ptr = waveform_data_offset; | |
fc_waveform_metadata waveform_metadata[80]; | |
fc_pattern_index_entry pattern_index [pattern_index_count]; | |
$ = pattern_data_offset; | |
fc_pattern patterns [pattern_data_count]; | |
$ = frequency_sequence_offset; | |
fc_freq_seq frequency_sequences [frequency_sequence_count]; | |
$ = volume_sequence_offset; | |
fc_volume_seq volume_sequences [volume_sequence_count]; | |
}; | |
fc14 music @ 0; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment