001
002 package ibxm;
003
004 public 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 }