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 }