15 #include "audio_driver/es7148/es7148.h"
16 #include "audio_driver/es7210/es7210.h"
17 #include "audio_driver/es7243/es7243.h"
18 #include "audio_driver/es8311/es8311.h"
19 #include "audio_driver/es8374/es8374.h"
20 #include "audio_driver/es8388/es8388.h"
21 #include "audio_driver/tas5805m/tas5805m.h"
27 #include "esp_a2dp_api.h"
29 #include "audio_version.h"
30 #include "driver/i2s.h"
34 #if ESP_IDF_VERSION_MAJOR < 4 && !defined(I2S_COMM_FORMAT_STAND_I2S)
35 #define I2S_COMM_FORMAT_STAND_I2S \
36 (I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_MSB)
37 #define I2S_COMM_FORMAT_STAND_MSB \
38 (I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_MSB)
39 #define I2S_COMM_FORMAT_STAND_LSB \
40 (I2S_COMM_FORMAT_I2S | I2S_COMM_FORMAT_I2S_LSB)
41 #define I2S_COMM_FORMAT_STAND_PCM_LONG \
42 (I2S_COMM_FORMAT_PCM | I2S_COMM_FORMAT_PCM_LONG)
43 #define I2S_COMM_FORMAT_STAND_PCM_SHORT \
44 (I2S_COMM_FORMAT_PCM | I2S_COMM_FORMAT_PCM_SHORT)
45 typedef int eps32_i2s_audio_sample_rate_type;
47 typedef uint32_t eps32_i2s_audio_sample_rate_type;
55 i2s_port_t i2s_num = (i2s_port_t)0;
59 AUDIOKIT_DEFAULT_INPUT;
62 AUDIOKIT_DEFAULT_OUTPUT;
65 AUDIOKIT_DEFAULT_MASTER_SLAVE;
67 AUDIOKIT_DEFAULT_I2S_FMT;
69 AUDIOKIT_DEFAULT_RATE;
71 AUDIOKIT_DEFAULT_BITSIZE;
116 i2s_config_t i2sConfig() {
118 const i2s_config_t i2s_config = {
122 .channel_format = I2S_CHANNEL_FMT_RIGHT_LEFT,
123 .communication_format = (i2s_comm_format_t)i2sFormat(),
124 .intr_alloc_flags = ESP_INTR_FLAG_LEVEL2 | ESP_INTR_FLAG_IRAM,
128 .tx_desc_auto_clear =
true,
137 get_i2s_pins(i2s_num, &result);
142 i2s_comm_format_t i2sFormat(){
143 i2s_comm_format_t its_com_fmt = (i2s_comm_format_t) I2S_COMM_FORMAT_STAND_I2S;
145 its_com_fmt = (i2s_comm_format_t) I2S_COMM_FORMAT_STAND_MSB;
147 its_com_fmt = (i2s_comm_format_t) I2S_COMM_FORMAT_STAND_LSB;
149 its_com_fmt = (i2s_comm_format_t )I2S_COMM_FORMAT_STAND_PCM_SHORT;
154 i2s_mode_t i2sMode() {
155 int mode =
isMaster() ? I2S_MODE_SLAVE : I2S_MODE_MASTER;
159 mode = mode | I2S_MODE_TX | I2S_MODE_DAC_BUILT_IN;
161 mode = mode | I2S_MODE_RX | I2S_MODE_ADC_BUILT_IN;
163 mode = mode | I2S_MODE_RX | I2S_MODE_TX | I2S_MODE_ADC_BUILT_IN | I2S_MODE_DAC_BUILT_IN;
168 mode = mode | I2S_MODE_TX;
170 mode = mode | I2S_MODE_RX;
172 mode = mode | I2S_MODE_RX | I2S_MODE_TX;
175 return (i2s_mode_t) mode;
216 KIT_LOGI(LOG_METHOD);
217 KIT_LOGI(
"Selected board: %d", AUDIOKIT_BOARD);
228 if (hal_handle == 0) {
229 KIT_LOGE(
"audio_hal_init");
238 i2s_config_t i2s_config = cfg.i2sConfig();
239 if (i2s_driver_install(cfg.i2s_num, &i2s_config, 0, NULL) != ESP_OK) {
240 KIT_LOGE(
"i2s_driver_install");
246 if (i2s_set_pin(cfg.i2s_num, &pin_config) != ESP_OK) {
247 KIT_LOGE(
"i2s_set_pin");
251 if (i2s_mclk_gpio_select(cfg.i2s_num, cfg.mclk_gpio) != ESP_OK) {
252 KIT_LOGE(
"i2s_mclk_gpio_select");
260 KIT_LOGE(
"setActive");
269 KIT_LOGI(LOG_METHOD);
273 i2s_driver_uninstall(cfg.i2s_num);
314 size_t write(
const void *src,
size_t size,
315 TickType_t ticks_to_wait = portMAX_DELAY) {
316 KIT_LOGD(
"write: %zu", size);
317 size_t bytes_written = 0;
318 if (i2s_write(cfg.i2s_num, src, size, &bytes_written, ticks_to_wait) !=
320 KIT_LOGE(
"i2s_write");
322 return bytes_written;
326 size_t read(
void *dest,
size_t size,
327 TickType_t ticks_to_wait = portMAX_DELAY) {
328 KIT_LOGD(
"read: %zu", size);
329 size_t bytes_read = 0;
330 if (i2s_read(cfg.i2s_num, dest, size, &bytes_read, ticks_to_wait) !=
332 KIT_LOGE(
"i2s_read");
345 int8_t
pinAuxin() {
return get_auxin_detect_gpio(); }
480 KIT_LOGD(LOG_METHOD);
482 #if defined(ESP32) && defined(AUDIOKIT_SETUP_SD)
483 spi_cs_pin = PIN_AUDIO_KIT_SD_CARD_CS;
484 SPI.begin(PIN_AUDIO_KIT_SD_CARD_CLK, PIN_AUDIO_KIT_SD_CARD_MISO, PIN_AUDIO_KIT_SD_CARD_MOSI, PIN_AUDIO_KIT_SD_CARD_CS);
486 #warning "SPI initialization for the SD drive not supported - you might need to take care of this yourself"
AudioKitInOut
Do we read or write audio data - or both.
AUDIOKIT_BOARD selects a specic board: 1) lyrat_v4_3 2) lyrat_v4_2 3) lyrat_mini_v1_1 4) esp32_s2_kal...
audio_hal_iface_format_t fmt
audio_hal_codec_mode_t
Select media hal codec mode.
@ AUDIO_HAL_CODEC_MODE_BOTH
@ AUDIO_HAL_CODEC_MODE_ENCODE
@ AUDIO_HAL_CODEC_MODE_DECODE
esp_err_t audio_hal_deinit(audio_hal_handle_t audio_hal)
Uninitialize media codec driver.
audio_hal_iface_samples_t samples
audio_hal_iface_bits_t
Select I2S interface number of bits per sample.
@ AUDIO_HAL_BIT_LENGTH_24BITS
@ AUDIO_HAL_BIT_LENGTH_16BITS
@ AUDIO_HAL_BIT_LENGTH_32BITS
audio_hal_codec_mode_t codec_mode
audio_hal_iface_mode_t
Select I2S interface operating mode i.e. master or slave for audio codec chip.
audio_hal_dac_output_t
Select channel for dac output.
audio_hal_handle_t audio_hal_init(audio_hal_codec_config_t *audio_hal_conf, audio_hal_func_t *audio_hal_func)
Initialize media codec driver.
audio_hal_adc_input_t
Select adc channel for input mic signal.
audio_hal_adc_input_t adc_input
esp_err_t audio_hal_set_mute(audio_hal_handle_t audio_hal, bool mute)
Set voice mute. Enables or disables DAC mute of a codec.
audio_hal_iface_mode_t mode
audio_hal_iface_samples_t
Select I2S interface samples per second.
audio_hal_dac_output_t dac_output
esp_err_t audio_hal_ctrl_codec(audio_hal_handle_t audio_hal, audio_hal_codec_mode_t mode, audio_hal_ctrl_t audio_hal_ctrl)
Start/stop codec driver.
audio_hal_iface_format_t
Select I2S interface format for audio codec chip.
audio_hal_codec_i2s_iface_t i2s_iface
audio_hal_iface_bits_t bits
esp_err_t audio_hal_get_volume(audio_hal_handle_t audio_hal, int *volume)
get voice volume.
esp_err_t audio_hal_set_volume(audio_hal_handle_t audio_hal, int volume)
Set voice volume.
Configure media hal for initialization of audio codec chip.
I2s interface configuration for audio codec chip.
esp_system functionality only for ESP32
Select bard.h based on AUDIOKIT_BOARD definition in configuration file.
Simple Logger we need to support both C and C++.
AudioKit API using the audio_hal.
int8_t pinHeadphoneDetect()
Get the gpio number for headphone detection.
int8_t pinGreenLed()
Get DSP reset gpio number.
int8_t pinAdcDetect()
Get the gpio number for adc detection.
int8_t pinVolumeUp()
number for volume up function
int8_t pinSpiCs()
SPI CS Pin for SD Drive.
int8_t pinPaEnable()
Get the gpio number for PA enable.
int8_t pinInputRec()
Get the record-button id for adc-button.
bool setActive(bool active)
Sets the codec active / inactive.
int8_t pinInputMode()
Get the number for mode-button.
int8_t pinEs7243Mclk()
Get the mclk gpio number of es7243.
int volume()
Determines the volume.
int8_t pinAuxin()
Get the gpio number for auxin detection.
void setupSPI()
Setup the SPI so that we can access the SD Drive.
bool begin(AudioKitConfig cnfg)
Starts the codec.
bool setMute(bool mute)
Mutes the output.
int8_t pinVolumeDown()
Get number for volume down function.
bool end()
Stops the CODEC.
int8_t pinResetBoard()
Get DSP reset gpio number.
bool setVolume(int vol)
Defines the Volume.
int8_t pinResetCodec()
Get green led gpio number.
int8_t pinInputSet()
Get number for set function.
AudioKitConfig defaultConfig(AudioKitInOut inout=AudioInputOutput)
Provides the default configuration for input or output.
int8_t pinBlueLed()
Get green led gpio number.
int8_t pinInputPlay()
Get number for play function.
AudioKitConfig config()
Provides the actual configuration.
Configuation for AudioKit.
audio_hal_iface_bits_t bits_per_sample
int bitsPerSample()
provides the bits per sample
int sampleRate()
Provides the sample rate in samples per second.
audio_hal_dac_output_t dac_output
bool isMaster()
Returns true if the CODEC is the master.
audio_hal_adc_input_t adc_input
audio_hal_iface_format_t fmt
audio_hal_iface_mode_t master_slave_mode
audio_hal_iface_samples_t sample_rate
audio_hal_codec_mode_t codec_mode
Configuration of functions and variables used to operate audio codec chip.