193 void mixChanged (
bool automatic,
const char *why);
Audio engine, responsible for one "room" worth of audio.
Definition: engine.h:28
void sourceStatus(RESPONSE_CODE status, const char *detail)
Transmit any source status notifications to connected clients.
Definition: engine.cpp:598
QueueMode queue_mode
Definition: engine.h:101
time_t onset
Clock time at which a playback stall was detected.
Definition: engine.h:69
static const PianodSchema::CommandIds & json_request_names()
Retrieve names for our JSON requests.
Definition: enginecommand.cpp:250
ThingieList getThingsOrCurrent(const PianodConnection &conn, const Parsnip::Data &options, CommandReply *diagnostics, Ownership::Action usage=Ownership::Action::USE) const
Get some things from a predicate and ensure they is usable.
Definition: enginecommand.cpp:510
MusicThingie * getThingOrCurrent(const PianodConnection &conn, const Parsnip::Data &options, Ownership::Action usage=Ownership::Action::USE) const
Get a thing from a predicate and ensure it is usable.
Definition: enginecommand.cpp:429
UserList getAutotuneUsers()
Definition: enginecommand.cpp:1416
SongList::size_type history_size
Maximum number of tracks retained in history.
Definition: engine.h:78
ResponseGroup playbackState(PlaybackState state, PianodConnection *conn=nullptr)
Pause or resume playback.
Definition: enginecommand.cpp:1310
void sourceOffline(const Media::Source *const)
Unregister a source by removing its playlists.
Definition: engine.cpp:587
time_t onset_playpoint
Playback point at which a playback stall was detected.
Definition: engine.h:70
AudioEngine(PianodService *svc, const AudioSettings &audio_options)
Create a new audio player attached to a service with an assigned audio output device.
Definition: engine.cpp:37
Announced track_announced
Definition: engine.h:99
bool quit_initiated
Flag set once a shutdown request has been initiated.
Definition: engine.h:81
time_t pause_expiration
Definition: engine.h:102
static const int pause_timeout
Pause timeout applied to all sources/songs.
Definition: engine.h:73
void mixChanged(bool automatic, const char *why)
When mix has changed, reset track aquisition lockouts.
Definition: engine.cpp:609
PianodPlaylist * getPlaylistOrCurrent(const PianodConnection &conn, const Parsnip::Data &options, Ownership::Action usage) const
Get a playlist predicate, or use current playlist.
Definition: enginecommand.cpp:594
time_t playback_effective_start
When not stalled, current time minus playback point.
Definition: engine.h:68
ResponseGroup promotePlayer(void)
Promote the cueing player to the primary player. */.
Definition: engine.cpp:150
PlaylistList getPlaylistsOrCurrent(const PianodConnection &conn, const Parsnip::Data &options, CommandReply *diagnostics, Ownership::Action usage=Ownership::Action::USE) const
Get a playlist predicate, or use current playlist.
Definition: enginecommand.cpp:622
void require(PianodConnection &conn, unsigned long requirements) const
Check that required state/privileges are available.
Definition: enginecommand.cpp:399
float monitorPlayer(void)
Check/respond to various things with the player.
Definition: engine.cpp:241
float periodic(void)
Periodically invoked function that monitors players, starts new songs, etc.
Definition: engine.cpp:520
static const Parsnip::Parser::Definitions & parser_definitions()
Definition: enginecommand.cpp:170
struct AudioEngine::@0 stall
Structure used to track player progress/status.
enum AudioEngine::requirement_t REQUIREMENT
Prerequisites that may be necessary to execute a particular command.
ResponseGroup queueMode(QueueMode mode, PianodConnection *conn=nullptr)
Set the queueing mode.
Definition: enginecommand.cpp:1350
ResponseGroup cleanupPlayer(void)
Clean up when a player completes.
Definition: engine.cpp:174
Tuner::Tuner mix
Definition: engine.h:107
requirement_t
Prerequisites that may be necessary to execute a particular command.
Definition: engine.h:31
@ REQUIRE_PLAYER
Require an audio player exist.
Definition: engine.h:34
@ REQUIRE_SOURCE
Marks other flags as source-related.
Definition: engine.h:32
@ REQUIRE_EXPAND
Require expand to song list capability.
Definition: engine.h:35
@ REQUIRE_PLAYLIST
Marks other flags as playlist-related.
Definition: engine.h:33
Retainer< PianodSong * > cueing_song
Definition: engine.h:88
Media::Player * cueing_player
Definition: engine.h:96
PlaybackState
Definition: engine.h:38
void shutdown(bool immediate)
Initiate shutdown of the audio engine.
Definition: engine.cpp:78
bool considerCreatingPlayer(void)
Create a player, if the current state allows it.
Definition: engine.cpp:463
virtual void registerInterpreter(PianodDispatcher &dispatcher) override
Register the interpreter with a dispatcher.
Definition: enginecommand.cpp:317
const float prefetch_time
Number of seconds before cuing at which queue is refreshed.
Definition: engine.h:76
bool queueEmpty(void) const
Definition: engine.h:159
void PurgeUnselectedSongs(void)
Remove songs from the front of the random queue (but not songs from the request queue).
Definition: engine.cpp:399
bool empty_warning_given
Definition: engine.h:104
SongList getSongsOrCurrent(const PianodConnection &conn, const Parsnip::Data &options, CommandReply *diagnostics, Ownership::Action usage=Ownership::Action::USE) const
Get a songlist predicate, or use current song.
Definition: enginecommand.cpp:571
AudioSettings audio
Definition: engine.h:106
bool lockout_announced
Definition: engine.h:93
Response gatherSelectedPlaylist() const
Definition: enginecommand.cpp:1368
ResponseGroup updateStatus(PianodConnection &there)
Update audio engine status to a client.
Definition: enginecommand.cpp:1408
static const Parsnip::OptionParser::Definitions & playback_selection_option_definitions()
Definition: enginecommand.cpp:95
SongList requests
Definition: engine.h:89
ResponseGroup assembleStatus()
Should be called intermittently by the main run-loop.
Definition: enginecommand.cpp:1394
bool sourceRemovalCheck(const Media::Source *const source)
Remove all songs from a given source.
Definition: engine.cpp:564
void sourceReady(const Media::Source *const)
When a new source is ready, clear any track aquisition delays.
Definition: engine.cpp:556
SongList song_history
Definition: engine.h:91
virtual const Parsnip::Parser::Definitions & getParserDefinitions() override
Retrieve the parser definitions handled by the interpreter.
Definition: enginecommand.cpp:244
QueueMode
Behaviors possible when the player is idle.
Definition: engine.h:53
@ STOPPED
Don't start playing anything.
@ REQUESTS
Play only requested songs.
@ RANDOMPLAY
Random selections from the current source if no requests.
virtual ~AudioEngine(void)
Definition: engine.cpp:64
bool acquireRandomTracks(void)
Retrieves some random tracks and puts them in the queue.
Definition: engine.cpp:373
PlaybackState playback_state
Definition: engine.h:100
Retainer< PianodSong * > current_song
Definition: engine.h:87
volatile bool quit_requested
Flag for signal handlers to request shutdown.
Definition: engine.h:80
virtual bool authorizedCommand(Parsnip::Parser::CommandId command, PianodConnection &conn) override
Check whether a command is authorized.
Definition: enginecommand.cpp:342
void playlistsChanged()
When playlists have changed, reset track aquisition lockouts.
Definition: engine.cpp:603
void usersChangedNotification()
Definition: engine.cpp:614
static const int aquire_tracks_retry
Retry period if unable to get random tracks.
Definition: engine.h:74
virtual ResponseCollector handleCommand(Parsnip::Parser::CommandId command, const Parsnip::Data &options, PianodConnection &conn) override
Command handler.
Definition: enginecommand.cpp:720
bool startPlayer(void)
Start playback of a the next song in the queue.
Definition: engine.cpp:90
time_t track_acquisition_time
The next time at which random track aquisition may be attempted.
Definition: engine.h:83
Media::Player * player
Definition: engine.h:95
Response gatherQueueMode() const
Definition: enginecommand.cpp:1362
void sourceRemoved(const Media::Source *const source)
Unregister a source by removing its playlists.
Definition: engine.cpp:578
ResponseGroup gatherPlaybackStatus() const
Definition: enginecommand.cpp:1301
SongList sendSongLists(PianodConnection &conn, const Parsnip::Data &options, bool historical)
Generate response messages.
Definition: engineresponder.cpp:31
SongList random_queue
Definition: engine.h:90
signed long abort_playpoint
Playpoint where crossfaded skip will abort, or 0 for not aborted.
Definition: engine.h:103
TransitionProgress transition_state
Definition: engine.h:97
PianodService * service
Definition: engine.h:85
const AudioSettings & audioSettings()
Definition: engine.h:204
Retainer< PianodPlaylist * > current_playlist
Definition: engine.h:94
static DataResponse constructSeedlist(const ThingieList &things, PianodPlaylist *playlist)
Prepare a list of seeds for transmission.
Definition: engineresponder.cpp:86
Announced
Whether and how completely track information was announced at start of playback.
Definition: engine.h:60
CommandReply controlPlayback(const Parsnip::Data &options, bool start_playback, PianodConnection &conn)
Definition: enginecommand.cpp:110
TransitionProgress
States player progresses through when segueing between tracks.
Definition: engine.h:44
@ Purged
the queue has een purged in preparation for end-of-song
@ Cueing
a second audio player has been initialized and is initializing/prefetching.
@ Crossfading
the audio players are both playing as audio is cross-faded
@ Playing
the audio player is not transitioning
@ Done
transition is done, but old song keeps right on going.
This class is derived from ResponseCollector and adds success/failure adder functions and a few varia...
Definition: response.h:294
This class is derived from ResponseCollector, and adds no member variables but adds data adder functi...
Definition: response.h:347
Base class for songs, albums, artists, playlists, genres, etc.
Definition: musictypes.h:77
Type
Definition: musictypes.h:86
Action
Access actions for an object.
Definition: fundamentals.h:364
@ USE
Use the item to do something.
Generic data type.
Definition: parsnip.h:81
std::vector< const char * > Definitions
Definition: parsnip_command.h:90
std::vector< Definition > Definitions
Definition: parsnip_command.h:117
int CommandId
Definition: parsnip_command.h:109
Connection to a pianod client, along with context and state of that connection.
Definition: connection.h:54
Dispatcher based on Parsnip template, customized for pianod by adding help support.
Definition: interpreter.h:80
Interpreter class based on Parsnip template, customized base for pianod interpreters with the additio...
Definition: interpreter.h:101
Base class for playlists, but still a MusicThingie.
Definition: musictypes.h:416
std::map< std::string, CommandId > CommandIds
Definition: interpreter.h:59
Pianod service, a customized FootballService for Pianod connections.
Definition: connection.h:115
A container for lists of playlists.
Definition: retainedlist.h:324
A response collector/aggregator.
Definition: response.h:197
Container for multiple Responses.
Definition: response.h:155
Type combining RESPONSE_CODE with a value or explanation:
Definition: response.h:49
A container for holding songs.
Definition: retainedlist.h:328
Base class for storing lists of thingies, which need to be reference counted accurately.
Definition: retainedlist.h:20
Tuner maintains a set of playlists and their inclusion or exclusion from the current mix,...
Definition: tuner.h:74
Pianod specializations of Football connections & services.
std::vector< const class User * > UserList
Definition: fundamentals.h:348
enum server_status_t RESPONSE_CODE
pianod command processing.
Playlist / Artist / Album / Song data types.
Send messages of various kinds to clients.
Collections for music thingie types.
Smart pointers for music thingie types.
Audio output device & driver parameters.
Definition: fundamentals.h:52