diff options
Diffstat (limited to '')
| -rw-r--r-- | modules/chibi/cp_song.cpp | 834 |
1 files changed, 365 insertions, 469 deletions
diff --git a/modules/chibi/cp_song.cpp b/modules/chibi/cp_song.cpp index 197e44f69..b3ef361d3 100644 --- a/modules/chibi/cp_song.cpp +++ b/modules/chibi/cp_song.cpp @@ -30,58 +30,53 @@ void CPSong::set_name(const char *p_name) { - if (p_name==NULL) { - variables.name[0]=0; + if (p_name == NULL) { + variables.name[0] = 0; return; } - - bool done=false; - for (int i=0;i<MAX_SONG_NAME;i++) { + bool done = false; + for (int i = 0; i < MAX_SONG_NAME; i++) { - - variables.name[i]=done?0:p_name[i]; - if (!done && p_name[i]==0) - done=true; + variables.name[i] = done ? 0 : p_name[i]; + if (!done && p_name[i] == 0) + done = true; } - variables.name[MAX_SONG_NAME-1]=0; /* just in case */ + variables.name[MAX_SONG_NAME - 1] = 0; /* just in case */ } -const char * CPSong::get_name() { +const char *CPSong::get_name() { return variables.name; - } void CPSong::set_message(const char *p_message) { - if (p_message==NULL) { - variables.message[0]=0; + if (p_message == NULL) { + variables.message[0] = 0; return; } - bool done=false; - for (int i=0;i<MAX_MESSAGE_LEN;i++) { + bool done = false; + for (int i = 0; i < MAX_MESSAGE_LEN; i++) { - - variables.message[i]=done?0:p_message[i]; - if (!done && p_message[i]==0) - done=true; + variables.message[i] = done ? 0 : p_message[i]; + if (!done && p_message[i] == 0) + done = true; } - variables.message[MAX_MESSAGE_LEN-1]=0; /* just in case */ + variables.message[MAX_MESSAGE_LEN - 1] = 0; /* just in case */ } -const char * CPSong::get_message() { +const char *CPSong::get_message() { return variables.message; - } void CPSong::set_row_highlight_minor(int p_hl_minor) { - variables.row_highlight_minor=p_hl_minor; + variables.row_highlight_minor = p_hl_minor; } int CPSong::get_row_highlight_minor() { @@ -90,21 +85,18 @@ int CPSong::get_row_highlight_minor() { void CPSong::set_row_highlight_major(int p_hl_major) { - variables.row_highlight_major=p_hl_major; - + variables.row_highlight_major = p_hl_major; } /* 0 .. 256 */ int CPSong::get_row_highlight_major() { return variables.row_highlight_major; - } /* 0 .. 256 */ void CPSong::set_mixing_volume(int p_mix_volume) { - - variables.mixing_volume=p_mix_volume; + variables.mixing_volume = p_mix_volume; } /* 0 .. 128 */ int CPSong::get_mixing_volume() { @@ -114,8 +106,7 @@ int CPSong::get_mixing_volume() { void CPSong::set_global_volume(int p_global_volume) { - - initial_variables.global_volume=p_global_volume; + initial_variables.global_volume = p_global_volume; } /* 0 .. 128 */ int CPSong::get_global_volume() { @@ -126,7 +117,7 @@ int CPSong::get_global_volume() { void CPSong::set_stereo_separation(int p_separation) { - variables.stereo_separation=p_separation; + variables.stereo_separation = p_separation; } /* 0 .. 128 */ int CPSong::get_stereo_separation() { @@ -136,8 +127,7 @@ int CPSong::get_stereo_separation() { void CPSong::set_stereo(bool p_stereo) { - variables.use_stereo=p_stereo; - + variables.use_stereo = p_stereo; } bool CPSong::is_stereo() { @@ -146,35 +136,25 @@ bool CPSong::is_stereo() { void CPSong::set_instruments(bool p_instruments) { - variables.use_instruments=p_instruments; - - + variables.use_instruments = p_instruments; } bool CPSong::has_instruments() { - return variables.use_instruments; - } void CPSong::set_linear_slides(bool p_linear_slides) { - variables.use_linear_slides=p_linear_slides; - - + variables.use_linear_slides = p_linear_slides; } bool CPSong::has_linear_slides() { return variables.use_linear_slides; - - } void CPSong::set_old_effects(bool p_old_effects) { - variables.old_effects=p_old_effects; - - + variables.old_effects = p_old_effects; } bool CPSong::has_old_effects() { @@ -183,21 +163,19 @@ bool CPSong::has_old_effects() { void CPSong::set_compatible_gxx(bool p_compatible_gxx) { - - variables.compatible_gxx=p_compatible_gxx; + variables.compatible_gxx = p_compatible_gxx; } bool CPSong::has_compatible_gxx() { return variables.compatible_gxx; - } void CPSong::set_speed(int p_speed) { - CP_ERR_COND(p_speed<MIN_SPEED); - CP_ERR_COND(p_speed>MAX_SPEED); - - initial_variables.speed=p_speed; + CP_ERR_COND(p_speed < MIN_SPEED); + CP_ERR_COND(p_speed > MAX_SPEED); + + initial_variables.speed = p_speed; } /* 1 .. 255 */ int CPSong::get_speed() { @@ -208,535 +186,465 @@ int CPSong::get_speed() { void CPSong::set_tempo(int p_tempo) { - CP_ERR_COND( p_tempo<MIN_TEMPO ); - CP_ERR_COND( p_tempo>MAX_TEMPO ); - - initial_variables.tempo=p_tempo; + CP_ERR_COND(p_tempo < MIN_TEMPO); + CP_ERR_COND(p_tempo > MAX_TEMPO); + + initial_variables.tempo = p_tempo; } /* MIN_TEMPO .. MAX_TEMPO */ int CPSong::get_tempo() { return initial_variables.tempo; - } /* MIN_TEMPO .. MAX_TEMPO */ -void CPSong::set_channel_pan(int p_channel,int p_pan) { +void CPSong::set_channel_pan(int p_channel, int p_pan) { + + CP_FAIL_INDEX(p_channel, CPPattern::WIDTH); + CP_FAIL_INDEX(p_pan, CHANNEL_MAX_PAN + 1); - CP_FAIL_INDEX(p_channel,CPPattern::WIDTH); - CP_FAIL_INDEX(p_pan,CHANNEL_MAX_PAN+1); - - initial_variables.channel[p_channel].pan=p_pan; + initial_variables.channel[p_channel].pan = p_pan; } /* 0 .. CHANNEL_MAX_PAN */ int CPSong::get_channel_pan(int p_channel) { - CP_FAIL_INDEX_V(p_channel,CPPattern::WIDTH,-1); - + CP_FAIL_INDEX_V(p_channel, CPPattern::WIDTH, -1); + return initial_variables.channel[p_channel].pan; } -void CPSong::set_channel_volume(int p_channel,int p_volume) { +void CPSong::set_channel_volume(int p_channel, int p_volume) { - CP_FAIL_INDEX(p_channel,CPPattern::WIDTH); - CP_FAIL_INDEX(p_volume,CHANNEL_MAX_VOLUME+1); - - - initial_variables.channel[p_channel].volume=p_volume; + CP_FAIL_INDEX(p_channel, CPPattern::WIDTH); + CP_FAIL_INDEX(p_volume, CHANNEL_MAX_VOLUME + 1); + initial_variables.channel[p_channel].volume = p_volume; } /* 0 .. CHANNEL_MAX_VOLUME */ - int CPSong::get_channel_volume(int p_channel) { - CP_FAIL_INDEX_V(p_channel,CPPattern::WIDTH,-1); - - return initial_variables.channel[p_channel].volume; + CP_FAIL_INDEX_V(p_channel, CPPattern::WIDTH, -1); + return initial_variables.channel[p_channel].volume; } -void CPSong::set_channel_chorus(int p_channel,int p_chorus) { +void CPSong::set_channel_chorus(int p_channel, int p_chorus) { - CP_FAIL_INDEX(p_channel,CPPattern::WIDTH); - CP_FAIL_INDEX(p_chorus,CHANNEL_MAX_CHORUS+1); - - - initial_variables.channel[p_channel].chorus=p_chorus; + CP_FAIL_INDEX(p_channel, CPPattern::WIDTH); + CP_FAIL_INDEX(p_chorus, CHANNEL_MAX_CHORUS + 1); + initial_variables.channel[p_channel].chorus = p_chorus; } /* 0 .. CHANNEL_MAX_CHORUS */ - int CPSong::get_channel_chorus(int p_channel) { - CP_FAIL_INDEX_V(p_channel,CPPattern::WIDTH,-1); - - return initial_variables.channel[p_channel].chorus; + CP_FAIL_INDEX_V(p_channel, CPPattern::WIDTH, -1); + return initial_variables.channel[p_channel].chorus; } -void CPSong::set_channel_reverb(int p_channel,int p_reverb) { +void CPSong::set_channel_reverb(int p_channel, int p_reverb) { - CP_FAIL_INDEX(p_channel,CPPattern::WIDTH); - CP_FAIL_INDEX(p_reverb,CHANNEL_MAX_REVERB+1); - - - initial_variables.channel[p_channel].reverb=p_reverb; + CP_FAIL_INDEX(p_channel, CPPattern::WIDTH); + CP_FAIL_INDEX(p_reverb, CHANNEL_MAX_REVERB + 1); + initial_variables.channel[p_channel].reverb = p_reverb; } /* 0 .. CHANNEL_MAX_CHORUS */ - int CPSong::get_channel_reverb(int p_channel) { - CP_FAIL_INDEX_V(p_channel,CPPattern::WIDTH,-1); - - return initial_variables.channel[p_channel].reverb; + CP_FAIL_INDEX_V(p_channel, CPPattern::WIDTH, -1); + return initial_variables.channel[p_channel].reverb; } -void CPSong::set_channel_surround(int p_channel,bool p_surround) { - - CP_FAIL_INDEX(p_channel,CPPattern::WIDTH); - initial_variables.channel[p_channel].surround=p_surround; +void CPSong::set_channel_surround(int p_channel, bool p_surround) { + CP_FAIL_INDEX(p_channel, CPPattern::WIDTH); + initial_variables.channel[p_channel].surround = p_surround; } bool CPSong::is_channel_surround(int p_channel) { - CP_FAIL_INDEX_V(p_channel,CPPattern::WIDTH,false); - - return initial_variables.channel[p_channel].surround; - + CP_FAIL_INDEX_V(p_channel, CPPattern::WIDTH, false); + return initial_variables.channel[p_channel].surround; } -void CPSong::set_channel_mute(int p_channel,bool p_mute) { +void CPSong::set_channel_mute(int p_channel, bool p_mute) { - CP_FAIL_INDEX(p_channel,CPPattern::WIDTH); - - initial_variables.channel[p_channel].mute=p_mute; + CP_FAIL_INDEX(p_channel, CPPattern::WIDTH); + initial_variables.channel[p_channel].mute = p_mute; } bool CPSong::is_channel_mute(int p_channel) { - CP_FAIL_INDEX_V(p_channel,CPPattern::WIDTH,false); - - return initial_variables.channel[p_channel].mute; + CP_FAIL_INDEX_V(p_channel, CPPattern::WIDTH, false); + return initial_variables.channel[p_channel].mute; } /* arrays of stuff */ -CPPattern* CPSong::get_pattern(int p_pattern) { +CPPattern *CPSong::get_pattern(int p_pattern) { - CP_FAIL_INDEX_V(p_pattern,MAX_PATTERNS, NULL); - - return &pattern[p_pattern]; + CP_FAIL_INDEX_V(p_pattern, MAX_PATTERNS, NULL); + return &pattern[p_pattern]; } -CPSample* CPSong::get_sample(int p_sample) { +CPSample *CPSong::get_sample(int p_sample) { - CP_FAIL_INDEX_V(p_sample,MAX_SAMPLES,NULL); + CP_FAIL_INDEX_V(p_sample, MAX_SAMPLES, NULL); return &sample[p_sample]; - - } -CPInstrument* CPSong::get_instrument(int p_instrument) { - +CPInstrument *CPSong::get_instrument(int p_instrument) { - CP_FAIL_INDEX_V(p_instrument,MAX_INSTRUMENTS,NULL); + CP_FAIL_INDEX_V(p_instrument, MAX_INSTRUMENTS, NULL); return &instrument[p_instrument]; - } int CPSong::get_order(int p_order) { - CP_FAIL_INDEX_V(p_order,MAX_ORDERS,CP_ORDER_NONE); - + CP_FAIL_INDEX_V(p_order, MAX_ORDERS, CP_ORDER_NONE); return order[p_order]; - } -void CPSong::set_order(int p_order,int p_pattern) { - - CP_FAIL_INDEX(p_order,MAX_ORDERS); +void CPSong::set_order(int p_order, int p_pattern) { - order[p_order]=p_pattern; + CP_FAIL_INDEX(p_order, MAX_ORDERS); + order[p_order] = p_pattern; } - void CPSong::clear_instrument_with_samples(int p_instrument) { - - CPInstrument *ins = get_instrument( p_instrument ); + + CPInstrument *ins = get_instrument(p_instrument); if (!ins) return; - - for (int i=0;i<CPNote::NOTES;i++) { - - CPSample *s=get_sample( ins->get_sample_number( i ) ); - + + for (int i = 0; i < CPNote::NOTES; i++) { + + CPSample *s = get_sample(ins->get_sample_number(i)); + if (!s) continue; - + if (s->get_sample_data().is_null()) continue; - + s->reset(); } ins->reset(); } void CPSong::make_instrument_from_sample(int p_sample) { - + if (!has_instruments()) return; - CP_ERR_COND(!get_sample( p_sample )); - - for (int i=0;i<MAX_INSTRUMENTS;i++) { - - - CPInstrument *ins=get_instrument(i); - - bool empty_slot=true; - for (int n=0;n<CPNote::NOTES;n++) { - - if (ins->get_sample_number(n)<MAX_SAMPLES) { - - empty_slot=false; + CP_ERR_COND(!get_sample(p_sample)); + + for (int i = 0; i < MAX_INSTRUMENTS; i++) { + + CPInstrument *ins = get_instrument(i); + + bool empty_slot = true; + for (int n = 0; n < CPNote::NOTES; n++) { + + if (ins->get_sample_number(n) < MAX_SAMPLES) { + + empty_slot = false; break; } } - + if (!empty_slot) continue; - - for (int n=0;n<CPNote::NOTES;n++) { - - ins->set_sample_number(n,p_sample); - ins->set_note_number(n,n); + + for (int n = 0; n < CPNote::NOTES; n++) { + + ins->set_sample_number(n, p_sample); + ins->set_note_number(n, n); } - - ins->set_name( get_sample( p_sample )->get_name() ); + + ins->set_name(get_sample(p_sample)->get_name()); break; } - } void CPSong::make_instruments_from_samples() { - - for (int i=0;i<MAX_SAMPLES;i++) { - - CPInstrument *ins=get_instrument( i ); - + + for (int i = 0; i < MAX_SAMPLES; i++) { + + CPInstrument *ins = get_instrument(i); + if (!ins) continue; - + ins->reset(); - - CPSample *s=get_sample( i ); - + + CPSample *s = get_sample(i); + if (!s) continue; - - ins->set_name( s->get_name() ); - + + ins->set_name(s->get_name()); + if (s->get_sample_data().is_null()) continue; - - - - - for(int j=0;j<CPNote::NOTES;j++) - ins->set_sample_number( j, i ); - - - + + for (int j = 0; j < CPNote::NOTES; j++) + ins->set_sample_number(j, i); } } -void CPSong::reset(bool p_clear_patterns,bool p_clear_samples,bool p_clear_instruments,bool p_clear_variables) { - +void CPSong::reset(bool p_clear_patterns, bool p_clear_samples, bool p_clear_instruments, bool p_clear_variables) { + if (p_clear_variables) { - variables.name[0]=0; - variables.message[0]=0; - variables.row_highlight_major=16; - variables.row_highlight_minor=4; - variables.mixing_volume=48; - variables.old_effects=false; + variables.name[0] = 0; + variables.message[0] = 0; + variables.row_highlight_major = 16; + variables.row_highlight_minor = 4; + variables.mixing_volume = 48; + variables.old_effects = false; if (p_clear_instruments) //should not be cleared, if not clearing instruments!! - variables.use_instruments=false; - variables.stereo_separation=128; - variables.use_linear_slides=true; - variables.use_stereo=true; - - initial_variables.global_volume=128; - initial_variables.speed=6; - initial_variables.tempo=125; - - for (int i=0;i<CPPattern::WIDTH;i++) { - - initial_variables.channel[i].pan=32; - initial_variables.channel[i].volume=CHANNEL_MAX_VOLUME; - initial_variables.channel[i].mute=false; - initial_variables.channel[i].surround=false; - initial_variables.channel[i].chorus=0; - initial_variables.channel[i].reverb=0; - + variables.use_instruments = false; + variables.stereo_separation = 128; + variables.use_linear_slides = true; + variables.use_stereo = true; + + initial_variables.global_volume = 128; + initial_variables.speed = 6; + initial_variables.tempo = 125; + + for (int i = 0; i < CPPattern::WIDTH; i++) { + + initial_variables.channel[i].pan = 32; + initial_variables.channel[i].volume = CHANNEL_MAX_VOLUME; + initial_variables.channel[i].mute = false; + initial_variables.channel[i].surround = false; + initial_variables.channel[i].chorus = 0; + initial_variables.channel[i].reverb = 0; } - - effects.chorus.delay_ms=6; - effects.chorus.separation_ms=3; - effects.chorus.depth_ms10=6, - effects.chorus.speed_hz10=5; - effects.reverb_mode=REVERB_MODE_ROOM; + + effects.chorus.delay_ms = 6; + effects.chorus.separation_ms = 3; + effects.chorus.depth_ms10 = 6, + effects.chorus.speed_hz10 = 5; + effects.reverb_mode = REVERB_MODE_ROOM; } - + if (p_clear_samples) { - for (int i=0;i<MAX_SAMPLES;i++) + for (int i = 0; i < MAX_SAMPLES; i++) get_sample(i)->reset(); } - + if (p_clear_instruments) { - for (int i=0;i<MAX_INSTRUMENTS;i++) + for (int i = 0; i < MAX_INSTRUMENTS; i++) get_instrument(i)->reset(); } - + if (p_clear_patterns) { - for (int i=0;i<MAX_PATTERNS;i++) + for (int i = 0; i < MAX_PATTERNS; i++) get_pattern(i)->clear(); - - for (int i=0;i<MAX_ORDERS;i++) - set_order( i, CP_ORDER_NONE ); + + for (int i = 0; i < MAX_ORDERS; i++) + set_order(i, CP_ORDER_NONE); } - - } - CPSong::ReverbMode CPSong::get_reverb_mode() { - + return effects.reverb_mode; } void CPSong::set_reverb_mode(ReverbMode p_mode) { - - effects.reverb_mode=p_mode; + + effects.reverb_mode = p_mode; } void CPSong::set_chorus_delay_ms(int p_amount) { - - effects.chorus.delay_ms=p_amount; + + effects.chorus.delay_ms = p_amount; } void CPSong::set_chorus_separation_ms(int p_amount) { - - effects.chorus.separation_ms=p_amount; + effects.chorus.separation_ms = p_amount; } void CPSong::set_chorus_depth_ms10(int p_amount) { - - effects.chorus.depth_ms10=p_amount; - + + effects.chorus.depth_ms10 = p_amount; } void CPSong::set_chorus_speed_hz10(int p_amount) { - - effects.chorus.speed_hz10=p_amount; - + + effects.chorus.speed_hz10 = p_amount; } int CPSong::get_chorus_delay_ms() { - + return effects.chorus.delay_ms; - } int CPSong::get_chorus_separation_ms() { - + return effects.chorus.separation_ms; } int CPSong::get_chorus_depth_ms10() { - + return effects.chorus.depth_ms10; - } int CPSong::get_chorus_speed_hz10() { - + return effects.chorus.speed_hz10; - } void CPSong::cleanup_unused_patterns() { - - for (int i=0;i<MAX_PATTERNS;i++) { - - bool used=false; + + for (int i = 0; i < MAX_PATTERNS; i++) { + + bool used = false; if (get_pattern(i)->is_empty()) continue; - - for (int j=0;j<MAX_ORDERS;j++) { - - if (get_order(j)==i) { - used=true; - + + for (int j = 0; j < MAX_ORDERS; j++) { + + if (get_order(j) == i) { + used = true; } } - + if (!used) get_pattern(i)->clear(); } - } -void CPSong::cleanup_unused_instruments(){ - +void CPSong::cleanup_unused_instruments() { + if (!has_instruments()) return; - + bool instr_found[MAX_INSTRUMENTS]; - for (int i=0;i<MAX_INSTRUMENTS;i++) - instr_found[i]=false; - - for (int i=0;i<MAX_PATTERNS;i++) { - + for (int i = 0; i < MAX_INSTRUMENTS; i++) + instr_found[i] = false; + + for (int i = 0; i < MAX_PATTERNS; i++) { + if (get_pattern(i)->is_empty()) continue; - - for (int row=0;row<get_pattern(i)->get_length();row++) { - - - for (int col=0;col<CPPattern::WIDTH;col++) { - + + for (int row = 0; row < get_pattern(i)->get_length(); row++) { + + for (int col = 0; col < CPPattern::WIDTH; col++) { + CPNote n; - n=get_pattern(i)->get_note( col,row ); - - if (n.instrument<MAX_INSTRUMENTS) - instr_found[n.instrument]=true; - + n = get_pattern(i)->get_note(col, row); + + if (n.instrument < MAX_INSTRUMENTS) + instr_found[n.instrument] = true; } - } - } - - for (int i=0;i<MAX_INSTRUMENTS;i++) + + for (int i = 0; i < MAX_INSTRUMENTS; i++) if (!instr_found[i]) get_instrument(i)->reset(); - - } -void CPSong::cleanup_unused_samples(){ - +void CPSong::cleanup_unused_samples() { + if (!has_instruments()) return; - + bool sample_found[MAX_SAMPLES]; - for (int i=0;i<MAX_INSTRUMENTS;i++) - sample_found[i]=false; - - for (int i=0;i<MAX_PATTERNS;i++) { - + for (int i = 0; i < MAX_INSTRUMENTS; i++) + sample_found[i] = false; + + for (int i = 0; i < MAX_PATTERNS; i++) { + if (get_pattern(i)->is_empty()) continue; - - - for (int row=0;row<get_pattern(i)->get_length();row++) { - - - for (int col=0;col<CPPattern::WIDTH;col++) { - + + for (int row = 0; row < get_pattern(i)->get_length(); row++) { + + for (int col = 0; col < CPPattern::WIDTH; col++) { + CPNote n; - n=get_pattern(i)->get_note( col,row ); - - if (n.instrument>=MAX_SAMPLES) + n = get_pattern(i)->get_note(col, row); + + if (n.instrument >= MAX_SAMPLES) continue; - + if (has_instruments()) { - - for (int nt=0;nt<CPNote::NOTES;nt++) { - - int smp=get_instrument(n.instrument)->get_sample_number(nt); - if (smp<MAX_SAMPLES) - sample_found[smp]=true; + + for (int nt = 0; nt < CPNote::NOTES; nt++) { + + int smp = get_instrument(n.instrument)->get_sample_number(nt); + if (smp < MAX_SAMPLES) + sample_found[smp] = true; } - + } else { - if (n.instrument<MAX_SAMPLES) - sample_found[n.instrument]=true; + if (n.instrument < MAX_SAMPLES) + sample_found[n.instrument] = true; } - } - } - } - - for (int i=0;i<MAX_SAMPLES;i++) + + for (int i = 0; i < MAX_SAMPLES; i++) if (!sample_found[i]) get_sample(i)->reset(); - } -void CPSong::cleanup_unused_orders(){ - - bool finito=false; - for (int j=0;j<MAX_ORDERS;j++) { - - - if (get_order(j)==CP_ORDER_NONE) - finito=true; +void CPSong::cleanup_unused_orders() { + + bool finito = false; + for (int j = 0; j < MAX_ORDERS; j++) { + + if (get_order(j) == CP_ORDER_NONE) + finito = true; if (finito) - set_order(j,CP_ORDER_NONE); - + set_order(j, CP_ORDER_NONE); } - } void CPSong::clear_all_default_pan() { - - for (int i=0;i<MAX_INSTRUMENTS;i++) - get_instrument(i)->set_pan_default_enabled( false ); //die! - - for (int i=0;i<MAX_SAMPLES;i++) - get_sample(i)->set_pan_enabled( false ); //die! - -} + for (int i = 0; i < MAX_INSTRUMENTS; i++) + get_instrument(i)->set_pan_default_enabled(false); //die! -void CPSong::clear_all_default_vol(){ - - for (int i=0;i<MAX_SAMPLES;i++) - get_sample(i)->set_default_volume( 64 ); //die! - for (int i=0;i<MAX_INSTRUMENTS;i++) - get_instrument(i)->set_volume_global_amount( CPInstrument::MAX_VOLUME ); - + for (int i = 0; i < MAX_SAMPLES; i++) + get_sample(i)->set_pan_enabled(false); //die! } +void CPSong::clear_all_default_vol() { -int CPSong::get_order_in_use_count() { + for (int i = 0; i < MAX_SAMPLES; i++) + get_sample(i)->set_default_volume(64); //die! + for (int i = 0; i < MAX_INSTRUMENTS; i++) + get_instrument(i)->set_volume_global_amount(CPInstrument::MAX_VOLUME); +} +int CPSong::get_order_in_use_count() { int order_count = 0; - - for (int i=(MAX_ORDERS-1);i>=0;i--) { - - if (get_order(i)!=CP_ORDER_NONE) { - order_count=i+1; + for (int i = (MAX_ORDERS - 1); i >= 0; i--) { + + if (get_order(i) != CP_ORDER_NONE) { + order_count = i + 1; break; } } - + return order_count; } int CPSong::get_pattern_in_use_count() { - - int pattern_count=0; - - for (int i=(CPSong::MAX_PATTERNS-1);i>=0;i--) { + int pattern_count = 0; + + for (int i = (CPSong::MAX_PATTERNS - 1); i >= 0; i--) { - if (!get_pattern(i)->is_empty()) { - pattern_count=i+1; + pattern_count = i + 1; break; } } @@ -746,28 +654,27 @@ int CPSong::get_pattern_in_use_count() { int CPSong::get_instrument_in_use_count() { - int instrument_count=0; - - for (int i=(CPSong::MAX_INSTRUMENTS-1);i>=0;i--) { + int instrument_count = 0; + + for (int i = (CPSong::MAX_INSTRUMENTS - 1); i >= 0; i--) { CPInstrument *ins = get_instrument(i); - bool in_use=false; - - for (int s = 0 ; s < CPNote::NOTES ; s++ ) { - + bool in_use = false; + + for (int s = 0; s < CPNote::NOTES; s++) { + int smp_idx = ins->get_sample_number(s); - if (smp_idx<0 || smp_idx>=CPSong::MAX_SAMPLES) + if (smp_idx < 0 || smp_idx >= CPSong::MAX_SAMPLES) continue; - + if (!get_sample(smp_idx)->get_sample_data().is_null()) { - in_use=true; + in_use = true; break; } - } - + if (in_use) { - instrument_count=i+1; + instrument_count = i + 1; break; } } @@ -777,33 +684,32 @@ int CPSong::get_instrument_in_use_count() { #include <stdio.h> int CPSong::get_channels_in_use() { - int max=0; - - for (int p=0;p<CPSong::MAX_PATTERNS;p++) { - + int max = 0; + + for (int p = 0; p < CPSong::MAX_PATTERNS; p++) { + CPPattern *pat = get_pattern(p); if (pat->is_empty()) continue; - - - for (int c=(CPPattern::WIDTH-1);c>=0;c--) { - - if (c<max) + + for (int c = (CPPattern::WIDTH - 1); c >= 0; c--) { + + if (c < max) break; - - bool has_note=false; - for (int r=0;r<pat->get_length();r++) { - - CPNote n = pat->get_note( c, r ); + + bool has_note = false; + for (int r = 0; r < pat->get_length(); r++) { + + CPNote n = pat->get_note(c, r); if (!n.is_empty()) { - has_note=true; + has_note = true; break; } } - + if (has_note) { - - max=c+1; + + max = c + 1; } } } @@ -811,141 +717,132 @@ int CPSong::get_channels_in_use() { return max; } - void CPSong::separate_in_one_sample_instruments(int p_instrument) { - CP_ERR_COND( !variables.use_instruments ); - CP_FAIL_INDEX( p_instrument, MAX_INSTRUMENTS ); + CP_ERR_COND(!variables.use_instruments); + CP_FAIL_INDEX(p_instrument, MAX_INSTRUMENTS); + + int remapped_count = 0; - int remapped_count=0; - signed char remap[MAX_SAMPLES]; - - for (int i=0;i<MAX_SAMPLES;i++) { - - remap[i]=-1; + + for (int i = 0; i < MAX_SAMPLES; i++) { + + remap[i] = -1; } - + /* Find remaps */ - CPInstrument *ins=get_instrument(p_instrument); - for (int i=0;i<CPNote::NOTES;i++) { - + CPInstrument *ins = get_instrument(p_instrument); + for (int i = 0; i < CPNote::NOTES; i++) { + int sn = ins->get_sample_number(i); - + // check for unusable sample - if (sn<0 || sn>=MAX_SAMPLES || get_sample(sn)->get_sample_data().is_null()) + if (sn < 0 || sn >= MAX_SAMPLES || get_sample(sn)->get_sample_data().is_null()) continue; - printf("sample %i\n",sn); - if ( remap[sn] !=-1 ) { - printf("already mapped to %i\n",remap[sn]); + printf("sample %i\n", sn); + if (remap[sn] != -1) { + printf("already mapped to %i\n", remap[sn]); continue; } - - printf("isn't remapped\n"); - + + printf("isn't remapped\n"); + // find remap - - for (int j=0;j<MAX_INSTRUMENTS;j++) { - - if (!get_instrument(j)->is_empty()) + + for (int j = 0; j < MAX_INSTRUMENTS; j++) { + + if (!get_instrument(j)->is_empty()) continue; - - printf("map to %i\n",j); - + + printf("map to %i\n", j); + //copy - *get_instrument(j)=*ins; - + *get_instrument(j) = *ins; + // assign samples - for (int k=0;k<CPNote::NOTES;k++) { - - get_instrument(j)->set_note_number(k,k); - get_instrument(j)->set_sample_number(k,sn); - } - remap[sn]=j; + for (int k = 0; k < CPNote::NOTES; k++) { + + get_instrument(j)->set_note_number(k, k); + get_instrument(j)->set_sample_number(k, sn); + } + remap[sn] = j; remapped_count++; break; } - - CP_ERR_COND(remap[sn]==-1); // no more free instruments + + CP_ERR_COND(remap[sn] == -1); // no more free instruments } - - printf("remapped %i\n",remapped_count); - - if (remapped_count<2) { + + printf("remapped %i\n", remapped_count); + + if (remapped_count < 2) { //undo if only one is remapped - for (int i=0;i<MAX_SAMPLES;i++) { - - if (remap[i]!=-1) { - + for (int i = 0; i < MAX_SAMPLES; i++) { + + if (remap[i] != -1) { + get_instrument(remap[i])->reset(); } } return; } - + /* remap all song */ - - for (int p=0;p<CPSong::MAX_PATTERNS;p++) { - + + for (int p = 0; p < CPSong::MAX_PATTERNS; p++) { + CPPattern *pat = get_pattern(p); if (pat->is_empty()) continue; - - - for (int c=0;c<CPPattern::WIDTH;c++) { - - for (int r=0;r<pat->get_length();r++) { - - CPNote n = pat->get_note(c,r); - if (n.note<CPNote::NOTES && n.instrument==p_instrument) { - + + for (int c = 0; c < CPPattern::WIDTH; c++) { + + for (int r = 0; r < pat->get_length(); r++) { + + CPNote n = pat->get_note(c, r); + if (n.note < CPNote::NOTES && n.instrument == p_instrument) { + int sn = ins->get_sample_number(n.note); - if (remap[sn]==-1) - pat->set_note(c,r,CPNote()); + if (remap[sn] == -1) + pat->set_note(c, r, CPNote()); else { - - n.instrument=remap[sn]; - pat->set_note(c,r,n); + + n.instrument = remap[sn]; + pat->set_note(c, r, n); } } } } } - + ins->reset(); - } - CPSong::CPSong() { - + reset(); } CPSong::~CPSong() { - } - - - int get_song_next_order_idx(CPSong *p_song, int p_order_idx) { - int baseorder,order_counter; + int baseorder, order_counter; - order_counter=-1; + order_counter = -1; - baseorder=p_order_idx; + baseorder = p_order_idx; do { baseorder++; - if ( baseorder>(CPSong::MAX_ORDERS-1) ) baseorder=0; + if (baseorder > (CPSong::MAX_ORDERS - 1)) baseorder = 0; order_counter++; - } while ( (p_song->get_order(baseorder)>=(CPSong::MAX_PATTERNS) ) && (order_counter<CPSong::MAX_ORDERS) ); + } while ((p_song->get_order(baseorder) >= (CPSong::MAX_PATTERNS)) && (order_counter < CPSong::MAX_ORDERS)); - - if (order_counter==CPSong::MAX_ORDERS) { + if (order_counter == CPSong::MAX_ORDERS) { return -1; @@ -953,5 +850,4 @@ int get_song_next_order_idx(CPSong *p_song, int p_order_idx) { return baseorder; } - } |
