ESPHome  2025.2.0
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Modules Pages
media_player.h
Go to the documentation of this file.
1 #pragma once
2 
4 #include "esphome/core/helpers.h"
5 
6 namespace esphome {
7 namespace media_player {
8 
9 enum MediaPlayerState : uint8_t {
15 };
17 
18 enum MediaPlayerCommand : uint8_t {
31 };
33 
34 enum class MediaPlayerFormatPurpose : uint8_t {
35  PURPOSE_DEFAULT = 0,
37 };
38 
40  std::string format;
41  uint32_t sample_rate;
42  uint32_t num_channels;
44  uint32_t sample_bytes;
45 };
46 
47 class MediaPlayer;
48 
50  public:
51  MediaPlayerTraits() = default;
52 
53  void set_supports_pause(bool supports_pause) { this->supports_pause_ = supports_pause; }
54 
55  bool get_supports_pause() const { return this->supports_pause_; }
56 
57  std::vector<MediaPlayerSupportedFormat> &get_supported_formats() { return this->supported_formats_; }
58 
59  protected:
60  bool supports_pause_{false};
61  std::vector<MediaPlayerSupportedFormat> supported_formats_{};
62 };
63 
65  public:
66  MediaPlayerCall(MediaPlayer *parent) : parent_(parent) {}
67 
68  MediaPlayerCall &set_command(MediaPlayerCommand command);
69  MediaPlayerCall &set_command(optional<MediaPlayerCommand> command);
70  MediaPlayerCall &set_command(const std::string &command);
71 
72  MediaPlayerCall &set_media_url(const std::string &url);
73 
74  MediaPlayerCall &set_volume(float volume);
75  MediaPlayerCall &set_announcement(bool announce);
76 
77  void perform();
78 
79  const optional<MediaPlayerCommand> &get_command() const { return this->command_; }
80  const optional<std::string> &get_media_url() const { return this->media_url_; }
81  const optional<float> &get_volume() const { return this->volume_; }
82  const optional<bool> &get_announcement() const { return this->announcement_; }
83 
84  protected:
85  void validate_();
91 };
92 
93 class MediaPlayer : public EntityBase {
94  public:
96  float volume{1.0f};
97 
99 
100  void publish_state();
101 
102  void add_on_state_callback(std::function<void()> &&callback);
103 
104  virtual bool is_muted() const { return false; }
105 
106  virtual MediaPlayerTraits get_traits() = 0;
107 
108  protected:
110 
111  virtual void control(const MediaPlayerCall &call) = 0;
112 
113  CallbackManager<void()> state_callback_{};
114 };
115 
116 } // namespace media_player
117 } // namespace esphome
const optional< float > & get_volume() const
Definition: media_player.h:81
const char * media_player_state_to_string(MediaPlayerState state)
const char * media_player_command_to_string(MediaPlayerCommand command)
const optional< bool > & get_announcement() const
Definition: media_player.h:82
std::vector< MediaPlayerSupportedFormat > & get_supported_formats()
Definition: media_player.h:57
const optional< MediaPlayerCommand > & get_command() const
Definition: media_player.h:79
const optional< std::string > & get_media_url() const
Definition: media_player.h:80
MediaPlayerCall(MediaPlayer *parent)
Definition: media_player.h:66
Implementation of SPI Controller mode.
Definition: a01nyub.cpp:7
void set_supports_pause(bool supports_pause)
Definition: media_player.h:53
bool state
Definition: fan.h:34
optional< std::string > media_url_
Definition: media_player.h:88
optional< MediaPlayerCommand > command_
Definition: media_player.h:87