package ibxm; public class Instrument { public String name; public int vibrato_type, vibrato_sweep; public int vibrato_depth, vibrato_rate; public boolean volume_envelope_active, panning_envelope_active; public int volume_fade_out; private Envelope volume_envelope, panning_envelope; private int[] key_to_sample; private Sample[] samples; public Instrument() { name = ""; set_volume_envelope( new Envelope() ); set_panning_envelope( new Envelope() ); key_to_sample = new int[ 96 ]; set_num_samples( 1 ); } public Envelope get_volume_envelope() { return volume_envelope; } public void set_volume_envelope( Envelope envelope ) { if( envelope != null ) { volume_envelope = envelope; } } public Envelope get_panning_envelope() { return panning_envelope; } public void set_panning_envelope( Envelope envelope ) { if( envelope != null ) { panning_envelope = envelope; } } public Sample get_sample_from_key( int key ) { int sample_idx; sample_idx = 0; if( key > 0 && key <= key_to_sample.length ) { sample_idx = key_to_sample[ key - 1 ]; } return get_sample( sample_idx ); } public void set_key_to_sample( int key, int sample ) { if( key > 0 && key <= key_to_sample.length ) { key_to_sample[ key - 1 ] = sample; } } public int get_num_samples() { return samples.length; } public void set_num_samples( int num_samples ) { if( num_samples < 1 ) { num_samples = 1; } samples = new Sample[ num_samples ]; set_sample( 0, null ); } public Sample get_sample( int sample_index ) { Sample sample; sample = null; if( sample_index >= 0 && sample_index < samples.length ) { sample = samples[ sample_index ]; } if( sample == null ) { sample = samples[ 0 ]; } return sample; } public void set_sample( int sample_index, Sample sample ) { if( sample_index >= 0 && sample_index < samples.length ) { samples[ sample_index ] = sample; } if( samples[ 0 ] == null ) { samples[ 0 ] = new Sample(); } } }