Просмотр исходного кода

fix new filter bugs, add scroll to topmost pattern row hotkey

LTVA1 2 лет назад
Родитель
Сommit
540e22af96

+ 7 - 1
input/pattern.c

@@ -277,12 +277,18 @@ void edit_pattern_step(FlizzerTrackerApp *tracker, TrackerSongPatternStep *step,
 
 void pattern_edit_event(FlizzerTrackerApp *tracker, FlizzerTrackerEvent *event)
 {
-    if (event->input.key == InputKeyUp && event->input.type == InputTypeLong && !(tracker->editing))
+    if (event->input.key == InputKeyDown && event->input.type == InputTypeLong && !(tracker->editing))
     {
         flipbit(tracker->tracker_engine.channel[tracker->current_channel].channel_flags, TEC_DISABLED);
         return;
     }
 
+    if (event->input.key == InputKeyUp && event->input.type == InputTypeLong && !(tracker->editing))
+    {
+        tracker->tracker_engine.pattern_position = 0; // return to pattern 1st row
+        return;
+    }
+
     uint8_t sequence_position = tracker->tracker_engine.sequence_position;
     uint8_t current_pattern = tracker->tracker_engine.song->sequence.sequence_step[sequence_position].pattern_indices[tracker->current_channel];
     uint16_t pattern_step = tracker->tracker_engine.pattern_position;

+ 0 - 2
sound_engine/sound_engine_defs.h

@@ -72,8 +72,6 @@ typedef struct
 
 typedef struct
 {
-    // int32_t f, q, p;
-    // int32_t b0, b1, b2, b3, b4; // filter coefficients
     int32_t cutoff, resonance, low, high, band;
 } SoundEngineFilter;
 

+ 6 - 5
sound_engine/sound_engine_filter.c

@@ -2,12 +2,13 @@
 
 void sound_engine_filter_set_coeff(SoundEngineFilter *flt, uint32_t frequency, uint16_t resonance)
 {
-    flt->cutoff = frequency << 3;
-    flt->resonance = ((int32_t)resonance * 3 / 2) - 200;
+    flt->cutoff = (frequency << 5);
+    flt->resonance = ((int32_t)resonance * 11 / 6) - 200;
 }
 
 void sound_engine_filter_cycle(SoundEngineFilter *flt, int32_t input) // don't ask me how it works, stolen from Furnace tracker TSU synth
 {
+    input /= 4;
     flt->low = flt->low + ((flt->cutoff * flt->band) >> 16);
     flt->high = input - flt->low - (((256 - flt->resonance) * flt->band) >> 8);
     flt->band = ((flt->cutoff * flt->high) >> 16) + flt->band;
@@ -15,15 +16,15 @@ void sound_engine_filter_cycle(SoundEngineFilter *flt, int32_t input) // don't a
 
 int32_t sound_engine_output_lowpass(SoundEngineFilter *flt)
 {
-    return flt->low;
+    return flt->low * 4;
 }
 
 int32_t sound_engine_output_highpass(SoundEngineFilter *flt)
 {
-    return flt->high;
+    return flt->high * 4;
 }
 
 int32_t sound_engine_output_bandpass(SoundEngineFilter *flt)
 {
-    return flt->band;
+    return flt->band * 4;
 }

+ 4 - 0
tracker_engine/tracker_engine.c

@@ -219,6 +219,10 @@ void tracker_engine_trigger_instrument_internal(TrackerEngine *tracker_engine, u
         te_channel->filter_cutoff = ((uint16_t)pinst->filter_cutoff << 3);
         te_channel->filter_resonance = (uint16_t)pinst->filter_resonance;
 
+        se_channel->filter.low = 0;
+        se_channel->filter.high = 0;
+        se_channel->filter.band = 0;
+
         sound_engine_filter_set_coeff(&se_channel->filter, te_channel->filter_cutoff, te_channel->filter_resonance);
     }