    001
    002package ibxm;
    003
    004public class Instrument {
    005    public String name;
    006    public int vibrato_type, vibrato_sweep;
    007    public int vibrato_depth, vibrato_rate;
    008    public boolean volume_envelope_active, panning_envelope_active;
    009    public int volume_fade_out;
    010
    011    private Envelope volume_envelope, panning_envelope;
    012    private int[] key_to_sample;
    013    private Sample[] samples;
    014
    015    public Instrument() {
    016        name = "";
    017        set_volume_envelope( new Envelope() );
    018        set_panning_envelope( new Envelope() );
    019        key_to_sample = new int[ 96 ];
    020        set_num_samples( 1 );
    021    }
    022
    023    public Envelope get_volume_envelope() {
    024        return volume_envelope;
    025    }
    026
    027    public void set_volume_envelope( Envelope envelope ) {
    028        if( envelope != null ) {
    029            volume_envelope = envelope;
    030        }
    031    }
    032
    033    public Envelope get_panning_envelope() {
    034        return panning_envelope;
    035    }
    036
    037    public void set_panning_envelope( Envelope envelope ) {
    038        if( envelope != null ) {
    039            panning_envelope = envelope;
    040        }
    041    }
    042
    043    public Sample get_sample_from_key( int key ) {
    044        int sample_idx;
    045        sample_idx = 0;
    046        if( key > 0 && key <= key_to_sample.length ) {
    047            sample_idx = key_to_sample[ key - 1 ];
    048        }
    049        return get_sample( sample_idx );
    050    }
    051
    052    public void set_key_to_sample( int key, int sample ) {
    053        if( key > 0 && key <= key_to_sample.length ) {
    054            key_to_sample[ key - 1 ] = sample;
    055        }
    056    }
    057
    058    public int get_num_samples() {
    059        return samples.length;
    060    }
    061
    062    public void set_num_samples( int num_samples ) {
    063        if( num_samples < 1 ) {
    064            num_samples = 1;
    065        }
    066        samples = new Sample[ num_samples ];
    067        set_sample( 0, null );
    068    }
    069
    070    public Sample get_sample( int sample_index ) {
    071        Sample sample;
    072        sample = null;
    073        if( sample_index >= 0 && sample_index < samples.length ) {
    074            sample = samples[ sample_index ];
    075        }
    076        if( sample == null ) {
    077            sample = samples[ 0 ];
    078        }
    079        return sample;
    080    }
    081
    082    public void set_sample( int sample_index, Sample sample ) {
    083        if( sample_index >= 0 && sample_index < samples.length ) {
    084            samples[ sample_index ] = sample;
    085        }
    086        if( samples[ 0 ] == null ) {
    087            samples[ 0 ] = new Sample();
    088        }
    089    }
    090}