LTVA1 1 год назад
Родитель
Сommit
80e645cb52
1 измененных файлов с 4 добавлено и 3 удалено
  1. 4 3
      sound_engine/sound_engine.c

+ 4 - 3
sound_engine/sound_engine.c

@@ -109,16 +109,17 @@ void sound_engine_fill_buffer(
             SoundEngineChannel* channel = &sound_engine->channel[chan];
 
             if(channel->frequency > 0) {
+                channel->sync_bit = 0;
                 uint32_t prev_acc = channel->accumulator;
 
                 channel->accumulator += channel->frequency;
 
-                channel->sync_bit |= (channel->accumulator & ACC_LENGTH);
+                channel->sync_bit |= (channel->accumulator > ACC_LENGTH ? 1 : 0);
 
                 channel->accumulator &= ACC_LENGTH - 1;
 
                 if(channel->flags & SE_ENABLE_HARD_SYNC) {
-                    uint8_t hard_sync_src = channel->hard_sync == 0xff ? i : channel->hard_sync;
+                    uint8_t hard_sync_src = channel->hard_sync == 0xff ? chan : channel->hard_sync;
 
                     if(sound_engine->channel[hard_sync_src].sync_bit) {
                         channel->accumulator = 0;
@@ -129,7 +130,7 @@ void sound_engine_fill_buffer(
                     sound_engine_osc(sound_engine, channel, prev_acc) - WAVE_AMP / 2;
 
                 if(channel->flags & SE_ENABLE_RING_MOD) {
-                    uint8_t ring_mod_src = channel->ring_mod == 0xff ? i : channel->ring_mod;
+                    uint8_t ring_mod_src = channel->ring_mod == 0xff ? chan : channel->ring_mod;
                     channel_output[chan] =
                         channel_output[chan] * channel_output[ring_mod_src] / WAVE_AMP;
                 }