Przeglądaj źródła

idk what I did but yeah looks like the bug with channels not playing sometim,es is fixed (?????)

LTVA1 2 lat temu
rodzic
commit
ec9e1b8f7f
3 zmienionych plików z 31 dodań i 3 usunięć
  1. 11 0
      flizzer_tracker_hal.c
  2. 2 1
      tracker_engine/tracker_engine_defs.h
  3. 18 2
      util.c

+ 11 - 0
flizzer_tracker_hal.c

@@ -73,6 +73,8 @@ void sound_engine_PWM_timer_init(bool external_audio_output) // external audio o
         furi_hal_gpio_init(&gpio_ext_pa6, GpioModeAnalog, GpioPullNo, GpioSpeedLow);
     }
 
+    SPEAKER_PWM_TIMER->CNT = 0;
+
     LL_TIM_EnableAllOutputs(SPEAKER_PWM_TIMER);
     LL_TIM_EnableCounter(SPEAKER_PWM_TIMER);
 }
@@ -113,6 +115,8 @@ void sound_engine_timer_init(uint32_t sample_rate) // external audio on pin PA6
     LL_TIM_OC_Init(SAMPLE_RATE_TIMER, SPEAKER_PWM_TIMER_CHANNEL, &TIM_OC_InitStruct);
 
     LL_TIM_EnableAllOutputs(SAMPLE_RATE_TIMER);
+
+    SAMPLE_RATE_TIMER->CNT = 0;
 }
 
 void tracker_engine_timer_init(uint8_t rate) // 0-255 hz
@@ -131,6 +135,8 @@ void tracker_engine_timer_init(uint8_t rate) // 0-255 hz
     LL_TIM_OC_Init(TRACKER_ENGINE_TIMER, SPEAKER_PWM_TIMER_CHANNEL, &TIM_OC_InitStruct);
 
     LL_TIM_EnableIT_UPDATE(TRACKER_ENGINE_TIMER);
+
+    TRACKER_ENGINE_TIMER->CNT = 0;
 }
 
 void tracker_engine_set_rate(uint8_t rate) {
@@ -141,6 +147,8 @@ void tracker_engine_set_rate(uint8_t rate) {
         (uint32_t)TIMER_BASE_CLOCK / (uint32_t)rate - 1; // to support various tracker engine rates
     TIM_InitStruct.CounterMode = LL_TIM_COUNTERMODE_UP;
     LL_TIM_Init(TRACKER_ENGINE_TIMER, &TIM_InitStruct);
+
+    TRACKER_ENGINE_TIMER->CNT = 0;
 }
 
 void tracker_engine_init_hardware(uint8_t rate) {
@@ -186,6 +194,7 @@ void sound_engine_dma_stop() {
 }
 
 void sound_engine_start() {
+    SAMPLE_RATE_TIMER->CNT = 0;
     LL_TIM_EnableCounter(SAMPLE_RATE_TIMER);
 
     sound_engine_dma_start();
@@ -206,6 +215,8 @@ void sound_engine_deinit_timer() {
 }
 
 void tracker_engine_start() {
+    TRACKER_ENGINE_TIMER->CNT = 0;
+
     LL_TIM_EnableAllOutputs(TRACKER_ENGINE_TIMER);
     LL_TIM_EnableCounter(TRACKER_ENGINE_TIMER);
 }

+ 2 - 1
tracker_engine/tracker_engine_defs.h

@@ -214,7 +214,8 @@ typedef struct {
     TrackerSong* song;
     SoundEngine* sound_engine;
 
-    uint16_t pattern_position, sequence_position, current_tick;
+    uint16_t pattern_position, sequence_position;
+    int16_t current_tick;
     uint16_t absolute_position; // sequence_position * pattern_length + pattern_position
 
     uint8_t speed, rate;

+ 18 - 2
util.c

@@ -17,12 +17,14 @@ void stop_song(FlizzerTrackerApp* tracker) {
     }
 
     stop();
+
+    reset_buffer(&tracker->sound_engine);
 }
 
 void play_song(FlizzerTrackerApp* tracker, bool from_cursor) {
-    stop_song(tracker);
+    uint16_t temppos = tracker->tracker_engine.pattern_position;
 
-    reset_buffer(&tracker->sound_engine);
+    stop_song(tracker);
 
     sound_engine_dma_init(
         (uint32_t)tracker->sound_engine.audio_buffer, tracker->sound_engine.audio_buffer_size);
@@ -34,13 +36,27 @@ void play_song(FlizzerTrackerApp* tracker, bool from_cursor) {
 
     if(!(from_cursor)) {
         tracker->tracker_engine.pattern_position = 0;
+        temppos = 0;
     }
 
     tracker_engine_timer_init(tracker->song.rate);
 
+    /*sound_engine_init_hardware(tracker->sound_engine.sample_rate,
+    tracker->sound_engine.external_audio_output,
+    tracker->sound_engine.audio_buffer,
+    tracker->sound_engine.audio_buffer_size);
+    tracker_engine_init_hardware(tracker->song.rate);*/
+
     tracker->tracker_engine.current_tick = 0;
     tracker_engine_set_song(&tracker->tracker_engine, &tracker->song);
 
+    for(uint8_t i = 0; i < SONG_MAX_CHANNELS; i++) {
+        memset(&tracker->sound_engine.channel[i], 0, sizeof(SoundEngineChannel));
+        memset(&tracker->tracker_engine.channel[i], 0, sizeof(TrackerEngineChannel));
+    }
+
+    tracker->tracker_engine.pattern_position = temppos;
+
     play();
 }