mirror of
				https://github.com/esphome/esphome.git
				synced 2025-10-30 22:53:59 +00:00 
			
		
		
		
	Speaker return bytes written and do not wait for queue (#5182)
This commit is contained in:
		| @@ -185,7 +185,7 @@ void I2SAudioSpeaker::loop() { | |||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| bool I2SAudioSpeaker::play(const uint8_t *data, size_t length) { | size_t I2SAudioSpeaker::play(const uint8_t *data, size_t length) { | ||||||
|   if (this->state_ != speaker::STATE_RUNNING && this->state_ != speaker::STATE_STARTING) { |   if (this->state_ != speaker::STATE_RUNNING && this->state_ != speaker::STATE_STARTING) { | ||||||
|     this->start(); |     this->start(); | ||||||
|   } |   } | ||||||
| @@ -197,13 +197,13 @@ bool I2SAudioSpeaker::play(const uint8_t *data, size_t length) { | |||||||
|     size_t to_send_length = std::min(remaining, BUFFER_SIZE); |     size_t to_send_length = std::min(remaining, BUFFER_SIZE); | ||||||
|     event.len = to_send_length; |     event.len = to_send_length; | ||||||
|     memcpy(event.data, data + index, to_send_length); |     memcpy(event.data, data + index, to_send_length); | ||||||
|     if (xQueueSend(this->buffer_queue_, &event, 100 / portTICK_PERIOD_MS) == pdTRUE) { |     if (xQueueSend(this->buffer_queue_, &event, 0) != pdTRUE) { | ||||||
|  |       return index; | ||||||
|  |     } | ||||||
|     remaining -= to_send_length; |     remaining -= to_send_length; | ||||||
|     index += to_send_length; |     index += to_send_length; | ||||||
|   } |   } | ||||||
|     App.feed_wdt(); |   return index; | ||||||
|   } |  | ||||||
|   return true; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| }  // namespace i2s_audio | }  // namespace i2s_audio | ||||||
|   | |||||||
| @@ -54,7 +54,7 @@ class I2SAudioSpeaker : public Component, public speaker::Speaker, public I2SAud | |||||||
|   void start(); |   void start(); | ||||||
|   void stop() override; |   void stop() override; | ||||||
|  |  | ||||||
|   bool play(const uint8_t *data, size_t length) override; |   size_t play(const uint8_t *data, size_t length) override; | ||||||
|  |  | ||||||
|  protected: |  protected: | ||||||
|   void start_(); |   void start_(); | ||||||
|   | |||||||
| @@ -12,8 +12,8 @@ enum State : uint8_t { | |||||||
|  |  | ||||||
| class Speaker { | class Speaker { | ||||||
|  public: |  public: | ||||||
|   virtual bool play(const uint8_t *data, size_t length) = 0; |   virtual size_t play(const uint8_t *data, size_t length) = 0; | ||||||
|   virtual bool play(const std::vector<uint8_t> &data) { return this->play(data.data(), data.size()); } |   virtual size_t play(const std::vector<uint8_t> &data) { return this->play(data.data(), data.size()); } | ||||||
|  |  | ||||||
|   virtual void stop() = 0; |   virtual void stop() = 0; | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user