annotate foosdk/sdk/foobar2000/SDK/playback_control.h @ 1:20d02a178406 default tip

*: check in everything else yay
author Paper <paper@tflc.us>
date Mon, 05 Jan 2026 02:15:46 -0500
parents
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
1 #pragma once
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
3 //! Provides control for various playback-related operations. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
4 //! All methods provided by this interface work from main app thread only. Calling from another thread will do nothing or trigger an exception. If you need to trigger one of playback_control methods from another thread, see main_thread_callback. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
5 //! Do not call playback_control methods from inside any kind of global callback (e.g. playlist callback), otherwise race conditions may occur. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
6 //! Use playback_control::get() to obtain an instance.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
7 class NOVTABLE playback_control : public service_base {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
8 FB2K_MAKE_SERVICE_COREAPI(playback_control);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
9 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
10
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
11 // Playback stop reason enum.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
12 enum t_stop_reason {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
13 stop_reason_user = 0,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
14 stop_reason_eof,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
15 stop_reason_starting_another,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
16 stop_reason_shutting_down,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
17 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
18
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
19 // Playback start mode enum.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
20 enum t_track_command {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
21 track_command_default = 0,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
22 track_command_play,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
23 //! Plays the next track from the current playlist according to the current playback order.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
24 track_command_next,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
25 //! Plays the previous track from the current playlist according to the current playback order.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
26 track_command_prev,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
27 //! For internal use only, do not use.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
28 track_command_settrack,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
29 //! Plays a random track from the current playlist.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
30 track_command_rand,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
31
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
32 //! For internal use only, do not use.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
33 track_command_resume,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
34 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
35
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
36 //! Retrieves now playing item handle.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
37 //! @returns true on success, false on failure (not playing).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
38 virtual bool get_now_playing(metadb_handle_ptr & p_out) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
39 //! Starts playback. If playback is already active, existing process is stopped first.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
40 //! @param p_command Specifies what track to start playback from. See t_track_Command enum for more info.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
41 //! @param p_paused Specifies whether playback should be started as paused.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
42 virtual void start(t_track_command p_command = track_command_play,bool p_paused = false) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
43 //! Stops playback.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
44 virtual void stop() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
45 //! Returns whether playback is active.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
46 virtual bool is_playing() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
47 //! Returns whether playback is active and in paused state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
48 virtual bool is_paused() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
49 //! Toggles pause state if playback is active.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
50 //! @param p_state set to true when pausing or to false when unpausing.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
51 virtual void pause(bool p_state) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
52
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
53 //! Retrieves stop-after-current-track option state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
54 virtual bool get_stop_after_current() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
55 //! Alters stop-after-current-track option state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
56 virtual void set_stop_after_current(bool p_state) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
57
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
58 //! Alters playback volume level.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
59 //! @param p_value volume in dB; 0 for full volume.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
60 virtual void set_volume(float p_value) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
61 //! Retrieves playback volume level.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
62 //! @returns current playback volume level, in dB; 0 for full volume.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
63 virtual float get_volume() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
64 //! Alters playback volume level one step up.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
65 virtual void volume_up() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
66 //! Alters playback volume level one step down.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
67 virtual void volume_down() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
68 //! Toggles playback mute state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
69 virtual void volume_mute_toggle() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
70 //! Seeks in currenly played track to specified time.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
71 //! @param p_time target time in seconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
72 virtual void playback_seek(double p_time) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
73 //! Seeks in currently played track by specified time forward or back.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
74 //! @param p_delta time in seconds to seek by; can be positive to seek forward or negative to seek back.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
75 virtual void playback_seek_delta(double p_delta) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
76 //! Returns whether currently played track is seekable. If it's not, playback_seek/playback_seek_delta calls will be ignored.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
77 virtual bool playback_can_seek() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
78 //! Returns current playback position within currently played track, in seconds.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
79 virtual double playback_get_position() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
80
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
81 //! Type used to indicate level of dynamic playback-related info displayed. Safe to use with <> opereators, e.g. level above N always includes information rendered by level N.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
82 enum t_display_level {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
83 //! No playback-related info
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
84 display_level_none,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
85 //! Static info and is_playing/is_paused stats
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
86 display_level_basic,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
87 //! display_level_basic + dynamic track titles on e.g. live streams
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
88 display_level_titles,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
89 //! display_level_titles + timing + VBR bitrate display etc
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
90 display_level_all,
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
91 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
92
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
93 //! Renders information about currently playing item.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
94 //! @param p_hook Optional callback object overriding fields and functions; set to NULL if not used.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
95 //! @param p_out String receiving the output on success.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
96 //! @param p_script Titleformat script to use. Use titleformat_compiler service to create one.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
97 //! @param p_filter Optional callback object allowing input to be filtered according to context (i.e. removal of linebreak characters present in tags when rendering playlist lines). Set to NULL when not used.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
98 //! @param p_level Indicates level of dynamic playback-related info displayed. See t_display_level enum for more details.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
99 //! @returns true on success, false when no item is currently being played.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
100 virtual bool playback_format_title(titleformat_hook * p_hook,pfc::string_base & p_out,const service_ptr_t<class titleformat_object> & p_script,titleformat_text_filter * p_filter,t_display_level p_level) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
101
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
102
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
103
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
104 //! Helper; renders info about any item, including currently playing item info if the item is currently played.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
105 bool playback_format_title_ex(metadb_handle_ptr p_item,titleformat_hook * p_hook,pfc::string_base & p_out,const service_ptr_t<class titleformat_object> & p_script,titleformat_text_filter * p_filter,t_display_level p_level) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
106 if (p_item.is_empty()) return playback_format_title(p_hook,p_out,p_script,p_filter,p_level);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
107 metadb_handle_ptr temp;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
108 if (get_now_playing(temp)) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
109 if (temp == p_item) {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
110 return playback_format_title(p_hook,p_out,p_script,p_filter,p_level);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
111 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
112 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
113 p_item->format_title(p_hook,p_out,p_script,p_filter);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
114 return true;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
115 }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
116
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
117 //! Helper; retrieves length of currently playing item.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
118 double playback_get_length();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
119 // Extended version: queries dynamic track info for the rare cases where that is different from static info.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
120 double playback_get_length_ex();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
121
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
122 //! Toggles stop-after-current state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
123 void toggle_stop_after_current() {set_stop_after_current(!get_stop_after_current());}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
124 //! Toggles pause state.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
125 void toggle_pause() {pause(!is_paused());}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
126
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
127 //! Starts playback if playback is inactive, otherwise toggles pause.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
128 void play_or_pause() {if (is_playing()) toggle_pause(); else start();}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
129 void play_or_unpause() { if (is_playing()) pause(false); else start();}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
130
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
131 void previous() { start(track_command_prev); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
132 void next() { start(track_command_next); }
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
133
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
134 //deprecated
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
135 inline void play_start(t_track_command p_command = track_command_play,bool p_paused = false) {start(p_command,p_paused);}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
136 //deprecated
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
137 inline void play_stop() {stop();}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
138
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
139 bool is_muted() {return get_volume() == volume_mute;}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
140
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
141 static const int volume_mute = -100;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
142
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
143
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
144
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
145 // new fb2k mobile specific user command handlers
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
146 void userPrev();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
147 void userNext();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
148 void userMute();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
149 void userStop();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
150 void userPlay();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
151 void userPause();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
152 void userStart();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
153 void userFastForward();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
154 void userRewind();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
155 void nonUserPause();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
156
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
157 // #$@! FiiO hack $!#@
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
158 void userActionHook() {}
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
159 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
160
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
161 class playback_control_v2 : public playback_control {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
162 FB2K_MAKE_SERVICE_COREAPI_EXTENSION(playback_control_v2,playback_control);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
163 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
164 //! Returns user-specified the step dB value for volume decrement/increment.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
165 virtual float get_volume_step() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
166 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
167
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
168 //! \since 1.2
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
169 class playback_control_v3 : public playback_control_v2 {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
170 FB2K_MAKE_SERVICE_COREAPI_EXTENSION(playback_control_v3, playback_control_v2);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
171 public:
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
172 //! Custom volume API - for use with specific output devices only. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
173 //! Note that custom volume SHOULD NOT EVER be presented as a slider where the user can immediately go to the maximum value. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
174 //! Custom volume mode dispatches on_volume_changed callbacks on change, though the passed value is meaningless; \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
175 //! the components should query the current value from playback_control_v3. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
176 //! Note that custom volume mode makes set_volume() / get_volume() meaningless, \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
177 //! but volume_up() / volume_down() / volume_mute_toggle() still work like they should (increment/decrement by one unit).
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
178 //! @returns whether custom volume mode is active.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
179 virtual bool custom_volume_is_active() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
180 //! Retrieves the current volume value for the custom volume mode. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
181 //! The volume units are arbitrary and specified by the device maker; see also: custom_volume_min(), custom_volume_max().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
182 virtual int custom_volume_get() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
183 //! Sets the current volume value for the custom volume mode. \n
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
184 //! The volume units are arbitrary and specified by the device maker; see also: custom_volume_min(), custom_volume_max().
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
185 //! CAUTION: you should NOT allow the user to easily go immediately to any value, it might blow their speakers out!
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
186 virtual void custom_volume_set(int val) = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
187 //! Returns the minimum custom volume value for the current output device.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
188 virtual int custom_volume_min() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
189 //! Returns the maximum custom volume value for the current output device.
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
190 virtual int custom_volume_max() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
191
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
192 virtual void restart() = 0;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
193 };
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
194
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
195 //for compatibility with old code
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
196 typedef playback_control play_control;
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
197
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
198 namespace fb2k {
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
199 metadb_handle_ptr nowPlaying(bool bAudible = false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
200 metadb_handle_ptr nowPlayingAudible();
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
201 bool isNowPlaying(metadb_handle_ptr const&, bool bAudible = false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
202 bool isNowPlayingAudible(metadb_handle_ptr const&);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
203 bool isNowPlaying(const playable_location&, bool bAudible = false);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
204 bool isNowPlayingAudible(const playable_location&);
20d02a178406 *: check in everything else
Paper <paper@tflc.us>
parents:
diff changeset
205 }