8 #include "heivs/audio_stm32.h"
13 #include "stm32/stm32f4xx_misc.h"
20 #include "freertos/FreeRTOS.h"
73 state->f_a = 2 * cos(2 * M_PI * frequency/fs);
74 state->af_Y[1] = amplitude * sin(-2 * M_PI * frequency/fs + phase);
75 state->af_Y[0] = amplitude * sin(phase);
89 result = state->f_a * state->af_Y[0] - state->af_Y[1];
91 state->af_Y[1] = state->af_Y[0];
92 state->af_Y[0] = result;
114 return AudioSTM32_Stream_Play_Pause();
124 return AudioSTM32_Stream_Record_Init(length, buffer0, buffer1, done);
129 return AudioSTM32_Stream_Record_Stop();
135 uint32_t byte_per_sample;
138 static struct setup_t
setup;
148 setup.byte_per_sample = 2;
151 setup.byte_per_sample = 3;
154 setup.byte_per_sample = 4;
160 status = AudioCodec_Init(fs);
169 status = AudioSTM32_Init(fs, sample_size);
178 static void send_when_ready(uint16_t data)
180 while (SPI_I2S_GetFlagStatus(SPI2, SPI_FLAG_TXE) == RESET){}
181 SPI_I2S_SendData(SPI2, data);
192 switch (
setup.byte_per_sample)
198 send_when_ready(sample);
199 send_when_ready(sample);
207 int32_t left = sample;
208 int32_t right = sample;
210 send_when_ready(left << 8);
211 send_when_ready((left & 0xff) >> 8 | (right & 0xff) << 8);
212 send_when_ready(right >> 8);
219 send_when_ready(sample >> 16);
220 send_when_ready(sample);
221 send_when_ready(sample >> 16);
222 send_when_ready(sample);
237 return AudioSTM32_Record(dest, length);
242 return AudioCodec_VolumeSpeaker(volume);
247 return AudioCodec_VolumeHeadphone(volume);
This file contains all the functions prototypes for the RCC firmware library.
status_e AudioSTM32_Stream_Play_Status(void)
Is AudioSTM32_Stream_Play ready for the next buffer?
status_e AudioSTM32_Stream_Play_Stop(void)
Audio stream stop.
ARMEBS4 audio codec support.
This file contains all the functions prototypes for the SPI firmware library.
static struct audio_setup_t setup
libheivs configuration file
status_e Audio_Stream_Play_Pause(void)
Audio stream play pause.
static uint32_t time_elapsed(timeout_t timeout)
Is this time passed?
status_e Audio_Stream_Play(const void *data)
Audio stream play buffer.
status_e Audio_SetVolumeSpeaker(uint8_t volume)
Set the volume for speaker output.
status_e Audio_Stream_Play_Stop(void)
Audio stream playing stop.
This file contains all the functions prototypes for the DMA firmware library.
status_e Audio_Stream_Record_Init(uint32_t length, void *buffer0, void *buffer1, void(*done)(const void *))
Audio stream record initialization.
status_e Audio_Stream_Record_Stop(void)
Audio stream record stop.
status_e AudioSTM32_Stream_Play(const void *data)
Audio stream play buffer.
status_e Audio_Stream_Play_Init(uint32_t length, void *buffer0, void *buffer1, void(*done)(const void *))
Audio stream play initialization.
static void init_sine_wave_float(struct sine_wave_state_t *state, float amplitude, float fs, float frequency, float phase)
Fast sine wave generator initialization.
status_e AudioSTM32_Stream_Play_Init(uint32_t length, void *buffer0, void *buffer1, void(*done)(const void *))
Audio stream initialization.
status_e Audio_Record(int16_t *dest, uint32_t length)
Record a sound (polling mode)
static float gen_sine_wave_float(struct sine_wave_state_t *state)
Fast sine wave generator.
status_e Audio_Stream_Play_Status(void)
Is Audio_Stream_Play ready for the next buffer?
timeout_t time_set_timeout_ms(uint32_t ms)
Set an obscure time at least ms milliseconds in the future.
status_e Audio_SetVolumeHeadphone(uint8_t volume)
Set the volume for headphone output.
status_e AudioSTM32_Play(const int16_t *dataBuf, uint32_t length)
Play a sound (polling mode)
status_e Audio_Init(uint32_t fs, uint32_t sample_size)
Audio initialization.
status_e Audio_PlaySin(uint16_t freq, uint16_t duration)
Play a sine sound at a given frequency.
status_e Audio_Play(const int16_t *src, uint32_t length)
Play a sound (polling mode)