diff --git a/src/client/ui/widgets/tui_footer.rs b/src/client/ui/widgets/tui_footer.rs index 7ee1e57..5da69ff 100644 --- a/src/client/ui/widgets/tui_footer.rs +++ b/src/client/ui/widgets/tui_footer.rs @@ -20,8 +20,22 @@ impl<'a> Widget for TuiFooter<'a> { fn render(self, area: Rect, buf: &mut Buffer) { let text = vec![Span::styled( format!("Audio system: {}", self.player_state.audio_host), - Style::default().fg(Color::Green), - )]; + Style::default().fg(Color::Green)), + Span::raw(" "), + Span::raw(format!("Channels: {}", + self.player_state.song.as_ref().map(|song| song.audio_metadata()) + .and_then(|metadata| metadata.channels) + .map(|s| s.to_string()) + .unwrap_or_else(|| "UNKNOWN".to_string()))), + Span::raw(" "), + Span::raw(format!("Sample Rate: {} Hz", + self.player_state.song.as_ref().map(|song| song.audio_metadata()) + .and_then(|metadata| metadata.sample_rate) + .map(|s| s.to_string()) + .unwrap_or_else(|| "UNKNOWN".to_string()))), + ]; + + Paragraph::new(Spans::from(text)).render(area, buf); } diff --git a/src/server/audio/symphonia/stream.rs b/src/server/audio/symphonia/stream.rs index 2d1d1db..166ea61 100644 --- a/src/server/audio/symphonia/stream.rs +++ b/src/server/audio/symphonia/stream.rs @@ -3,6 +3,7 @@ use std::sync::mpsc; use std::thread::{self, JoinHandle}; use std::time::{Duration, SystemTime}; +use log::{debug, log_enabled, Level}; use symphonia::core::codecs::{DecoderOptions, CODEC_TYPE_NULL}; use symphonia::core::formats::FormatOptions; use symphonia::core::io::MediaSourceStream; @@ -240,6 +241,10 @@ impl PlayerStream { // Store the track identifier, it will be used to filter packets. let track_id = track.id; + if log_enabled!(Level::Debug) { + debug!("track: {:#?}", track); + } + // Use the default options for the decoder. let dec_opts: DecoderOptions = Default::default(); @@ -250,7 +255,13 @@ impl PlayerStream { let config = self.device.default_output_config().unwrap(); let audio_config = cpal::StreamConfig { - channels: cpal::ChannelCount::from(2u16), + channels: cpal::ChannelCount::from( + track + .codec_params + .channels + .map(|c| c.count() as u16) + .unwrap_or(2u16), + ), sample_rate: cpal::SampleRate( track .codec_params @@ -260,6 +271,10 @@ impl PlayerStream { buffer_size: cpal::BufferSize::Default, }; + if log_enabled!(Level::Debug) { + debug!("audio_config: {:#?}", audio_config); + } + let stream_tx = self.event_poller.stream_tx.clone(); match config.sample_format() {