ESP Audio

This component provides several simple high level APIs. It is intended for quick implementation of audio applications based on typical interconnections of standardized audio elements.

API Reference

Header File

Structures

struct esp_audio_state_t

esp_audio status information parameters

Public Members

esp_audio_status_t status

Status of esp_audio

audio_err_t err_msg

Status is AUDIO_STATUS_ERROR, err_msg will be setup

media_source_type_t media_src

Media source type

Macros

ESP_ERR_AUDIO_BASE

Starting number of ESP audio error codes

Type Definitions

typedef void (*esp_audio_event_callback)(esp_audio_state_t *audio, void *ctx)
typedef esp_err_t (*audio_volume_set)(void *hd, int vol)
typedef esp_err_t (*audio_volume_get)(void *hd, int *vol)

Enumerations

enum audio_err_t

Values:

enumerator ESP_ERR_AUDIO_NO_ERROR
enumerator ESP_ERR_AUDIO_FAIL
enumerator ESP_ERR_AUDIO_NO_INPUT_STREAM
enumerator ESP_ERR_AUDIO_NO_OUTPUT_STREAM
enumerator ESP_ERR_AUDIO_NO_CODEC
enumerator ESP_ERR_AUDIO_HAL_FAIL
enumerator ESP_ERR_AUDIO_MEMORY_LACK
enumerator ESP_ERR_AUDIO_INVALID_URI
enumerator ESP_ERR_AUDIO_INVALID_PATH
enumerator ESP_ERR_AUDIO_INVALID_PARAMETER
enumerator ESP_ERR_AUDIO_NOT_READY
enumerator ESP_ERR_AUDIO_NOT_SUPPORT
enumerator ESP_ERR_AUDIO_TIMEOUT
enumerator ESP_ERR_AUDIO_ALREADY_EXISTS
enumerator ESP_ERR_AUDIO_UNKNOWN
enumerator ESP_ERR_AUDIO_OUT_OF_RANGE
enumerator ESP_ERR_AUDIO_STOP_BY_USER
enumerator ESP_ERR_AUDIO_OPEN
enumerator ESP_ERR_AUDIO_INPUT
enumerator ESP_ERR_AUDIO_PROCESS
enumerator ESP_ERR_AUDIO_OUTPUT
enumerator ESP_ERR_AUDIO_CLOSE
enum esp_audio_status_t

Values:

enumerator AUDIO_STATUS_UNKNOWN
enumerator AUDIO_STATUS_RUNNING
enumerator AUDIO_STATUS_PAUSED
enumerator AUDIO_STATUS_STOPPED
enumerator AUDIO_STATUS_FINISHED
enumerator AUDIO_STATUS_ERROR
enum audio_termination_type_t

Values:

enumerator TERMINATION_TYPE_NOW

Audio operation will be terminated immediately

enumerator TERMINATION_TYPE_DONE

Audio operation will be stopped when finished

enumerator TERMINATION_TYPE_MAX
enum esp_audio_prefer_t

Values:

enumerator ESP_AUDIO_PREFER_MEM
enumerator ESP_AUDIO_PREFER_SPEED
enum media_source_type_t

Values:

enumerator MEDIA_SRC_TYPE_NULL
enumerator MEDIA_SRC_TYPE_MUSIC_BASE
enumerator MEDIA_SRC_TYPE_MUSIC_SD
enumerator MEDIA_SRC_TYPE_MUSIC_HTTP
enumerator MEDIA_SRC_TYPE_MUSIC_FLASH
enumerator MEDIA_SRC_TYPE_MUSIC_A2DP
enumerator MEDIA_SRC_TYPE_MUSIC_DLNA
enumerator MEDIA_SRC_TYPE_MUSIC_RAW
enumerator MEDIA_SRC_TYPE_MUSIC_MAX
enumerator MEDIA_SRC_TYPE_TONE_BASE
enumerator MEDIA_SRC_TYPE_TONE_SD
enumerator MEDIA_SRC_TYPE_TONE_HTTP
enumerator MEDIA_SRC_TYPE_TONE_FLASH
enumerator MEDIA_SRC_TYPE_TONE_MAX
enumerator MEDIA_SRC_TYPE_RESERVE_BASE
enumerator MEDIA_SRC_TYPE_RESERVE_MAX

Header File

Functions

esp_audio_handle_t esp_audio_create(const esp_audio_cfg_t *cfg)

Create esp_audio instance according to ‘cfg’ parameter.

This function create an esp_audio instance, at the specified configuration.

Parameters

cfg[in] Provide esp_audio initialization configuration

Returns

  • NULL: Error

  • Others: esp_audio instance fully certifying

audio_err_t esp_audio_destroy(esp_audio_handle_t handle)

Specific esp_audio instance will be destroyed.

Parameters

handle[in] The esp_audio instance

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: no instance to free, call esp_audio_init first

audio_err_t esp_audio_input_stream_add(esp_audio_handle_t handle, audio_element_handle_t in_stream)

Add audio input stream to specific esp_audio instance.

Parameters
  • handle[in] The esp_audio instance

  • in_stream[in] Audio stream instance

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

  • ESP_ERR_AUDIO_MEMORY_LACK: allocate memory fail

audio_err_t esp_audio_output_stream_add(esp_audio_handle_t handle, audio_element_handle_t out_stream)

Add audio output stream to specific esp_audio instance.

Parameters
  • handle[in] The esp_audio instance

  • out_stream[in] The audio stream element instance

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

  • ESP_ERR_AUDIO_MEMORY_LACK: allocate memory fail

audio_err_t esp_audio_codec_lib_add(esp_audio_handle_t handle, audio_codec_type_t type, audio_element_handle_t lib)

Add a new codec lib that can decode or encode a music file.

Parameters
  • handle[in] The esp_audio instance

  • type[in] The audio codec type(encoder or decoder)

  • lib[in] To provide audio stream element

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

  • ESP_ERR_AUDIO_MEMORY_LACK: allocate memory fail

audio_err_t esp_audio_codec_lib_query(esp_audio_handle_t handle, audio_codec_type_t type, const char *extension)

Check if this kind of music extension is supported or not.

Note

This function just query the codec which has already add by esp_audio_codec_lib_add. The max length of extension is 6.

Parameters
  • handle[in] The esp_audio instance

  • type[in] The CODEC_ENCODER or CODEC_DECODER

  • extension[in] Such as “mp3”, “wav”, “aac”

Returns

  • ESP_ERR_AUDIO_NO_ERROR: supported

  • ESP_ERR_AUDIO_NOT_SUPPORT: not support

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

audio_err_t esp_audio_play(esp_audio_handle_t handle, audio_codec_type_t type, const char *uri, int pos)

Play the given uri.

The esp_audio_play have follow activity, setup inputstream, outputstream and codec by uri, start all of them. There is a rule that esp_audio will select input stream, codec and output stream by URI field.

Rule of URI field are as follow.

  • UF_SCHEMA field of URI for choose input stream from existing streams. e.g:”http”,”file”

  • UF_PATH field of URI for choose codec from existing codecs. e.g:”/audio/mp3_music.mp3”

  • UF_FRAGMENT field of URI for choose output stream from existing streams, output stream is I2S by default.

  • UF_USERINFO field of URI for specific sample rate and channels at encode mode.

The format “user:password” in the userinfo field, “user” is sample rate, “password” is channels.

Now esp_audio_play support follow URIs.

  • ”https://dl.espressif.com/dl/audio/mp3_music.mp3”

  • ”http://media-ice.musicradio.com/ClassicFMMP3”

  • ”file://sdcard/test.mp3”

  • ”iis://16000:2@from.pcm/rec.wav#file”

  • ”iis://16000:1@record.pcm/record.wav#raw”

  • ”aadp://44100:2@bt/sink/stream.pcm”

  • ”hfp://8000:1@bt/hfp/stream.pcm”

Note

  • The URI parse by http_parser_parse_url,any illegal string will be return ESP_ERR_AUDIO_INVALID_URI.

  • If the esp_decoder codec is added to handle, then the handle of esp_decoder will be set as the default decoder, even if other decoders are added.

  • Enabled CONFIG_FATFS_API_ENCODING_UTF_8, the URI can be support Chinese characters.

  • Asynchronous interface

  • The maximum of block time can be modify by esp_audio_play_timeout_set, default value is 25 seconds.

Parameters
  • handle – The esp_audio_handle_t instance

  • uri – Such as “file://sdcard/test.wav” or “http://iot.espressif.com/file/example.mp3”. If NULL to be set, the uri setup byesp_audio_setup will used.

  • type – Specific handle type decoder or encoder

  • pos – Specific starting position by bytes

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_TIMEOUT: timeout the play activity

  • ESP_ERR_AUDIO_NOT_SUPPORT: Currently status is AUDIO_STATUS_RUNNING

  • ESP_ERR_AUDIO_INVALID_URI: URI is illegal

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

  • ESP_ERR_AUDIO_STOP_BY_USER: Exit without play due to esp_audio_stop has been called.

audio_err_t esp_audio_sync_play(esp_audio_handle_t handle, const char *uri, int pos)

Play the given uri until music finished or error occured.

Note

  • All features are same with esp_audio_play

  • Synchronous interface

  • Support decoder mode only

  • No any events post during playing

Parameters
  • handle – The esp_audio_handle_t instance

  • uri – Such as “file://sdcard/test.wav” or “http://iot.espressif.com/file/example.mp3”,

  • pos – Specific starting position by bytes

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_TIMEOUT: timeout the play activity

  • ESP_ERR_AUDIO_NOT_SUPPORT: Currently status is AUDIO_STATUS_RUNNING

  • ESP_ERR_AUDIO_INVALID_URI: URI is illegal

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

audio_err_t esp_audio_stop(esp_audio_handle_t handle, audio_termination_type_t type)

A synchronous interface for stop the esp_audio. The maximum of block time is 8000ms.

Note

1. If user queue has been registered by evt_que, AUDIO_STATUS_STOPPED event for success or AUDIO_STATUS_ERROR event for error will be received.

  1. TERMINATION_TYPE_DONE only works with input stream which can’t stopped by itself, e.g. raw read/write stream, others streams are no effect.

  2. The synchronous interface is used to ensure that working pipeline is stopped.

Parameters
  • handle[in] The esp_audio instance

  • type[in] Stop immediately or done

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

  • ESP_ERR_AUDIO_NOT_READY: The status is not AUDIO_STATUS_RUNNING or AUDIO_STATUS_PAUSED or element has not created

  • ESP_ERR_AUDIO_TIMEOUT: timeout(8000ms) the stop activity.

audio_err_t esp_audio_pause(esp_audio_handle_t handle)

Pause the esp_audio.

Note

1. Only support music and without live stream. If user queue has been registered by evt_que, AUDIO_STATUS_PAUSED event for success or AUDIO_STATUS_ERROR event for error will be received.

  1. The Paused music must be stoped by esp_audio_stop before new playing, otherwise got block on new play.

Parameters

handle[in] The esp_audio instance

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

  • ESP_ERR_AUDIO_NOT_READY: the status is not running

  • ESP_ERR_AUDIO_TIMEOUT: timeout the pause activity.

audio_err_t esp_audio_resume(esp_audio_handle_t handle)

Resume the music paused.

Note

Only support music and without live stream. If user queue has been registered by evt_que, AUDIO_STATUS_RUNNING event for success or AUDIO_STATUS_ERROR event for error will be received.

Parameters

handle[in] The esp_audio instance

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

  • ESP_ERR_AUDIO_TIMEOUT: timeout the resume activity.

audio_err_t esp_audio_eq_gain_set(esp_audio_handle_t handle, int band_index, int nch, int eq_gain)

Set the audio gain to be processed by the equalizer.

Parameters
  • handle[in] The esp_audio instance

  • band_index[in] The position of center frequencies of equalizer. The range of eq band index is [0 - 9].

  • nch[in] The number of channel. As for mono, the nch can only set to 1. As for dual, thc nch can set to 1 and 2.

  • eq_gain[in] The value of audio gain which in band_index.

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

audio_err_t esp_audio_eq_gain_get(esp_audio_handle_t handle, int band_index, int nch, int *eq_gain)

Get the audio gain to be processed by the equalizer.

Parameters
  • handle[in] Audio element handle

  • band_index[in] The position of center frequencies of equalizer. The range of eq band index is [0 - 9].

  • nch[in] The number of channel. As for mono, the nch can only set to 1. As for dual, thc nch can set to 1 and 2.

  • eq_gain[out] The pointer of the gain processed by equalizer

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

audio_err_t esp_audio_speed_get(esp_audio_handle_t handle, esp_audio_play_speed_t *speed_index)

Getting esp_audio play speed index, index value is from “esp_audio_speed_t” enum.

Parameters
  • handle[in] The esp_audio instance

  • speed_index[out] Current audio play speed index.

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

audio_err_t esp_audio_speed_set(esp_audio_handle_t handle, esp_audio_play_speed_t speed_index)

Use speed_index which is from “esp_audio_speed_t” enum to set esp_audio play speed.

Parameters
  • handle[in] The esp_audio instance

  • speed_index[in] Value from “esp_audio_speed_t” enum.

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

audio_err_t esp_audio_speed_idx_to_float(esp_audio_handle_t handle, esp_audio_play_speed_t speed_index, float *speed)

Use speed_index which is from “esp_audio_speed_t” enum to get esp_audio play speed which is float type.

Parameters
  • handle[in] The esp_audio instance

  • speed_index[in] Current audio play speed index.

  • speed[out] Current audio play speed.

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

audio_err_t esp_audio_vol_set(esp_audio_handle_t handle, int vol)

Setting esp_audio volume.

Parameters
  • handle[in] The esp_audio instance

  • vol[in] Specific volume will be set. 0-100 is legal. 0 will be mute.

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_CTRL_HAL_FAIL: error with hardware.

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

audio_err_t esp_audio_vol_get(esp_audio_handle_t handle, int *vol)

Get esp_audio volume.

Parameters
  • handle[in] The esp_audio instance

  • vol[out] A pointer to int that indicates esp_audio volume.

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_CTRL_HAL_FAIL: error with hardware.

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

audio_err_t esp_audio_state_get(esp_audio_handle_t handle, esp_audio_state_t *state)

Get esp_audio status.

Parameters
  • handle[in] The esp_audio instance

  • state[out] A pointer to esp_audio_state_t that indicates esp_audio status.

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: no esp_audio instance or esp_audio does not playing

audio_err_t esp_audio_pos_get(esp_audio_handle_t handle, int *pos)

Get the position in bytes of currently played music.

Note

This function works only with decoding music.

Parameters
  • handle[in] The esp_audio instance

  • pos[out] A pointer to int that indicates esp_audio decoding position.

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: no esp_audio instance

  • ESP_ERR_AUDIO_NOT_READY: no codec element

audio_err_t esp_audio_time_get(esp_audio_handle_t handle, int *time)

Get the position in microseconds of currently played music.

Note

This function works only with decoding music.

Parameters
  • handle[in] The esp_audio instance

  • time[out] A pointer to int that indicates esp_audio decoding position.

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: no esp_audio instance

  • ESP_ERR_AUDIO_NOT_READY: no out stream

audio_err_t esp_audio_setup(esp_audio_handle_t handle, esp_audio_setup_t *sets)

Choose the in_stream, codec and out_stream definitely, and set uri.

Note

This function provide a manual way to select in/out stream and codec, should be called before the esp_audio_play, then ignore the esp_audio_play URI parameter only one time.

Parameters
  • handle[in] The esp_audio instance

  • sets[in] A pointer to esp_audio_setup_t.

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: no esp_audio instance

  • ESP_ERR_AUDIO_MEMORY_LACK: allocate memory fail

audio_err_t esp_audio_media_type_set(esp_audio_handle_t handle, media_source_type_t type)
audio_err_t esp_audio_music_info_get(esp_audio_handle_t handle, esp_audio_music_info_t *info)
audio_err_t esp_audio_info_get(esp_audio_handle_t handle, esp_audio_info_t *info)
audio_err_t esp_audio_info_set(esp_audio_handle_t handle, esp_audio_info_t *info)
audio_err_t esp_audio_callback_set(esp_audio_handle_t handle, esp_audio_event_callback cb, void *cb_ctx)
audio_err_t esp_audio_seek(esp_audio_handle_t handle, int seek_time_sec)

Seek the position in second of currently played music.

Note

This function works only with decoding music.

Parameters
  • handle[in] The esp_audio instance

  • seek_time_sec[out] A pointer to int that indicates esp_audio decoding position.

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_FAIL: codec or allocation fail

  • ESP_ERR_AUDIO_TIMEOUT: timeout for sync the element status

  • ESP_ERR_AUDIO_INVALID_PARAMETER: no esp_audio instance

  • ESP_ERR_AUDIO_NOT_SUPPORT: codec has finished

  • ESP_ERR_AUDIO_OUT_OF_RANGE: the seek_time_ms is out of the range

  • ESP_ERR_AUDIO_NOT_READY: the status is neither running nor paused

audio_err_t esp_audio_duration_get(esp_audio_handle_t handle, int *duration)

Get the duration in microseconds of playing music.

Note

This function works only with decoding music.

Parameters
  • handle[in] The esp_audio instance

  • duration[out] A pointer to int that indicates decoding total time.

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: no esp_audio instance

  • ESP_ERR_AUDIO_NOT_READY: no codec element or no in element

audio_err_t esp_audio_play_timeout_set(esp_audio_handle_t handle, int time_ms)

Setting the maximum amount of time to waiting for esp_audio_play only.

Parameters
  • handle[in] The esp_audio instance

  • time_ms[in] The maximum amount of time

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: invalid arguments

audio_err_t esp_audio_prefer_type_get(esp_audio_handle_t handle, esp_audio_prefer_t *type)

Get the type of esp_audio_prefer_t

Parameters
  • handle[in] The esp_audio instance

  • type[out] A pointer to esp_audio_prefer_t

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: no esp_audio instance

audio_err_t esp_audio_event_que_set(esp_audio_handle_t handle, QueueHandle_t que)

Set event queue to notify the esp_audio status.

Parameters
  • handle[in] The esp_audio instance

  • que[out] A pointer to QueueHandle_t

Returns

  • ESP_ERR_AUDIO_NO_ERROR: on success

  • ESP_ERR_AUDIO_INVALID_PARAMETER: no esp_audio instance

Structures

struct esp_audio_cfg_t

esp_audio configuration parameters

Public Members

int in_stream_buf_size

Input buffer size

int out_stream_buf_size

Output buffer size

int resample_rate

Destination sample rate, 0: disable resample; others: 44.1K, 48K, 32K, 16K, 8K has supported It should be make sure same with I2S stream sample_rate

int component_select

The select of audio forge component. eg. To choose equalizer and ALC together, please enter ESP_AUDIO_COMPONENT_SELECT_ALC | ESP_AUDIO_COMPONENT_SELECT_EQUALIZER.

QueueHandle_t evt_que

For received esp_audio events (optional)

esp_audio_event_callback cb_func

esp_audio events callback (optional)

void *cb_ctx

esp_audio callback context (optional)

esp_audio_prefer_t prefer_type

esp_audio works on sepcific type, default memory is preferred.

  • ESP_AUDIO_PREFER_MEM mode stopped the previous linked elements before the new pipeline starting, except out stream element.

  • ESP_AUDIO_PREFER_SPEED mode kept the previous linked elements before the new pipeline starting, except out stream element.

void *vol_handle

Volume change instance

audio_volume_set vol_set

Set volume callback

audio_volume_get vol_get

Get volume callback

int task_prio

esp_audio task priority

int task_stack

Size of esp_audio task stack

struct esp_audio_setup_t

esp_audio setup parameters by manual

Public Members

audio_codec_type_t set_type

Set codec type

int set_sample_rate

Set music sample rate

int set_channel

Set music channels

int set_pos

Set starting position

int set_time

Set starting position of the microseconds time (optional)

char *set_uri

Set URI

char *set_in_stream

Tag of in_stream

char *set_codec

Tag of the codec

char *set_out_stream

Tag of out_stream

struct esp_audio_info_t

esp_audio information

Public Members

audio_element_info_t codec_info

Codec information

audio_element_handle_t in_el

Handle of the in stream

audio_element_handle_t out_el

Handle of the out stream

audio_element_handle_t codec_el

Handle of the codec

audio_element_handle_t filter_el

Handle of the filter

esp_audio_state_t st

The state of esp_audio

int time_pos

Position of the microseconds time

float audio_speed

Play speed of audio

int64_t in_stream_total_size

Total size of in stream

struct esp_audio_music_info_t

The music informations.

Public Members

int sample_rates

Sample rates in Hz

int channels

Number of audio channel, mono is 1, stereo is 2

int bits

Bit wide (8, 16, 24, 32 bits)

int bps

Bit per second

esp_codec_type_t codec_fmt

Music format

Macros

ESP_AUDIO_COMPONENT_SELECT_DEFAULT

Default selected

ESP_AUDIO_COMPONENT_SELECT_ALC

ALC selected

ESP_AUDIO_COMPONENT_SELECT_EQUALIZER

Equalizer selected

DEFAULT_ESP_AUDIO_CONFIG()

Type Definitions

typedef void *esp_audio_handle_t

Enumerations

enum esp_audio_play_speed_t

esp_audio play speed

Values:

enumerator ESP_AUDIO_PLAY_SPEED_UNKNOW
enumerator ESP_AUDIO_PLAY_SPEED_0_50
enumerator ESP_AUDIO_PLAY_SPEED_0_75
enumerator ESP_AUDIO_PLAY_SPEED_1_00
enumerator ESP_AUDIO_PLAY_SPEED_1_25
enumerator ESP_AUDIO_PLAY_SPEED_1_50
enumerator ESP_AUDIO_PLAY_SPEED_1_75
enumerator ESP_AUDIO_PLAY_SPEED_2_00
enumerator ESP_AUDIO_PLAY_SPEED_MAX