#ifndef MELODY_H
#define MELODY_H

#include "stm32f1xx_hal.h"
#include "songs.h"
#include "sounds.h"

typedef struct {
    TIM_HandleTypeDef* htim;
    uint32_t channel;
    uint32_t timer_clock_hz;   // частота тактирования таймера в Гц
    Melody_t *melody;
    uint16_t current_index;
    uint32_t note_start_time;
    uint8_t is_playing;
    uint16_t bpm;
} MelodyHandle;
extern MelodyHandle melody;

void Melody_Init(MelodyHandle* mh, TIM_HandleTypeDef* htim, uint32_t channel, uint32_t timer_clock_hz);
void Melody_SetBPM(MelodyHandle* mh, uint16_t bpm);
void Melody_Play(MelodyHandle* mh, Melody_t* melody, uint16_t bpm);
void Melody_Stop(MelodyHandle* mh);
void Melody_Update(MelodyHandle* mh);
uint8_t Melody_IsPlaying(MelodyHandle* mh);

#endif
