summaryrefslogtreecommitdiff
path: root/src/audio/i2s_audio_output.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-06-07 13:19:45 +1000
committerjacqueline <me@jacqueline.id.au>2023-06-07 13:19:45 +1000
commit1f903accd95361735c841c87fdc6494ad3331b40 (patch)
tree5b69bd0548c06a93852a576fa90a170fa303a15e /src/audio/i2s_audio_output.cpp
parent2a568846bd8f1c9e23e86e7570557eed6f18cf9f (diff)
downloadtangara-fw-1f903accd95361735c841c87fdc6494ad3331b40.tar.gz
Flesh out audio state machine for playback
Also fix mono playback
Diffstat (limited to 'src/audio/i2s_audio_output.cpp')
-rw-r--r--src/audio/i2s_audio_output.cpp27
1 files changed, 23 insertions, 4 deletions
diff --git a/src/audio/i2s_audio_output.cpp b/src/audio/i2s_audio_output.cpp
index aab011d1..982499a0 100644
--- a/src/audio/i2s_audio_output.cpp
+++ b/src/audio/i2s_audio_output.cpp
@@ -38,7 +38,6 @@ I2SAudioOutput::I2SAudioOutput(drivers::GpioExpander* expander,
attenuation_(pots_->GetMaxAttenuation()) {
SetVolume(25); // For testing
dac_->SetSource(buffer());
- dac_->Start();
}
I2SAudioOutput::~I2SAudioOutput() {
@@ -46,6 +45,15 @@ I2SAudioOutput::~I2SAudioOutput() {
dac_->SetSource(nullptr);
}
+auto I2SAudioOutput::SetInUse(bool in_use) -> void {
+ if (in_use) {
+ dac_->Start();
+ } else {
+ dac_->Stop();
+ }
+ pots_->SetZeroCrossDetect(in_use);
+}
+
auto I2SAudioOutput::SetVolumeImbalance(int_fast8_t balance) -> void {
int_fast8_t new_difference = balance - left_difference_;
left_difference_ = balance;
@@ -124,6 +132,19 @@ auto I2SAudioOutput::Configure(const StreamInfo::Format& format) -> bool {
ESP_LOGI(kTag, "incoming audio stream: %u bpp @ %lu Hz", pcm.bits_per_sample,
pcm.sample_rate);
+ drivers::I2SDac::Channels ch;
+ switch (pcm.channels) {
+ case 1:
+ ch = drivers::I2SDac::CHANNELS_MONO;
+ break;
+ case 2:
+ ch = drivers::I2SDac::CHANNELS_STEREO;
+ break;
+ default:
+ ESP_LOGE(kTag, "dropping stream with out of bounds channels");
+ return false;
+ }
+
drivers::I2SDac::BitsPerSample bps;
switch (pcm.bits_per_sample) {
case 16:
@@ -153,9 +174,7 @@ auto I2SAudioOutput::Configure(const StreamInfo::Format& format) -> bool {
return false;
}
- // TODO(jacqueline): probs do something with the channel hey
-
- dac_->Reconfigure(bps, sample_rate);
+ dac_->Reconfigure(ch, bps, sample_rate);
current_config_ = pcm;
return true;