mirror of
https://github.com/esphome/esphome.git
synced 2024-12-22 16:37:52 +01:00
[voice_assistant] Write less data to speaker each loop (#6877)
This commit is contained in:
parent
6de79d6cfb
commit
dceab6ce29
@ -428,14 +428,15 @@ void VoiceAssistant::loop() {
|
|||||||
#ifdef USE_SPEAKER
|
#ifdef USE_SPEAKER
|
||||||
void VoiceAssistant::write_speaker_() {
|
void VoiceAssistant::write_speaker_() {
|
||||||
if (this->speaker_buffer_size_ > 0) {
|
if (this->speaker_buffer_size_ > 0) {
|
||||||
size_t written = this->speaker_->play(this->speaker_buffer_, this->speaker_buffer_size_);
|
size_t write_chunk = std::min<size_t>(this->speaker_buffer_size_, 4 * 1024);
|
||||||
|
size_t written = this->speaker_->play(this->speaker_buffer_, write_chunk);
|
||||||
if (written > 0) {
|
if (written > 0) {
|
||||||
memmove(this->speaker_buffer_, this->speaker_buffer_ + written, this->speaker_buffer_size_ - written);
|
memmove(this->speaker_buffer_, this->speaker_buffer_ + written, this->speaker_buffer_size_ - written);
|
||||||
this->speaker_buffer_size_ -= written;
|
this->speaker_buffer_size_ -= written;
|
||||||
this->speaker_buffer_index_ -= written;
|
this->speaker_buffer_index_ -= written;
|
||||||
this->set_timeout("speaker-timeout", 5000, [this]() { this->speaker_->stop(); });
|
this->set_timeout("speaker-timeout", 5000, [this]() { this->speaker_->stop(); });
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGD(TAG, "Speaker buffer full, trying again next loop");
|
ESP_LOGV(TAG, "Speaker buffer full, trying again next loop");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -798,7 +799,7 @@ void VoiceAssistant::on_audio(const api::VoiceAssistantAudio &msg) {
|
|||||||
this->speaker_buffer_index_ += msg.data.length();
|
this->speaker_buffer_index_ += msg.data.length();
|
||||||
this->speaker_buffer_size_ += msg.data.length();
|
this->speaker_buffer_size_ += msg.data.length();
|
||||||
this->speaker_bytes_received_ += msg.data.length();
|
this->speaker_bytes_received_ += msg.data.length();
|
||||||
ESP_LOGD(TAG, "Received audio: %d bytes from API", msg.data.length());
|
ESP_LOGV(TAG, "Received audio: %" PRId32 " bytes from API", msg.data.length());
|
||||||
} else {
|
} else {
|
||||||
ESP_LOGE(TAG, "Cannot receive audio, buffer is full");
|
ESP_LOGE(TAG, "Cannot receive audio, buffer is full");
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user