esp32-audio-player 0.1.0
Audio player engine for ESP32
Loading...
Searching...
No Matches
player.h
Go to the documentation of this file.
1// SPDX-License-Identifier: Apache-2.0
30#pragma once
31
33#include "audio_player/dsp.h"
35#include "audio_player/sink.h"
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
43
46#define PLAYER_QUEUE_MAX 20000
47
50#define PLAYER_VOLUME_MIN_DB (-96.0f)
51
55typedef struct {
57 char path[CORE_PATH_MAX];
58 uint32_t start_ms;
59 uint32_t end_ms;
61
62typedef struct {
64 uint32_t queue_index;
65 uint32_t queue_length;
67 char path[CORE_PATH_MAX];
68 char title[TAG_TEXT_MAX];
69 char artist[TAG_TEXT_MAX];
70 char album[TAG_TEXT_MAX];
71 uint16_t year;
72 uint16_t track_no;
74 uint64_t cover_offset;
75 uint32_t cover_size;
76 uint32_t position_ms;
77 uint32_t duration_ms;
79 uint32_t bitrate_kbps;
83 uint32_t dsp_flags;
84 float volume_db;
86 bool shuffle;
88 uint32_t sleep_left_s;
89 uint32_t underruns;
90 char sink_name[16];
91 char sink_detail[48];
93
94typedef struct {
95 audio_sink_t *sink;
98 core_stream_t *(*open_stream)(const char *path, void *user);
100 const char *state_dir;
107 void (*wake)(void *user);
110
111typedef struct player player_t;
112
115
116// ---- commands (any thread) -------------------------------------------------
126void player_cmd_play_items(player_t *p, const queue_item_t *items, uint32_t n, uint32_t start, bool shuffle);
127void player_cmd_play_tracks(player_t *p, const lib_id_t *ids, uint32_t n, uint32_t start, bool shuffle);
131#define PLAYER_FOLDER_MAX 2000
132int player_cmd_play_folder(player_t *p, const char *dir, uint32_t start, bool shuffle);
133void player_cmd_enqueue(player_t *p, const queue_item_t *items, uint32_t n, bool play_next);
134void player_cmd_queue_remove(player_t *p, uint32_t index);
135void player_cmd_queue_jump(player_t *p, uint32_t index);
143void player_cmd_seek_ms(player_t *p, uint32_t ms);
144void player_cmd_seek_relative_ms(player_t *p, int32_t delta_ms);
154void player_cmd_set_sleep_timer(player_t *p, uint32_t minutes);
158void player_cmd_set_sink(player_t *p, audio_sink_t *sink);
159
160// ---- queries (any thread, copies under lock) ---------------------------------
165int player_queue_get(player_t *p, uint32_t index, queue_item_t *out);
166
167// ---- persistence -------------------------------------------------------------
180int player_restore_state(player_t *p, bool autoplay);
181
182// ---- audio thread -------------------------------------------------------------
190void player_set_chunk_frames(player_t *p, uint32_t frames);
191
192#ifdef __cplusplus
193}
194#endif
#define CORE_PATH_MAX
Maximum path length used by the core (bytes, UTF-8, including terminator).
Definition base.h:39
Audio decoders behind one interface.
codec_id_t
Definition decoder.h:17
Sound processing chain, float32 inside, Q31 in and out: ReplayGain -> preamp -> parametric EQ (<=10 b...
Music library index stored on the SD card (no LevelDB, no SQLite).
struct library library_t
Definition library.h:81
uint32_t lib_id_t
Definition library.h:26
void player_cmd_resume(player_t *p)
from STOPPED with a non-empty queue: starts the current item
void player_cmd_set_volume_limit(player_t *p, float max_db)
player_t * player_create(const player_config_t *cfg)
void player_cmd_play_items(player_t *p, const queue_item_t *items, uint32_t n, uint32_t start, bool shuffle)
Queue semantics: the display order is the play order.
void player_cmd_queue_clear(player_t *p)
void player_cmd_queue_remove(player_t *p, uint32_t index)
void player_cmd_volume_step(player_t *p, int steps)
uint32_t player_queue_count(player_t *p)
player_state_t
Definition player.h:41
@ PLAYER_PAUSED
Definition player.h:41
@ PLAYER_PLAYING
Definition player.h:41
@ PLAYER_STOPPED
Definition player.h:41
void player_cmd_pause(player_t *p)
void player_cmd_seek_relative_ms(player_t *p, int32_t delta_ms)
int player_save_state(player_t *p)
Audiobook positions are NOT stored by the player: the application calls library_save_position() (on p...
repeat_mode_t
Definition player.h:42
@ REPEAT_ALL
Definition player.h:42
@ REPEAT_OFF
Definition player.h:42
@ REPEAT_ONE
Definition player.h:42
void player_destroy(player_t *p)
void player_cmd_set_dsp(player_t *p, const dsp_config_t *cfg)
sw_volume, volume_db and out_bits are ignored: the player sets them from its volume,...
int player_queue_get(player_t *p, uint32_t index, queue_item_t *out)
Display order = play order (the shuffled order while shuffle is on).
void player_cmd_enqueue(player_t *p, const queue_item_t *items, uint32_t n, bool play_next)
void player_cmd_seek_ms(player_t *p, uint32_t ms)
void player_cmd_queue_jump(player_t *p, uint32_t index)
void player_cmd_set_sink(player_t *p, audio_sink_t *sink)
Switch output (mode change).
void player_cmd_play_tracks(player_t *p, const lib_id_t *ids, uint32_t n, uint32_t start, bool shuffle)
void player_cmd_next(player_t *p)
int player_restore_state(player_t *p, bool autoplay)
Load state; starts paused at the saved position unless autoplay.
int32_t player_run_once(player_t *p)
One iteration.
void player_cmd_prev(player_t *p)
restart the track if more than 3 s played
void player_get_status(player_t *p, player_status_t *out)
void player_cmd_toggle_pause(player_t *p)
struct player player_t
Definition player.h:111
void player_cmd_set_repeat(player_t *p, repeat_mode_t mode)
uint32_t player_wait_hint_ms(player_t *p)
How long the caller may sleep after player_run_once() returned 0: 0 when there is more work right awa...
void player_cmd_stop(player_t *p)
void player_set_chunk_frames(player_t *p, uint32_t frames)
Frames the audio thread tries to decode per iteration (default 1024).
int player_cmd_play_folder(player_t *p, const char *dir, uint32_t start, bool shuffle)
void player_cmd_set_gapless(player_t *p, bool on)
void player_cmd_set_shuffle(player_t *p, bool on)
void player_cmd_set_volume_db(player_t *p, float db)
void player_cmd_set_sleep_timer(player_t *p, uint32_t minutes)
0 = off; fades out over 30 s
Audio output interface.
struct core_stream core_stream_t
Definition stream.h:14
Definition audio.h:23
Definition dsp.h:49
Definition player.h:94
float volume_step_db
default 1.0
Definition player.h:104
const char * state_dir
resume state, queue.m3u8, .scrobbler.log live here
Definition player.h:100
float volume_default_db
Definition player.h:102
void * wake_user
Definition player.h:108
audio_sink_t * sink
may be NULL at start; set later with player_set_sink
Definition player.h:95
void * open_stream_user
Definition player.h:99
float volume_max_db
Definition player.h:103
library_t * library
optional: faster metadata and RG from the index
Definition player.h:96
bool scrobble_log
write Rockbox-format .scrobbler.log
Definition player.h:101
Definition player.h:62
uint16_t year
Definition player.h:71
bool shuffle
Definition player.h:86
uint64_t cover_offset
embedded cover in the file (0 = none)
Definition player.h:74
uint32_t position_ms
Definition player.h:76
float volume_db
current volume (hardware or software)
Definition player.h:84
audio_format_t out_fmt
format sent to the sink
Definition player.h:81
audio_format_t src_fmt
decoded format
Definition player.h:80
codec_id_t codec
Definition player.h:78
uint32_t duration_ms
0 if unknown
Definition player.h:77
uint32_t queue_index
valid when queue_length > 0
Definition player.h:64
uint32_t cover_size
Definition player.h:75
player_state_t state
Definition player.h:63
uint32_t underruns
Definition player.h:89
uint32_t sleep_left_s
0 = off
Definition player.h:88
uint32_t queue_length
Definition player.h:65
float volume_max_db
user limit (hearing protection)
Definition player.h:85
uint16_t track_no
Definition player.h:72
uint32_t bitrate_kbps
Definition player.h:79
repeat_mode_t repeat
Definition player.h:87
lib_id_t track_id
Definition player.h:73
bool bitperfect
samples reach the DAC unchanged (SINK_CAP_BITPERFECT sink, DSP bypass, no resample)
Definition player.h:82
uint32_t dsp_flags
DSP_FLAG_* incl. DSP_FLAG_RESAMPLE.
Definition player.h:83
One queue entry.
Definition player.h:55
uint32_t end_ms
Definition player.h:59
lib_id_t track_id
LIB_ID_NONE for files outside the library.
Definition player.h:56
uint32_t start_ms
Definition player.h:58
#define TAG_TEXT_MAX
Field limits (bytes, UTF-8, including NUL).
Definition tags.h:17