@@ -38,7 +38,7 @@ pub fn fill_lookup_tables(output_sample_rate: u32) {
38
38
let key_scaling_level_template = [ 64 , 32 , 24 , 19 , 16 , 12 , 11 , 10 , 8 , 6 , 5 , 4 , 3 , 2 , 1 , 0 ] ;
39
39
for octave in 0 ..8 {
40
40
for i in 0 ..16 {
41
- KEY_SCALING_LEVEL_TABLE [ octave* 16 +i] = ( octave* 8 -key_scaling_level_template[ i] ) . max ( 0 ) as u8 ;
41
+ KEY_SCALING_LEVEL_TABLE [ octave* 16 +i] = ( ( octave* 8 ) as isize -key_scaling_level_template[ i] as isize ) . max ( 0 ) as u8 ;
42
42
}
43
43
}
44
44
let rate_factor = ( 1 <<ENVELOPE_PHASE_SHIFT ) as f32 /output_sample_rate as f32 * ENVELOPE_CLOCK_FREQUENCY ;
@@ -134,7 +134,7 @@ impl Oscillator {
134
134
} ,
135
135
EnvelopeState :: Attack => {
136
136
self . envelope_phase += self . settings . attack_increment ;
137
- self . envelope_volume + = ( ! ( self . envelope_volume /8 ) ) * ( self . envelope_phase >>ENVELOPE_PHASE_SHIFT ) ;
137
+ self . envelope_volume = ( self . envelope_volume as i32 + ( - 1 - ( self . envelope_volume /8 ) as i32 ) * ( self . envelope_phase >>ENVELOPE_PHASE_SHIFT ) as i32 ) as u32 ;
138
138
self . envelope_phase &= ENVELOPE_PHASE_MASK ;
139
139
if self . envelope_volume > ENVELOPE_MAX {
140
140
self . envelope_volume = 0 ;
@@ -176,8 +176,8 @@ impl Oscillator {
176
176
177
177
fn calculate_sample ( & mut self , lfo : & LowFrequencyOscillator , mut volume : u32 , phase : i32 ) -> i32 {
178
178
let silent = volume >= SICLENCE_THRESHOLD ;
179
- let vibrato_value = ( ( self . settings . vibrato >>lfo. vibrato_shift ) ^lfo. vibrato_sign_mask ) -lfo. vibrato_sign_mask ;
180
- self . phase = self . phase . wrapping_add ( self . settings . phase_increment +vibrato_value) ;
179
+ let vibrato_value = ( ( self . settings . vibrato >>lfo. vibrato_shift ) ^lfo. vibrato_sign_mask ) as i32 -lfo. vibrato_sign_mask as i32 ;
180
+ self . phase = ( self . phase as i32 ) . wrapping_add ( self . settings . phase_increment as i32 +vibrato_value) as u32 ;
181
181
volume += lfo. tremolo_value * ( self . settings . tremolo_enabled as u32 ) ;
182
182
let signal = calculate_sample ( self . settings . waveform , ( volume as i32 ) <<3 , phase& PHASE_MASK ) ;
183
183
if silent { 0 } else { signal }
@@ -344,7 +344,7 @@ macro_rules! fill_buffer {
344
344
( $cpu: ident, $bus: ident, $audio_renderer: ident, $buffer: ident, $signal: ident, $T: ty, $( $convert: tt) * ) => {
345
345
let sample_count = $buffer. len( ) /$audio_renderer. output_channels;
346
346
$audio_renderer. clock_cycles_per_sample = ( CLOCK_FREQUENCY_FACTOR as f64 * $bus. config. timing. clock_frequency/$audio_renderer. output_sample_rate as f64 ) as u64 ;
347
- $audio_renderer. cycle_counter = CLOCK_FREQUENCY_FACTOR * $cpu. cycle_counter-$audio_renderer. clock_cycles_per_sample* sample_count as u64 ;
347
+ $audio_renderer. cycle_counter = ( CLOCK_FREQUENCY_FACTOR as i64 * $cpu. cycle_counter as i64 -$audio_renderer. clock_cycles_per_sample as i64 * sample_count as i64 ) . max ( 0 ) as u64 ;
348
348
if $cpu. execution_state != crate :: cpu:: ExecutionState :: Running {
349
349
for element in $buffer. iter_mut( ) {
350
350
let $signal: i16 = 0 ;
0 commit comments