LTVA1 пре 2 година
родитељ
комит
7ac5b1ce39
5 измењених фајлова са 19 додато и 16 уклоњено
  1. 1 1
      flizzer_tracker.h
  2. 13 12
      input/pattern.c
  3. 2 0
      input_event.c
  4. 2 2
      tracker_engine/tracker_engine.c
  5. 1 1
      view/instrument_editor.c

+ 1 - 1
flizzer_tracker.h

@@ -187,7 +187,7 @@ typedef struct
     uint8_t selected_param;
 
     uint8_t mode, focus;
-    uint8_t patternx, current_channel, current_digit, program_position, current_program_step, current_instrument, current_note;
+    uint8_t patternx, current_channel, current_digit, program_position, current_program_step, current_instrument, current_note, current_volume;
 
     uint8_t inst_editor_shift;
 

+ 13 - 12
input/pattern.c

@@ -61,7 +61,7 @@ void edit_instrument(FlizzerTrackerApp *tracker, TrackerSongPatternStep *step, i
     {
         if (delta > 0)
         {
-            inst = 0;
+            inst = tracker->current_instrument;
         }
 
         else
@@ -75,26 +75,27 @@ void edit_instrument(FlizzerTrackerApp *tracker, TrackerSongPatternStep *step, i
     set_instrument(step, (uint8_t)inst);
 }
 
-void edit_volume(TrackerSongPatternStep *step, int8_t delta)
+void edit_volume(FlizzerTrackerApp *tracker, TrackerSongPatternStep *step, int8_t delta)
 {
     int16_t vol = tracker_engine_get_volume(step);
 
-    if (vol == MUS_NOTE_VOLUME_NONE)
+    vol = tracker->current_volume;
+
+    if (vol + delta < 0)
     {
-        if (delta > 0)
-        {
-            vol = 0;
-        }
+        vol = MUS_NOTE_VOLUME_NONE - 1 - delta;
+    }
 
-        else
-        {
-            vol = MUS_NOTE_VOLUME_NONE - 1;
-        }
+    if (vol + delta >= MUS_NOTE_VOLUME_NONE)
+    {
+        vol = 0 - delta;
     }
 
     clamp(vol, delta, 0, MUS_NOTE_VOLUME_NONE - 1);
 
     set_volume(step, (uint8_t)vol);
+
+    tracker->current_volume = vol;
 }
 
 void edit_command(TrackerSongPatternStep *step, uint8_t digit, int8_t delta)
@@ -253,7 +254,7 @@ void edit_pattern_step(FlizzerTrackerApp *tracker, TrackerSongPatternStep *step,
 
         case 2: // volume
         {
-            edit_volume(step, delta);
+            edit_volume(tracker, step, delta);
             break;
         }
 

+ 2 - 0
input_event.c

@@ -297,12 +297,14 @@ void process_input_event(FlizzerTrackerApp *tracker, FlizzerTrackerEvent *event)
     if (event->input.key == InputKeyBack && event->input.type == InputTypeShort && event->period > 0 && event->period < 300 && !(tracker->editing))
     {
         cycle_view(tracker);
+        stop_song(tracker);
         return;
     }
 
     else if (event->input.key == InputKeyBack && event->input.type == InputTypeShort && !(tracker->editing))
     {
         cycle_focus(tracker);
+        stop_song(tracker);
         return;
     }
 

+ 2 - 2
tracker_engine/tracker_engine.c

@@ -267,8 +267,8 @@ void tracker_engine_execute_track_command(TrackerEngine *tracker_engine, uint8_t
 
     if (vol != MUS_NOTE_VOLUME_NONE && !(tracker_engine->channel[chan].channel_flags & TEC_DISABLED))
     {
-        tracker_engine->sound_engine->channel[chan].adsr.volume = (int32_t)tracker_engine->sound_engine->channel[chan].adsr.volume * (int32_t)tracker_engine->channel[chan].volume / MAX_ADSR_VOLUME * (int32_t)vol / (MUS_NOTE_VOLUME_NONE);
-        tracker_engine->sound_engine->channel[chan].adsr.volume = (int32_t)tracker_engine->sound_engine->channel[chan].adsr.volume * (int32_t)tracker_engine->master_volume / MAX_ADSR_VOLUME;
+        tracker_engine->sound_engine->channel[chan].adsr.volume = (int32_t)tracker_engine->channel[chan].volume * (int32_t)vol / (MUS_NOTE_VOLUME_NONE);
+        // tracker_engine->sound_engine->channel[chan].adsr.volume = (int32_t)tracker_engine->sound_engine->channel[chan].adsr.volume * (int32_t)tracker_engine->channel[chan].instrument->adsr.volume / MAX_ADSR_VOLUME * (int32_t)tracker_engine->master_volume / MAX_ADSR_VOLUME;
     }
 
     if (tracker_engine->channel[chan].instrument != NULL && opcode != 0)

+ 1 - 1
view/instrument_editor.c

@@ -125,7 +125,7 @@ void draw_instrument_view(Canvas *canvas, FlizzerTrackerApp *tracker)
         snprintf(buffer, sizeof(buffer), "INST:%c", to_char(tracker->current_instrument));
         draw_generic_n_digit_field(tracker, canvas, EDIT_INSTRUMENT, INST_CURRENTINSTRUMENT, buffer, 0, 5 - shift, 1);
         snprintf(buffer, sizeof(buffer), "%s", tracker->song.instrument[tracker->current_instrument]->name);
-        draw_generic_n_digit_field(tracker, canvas, EDIT_INSTRUMENT, INST_INSTRUMENTNAME, buffer, 4 * 7, 5 - shift, 1);
+        draw_generic_n_digit_field(tracker, canvas, EDIT_INSTRUMENT, INST_INSTRUMENTNAME, buffer, 4 * 7 - 1, 5 - shift, 1);
     }
 
     if (shift < 12)