Skip to content

Instantly share code, notes, and snippets.

@RigoLigoRLC
Created April 24, 2024 04:21
Show Gist options
  • Save RigoLigoRLC/7d2cb2235204c93e8d78228122eb0119 to your computer and use it in GitHub Desktop.
Save RigoLigoRLC/7d2cb2235204c93e8d78228122eb0119 to your computer and use it in GitHub Desktop.
Future Composer 1.4 module file format description
#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