#pragma once // #include "dtmf_dolphin_i.h" #include "dtmf_dolphin_event.h" #include "dtmf_dolphin_hal.h" #define SAMPLE_BUFFER_LENGTH 8192 #define PERIOD_2_PI 6.2832 #define CPU_CLOCK_FREQ 64000000 typedef struct { float cached_freq; size_t period; float* lookup_table; uint16_t offset; } DTMFDolphinOsc; typedef struct { float duration; size_t period; bool* lookup_table; uint16_t offset; } DTMFDolphinPulseFilter; typedef struct { size_t buffer_length; size_t half_buffer_length; uint8_t* buffer_buffer; uint16_t* sample_buffer; float volume; FuriMessageQueue* queue; DTMFDolphinOsc* osc1; DTMFDolphinOsc* osc2; DTMFDolphinPulseFilter* filter; bool playing; } DTMFDolphinAudio; DTMFDolphinOsc* dtmf_dolphin_osc_alloc(); DTMFDolphinAudio* dtmf_dolphin_audio_alloc(); void dtmf_dolphin_audio_free(DTMFDolphinAudio* player); void dtmf_dolphin_osc_free(DTMFDolphinOsc* osc); bool dtmf_dolphin_audio_play_tones( float freq1, float freq2, uint16_t pulses, uint16_t pulse_ms, uint16_t gap_ms); bool dtmf_dolphin_audio_stop_tones(); bool dtmf_dolphin_audio_handle_tick();