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}