summaryrefslogtreecommitdiff
path: root/src/audio/i2s_audio_output.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-08-08 20:25:42 +1000
committerjacqueline <me@jacqueline.id.au>2023-08-08 20:25:42 +1000
commite1181fbe59a835ea9c93d6e067e9757e8c522d3c (patch)
tree2fd61bb93713de8c2205b7b6d0a8c84c49832e93 /src/audio/i2s_audio_output.cpp
parentc3f40a8cc37114365ef3ec6f2888df64e5206b39 (diff)
parent592f231627843bc44ebaaa4506aec26da1f56499 (diff)
downloadtangara-fw-e1181fbe59a835ea9c93d6e067e9757e8c522d3c.tar.gz
Merge branch 'main' into opus
Diffstat (limited to 'src/audio/i2s_audio_output.cpp')
-rw-r--r--src/audio/i2s_audio_output.cpp38
1 files changed, 27 insertions, 11 deletions
diff --git a/src/audio/i2s_audio_output.cpp b/src/audio/i2s_audio_output.cpp
index bb413b38..d60ddfa4 100644
--- a/src/audio/i2s_audio_output.cpp
+++ b/src/audio/i2s_audio_output.cpp
@@ -115,10 +115,20 @@ auto I2SAudioOutput::AdjustVolumeDown() -> bool {
return true;
}
-auto I2SAudioOutput::Configure(const StreamInfo::Pcm& pcm) -> bool {
+auto I2SAudioOutput::PrepareFormat(const StreamInfo::Pcm& orig)
+ -> StreamInfo::Pcm {
+ return StreamInfo::Pcm{
+ .channels = std::min<uint8_t>(orig.channels, 2),
+ .bits_per_sample = std::clamp<uint8_t>(orig.bits_per_sample, 16, 32),
+ .sample_rate = 44100,
+ //.sample_rate = std::clamp<uint32_t>(orig.sample_rate, 8000, 96000),
+ };
+}
+
+auto I2SAudioOutput::Configure(const StreamInfo::Pcm& pcm) -> void {
if (current_config_ && pcm == *current_config_) {
ESP_LOGI(kTag, "ignoring unchanged format");
- return true;
+ return;
}
ESP_LOGI(kTag, "incoming audio stream: %u ch %u bpp @ %lu Hz", pcm.channels,
@@ -134,7 +144,7 @@ auto I2SAudioOutput::Configure(const StreamInfo::Pcm& pcm) -> bool {
break;
default:
ESP_LOGE(kTag, "dropping stream with out of bounds channels");
- return false;
+ return;
}
drivers::I2SDac::BitsPerSample bps;
@@ -150,30 +160,36 @@ auto I2SAudioOutput::Configure(const StreamInfo::Pcm& pcm) -> bool {
break;
default:
ESP_LOGE(kTag, "dropping stream with unknown bps");
- return false;
+ return;
}
drivers::I2SDac::SampleRate sample_rate;
switch (pcm.sample_rate) {
+ case 8000:
+ sample_rate = drivers::I2SDac::SAMPLE_RATE_8;
+ break;
+ case 32000:
+ sample_rate = drivers::I2SDac::SAMPLE_RATE_32;
+ break;
case 44100:
sample_rate = drivers::I2SDac::SAMPLE_RATE_44_1;
break;
case 48000:
sample_rate = drivers::I2SDac::SAMPLE_RATE_48;
break;
+ case 88200:
+ sample_rate = drivers::I2SDac::SAMPLE_RATE_88_2;
+ break;
+ case 96000:
+ sample_rate = drivers::I2SDac::SAMPLE_RATE_96;
+ break;
default:
ESP_LOGE(kTag, "dropping stream with unknown rate");
- return false;
+ return;
}
dac_->Reconfigure(ch, bps, sample_rate);
current_config_ = pcm;
-
- return true;
-}
-
-auto I2SAudioOutput::Send(const cpp::span<std::byte>& data) -> void {
- dac_->WriteData(data);
}
} // namespace audio