diff --git a/.gitignore b/.gitignore index 20b93e6..5f4a354 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ logs/ # direnv /.direnv +*.silk \ No newline at end of file diff --git a/mania-codec/src/audio/decoder.rs b/mania-codec/src/audio/decoder.rs index 8a00670..5faac77 100644 --- a/mania-codec/src/audio/decoder.rs +++ b/mania-codec/src/audio/decoder.rs @@ -4,7 +4,10 @@ use crate::audio::{AudioResampleStream, AudioRwStream, DecodeSample}; use thiserror::Error; #[derive(Debug, Error)] -pub enum AudioCodecDecoderError {} +pub enum AudioCodecDecoderError { + #[error("Symphonia decoder error: {0}")] + SymphoniaError(#[from] symphonia::core::errors::Error), +} pub trait AudioDecoder { fn decode( diff --git a/mania-codec/src/audio/decoder/symphonia_decoder.rs b/mania-codec/src/audio/decoder/symphonia_decoder.rs index 5504f67..3b8082d 100644 --- a/mania-codec/src/audio/decoder/symphonia_decoder.rs +++ b/mania-codec/src/audio/decoder/symphonia_decoder.rs @@ -92,9 +92,7 @@ impl AudioDecoder for SymphoniaDecoder { let hint = Hint::new(); let meta_opts: MetadataOptions = Default::default(); let fmt_opts: FormatOptions = Default::default(); - let probed = symphonia::default::get_probe() - .format(&hint, mss, &fmt_opts, &meta_opts) - .unwrap(); + let probed = symphonia::default::get_probe().format(&hint, mss, &fmt_opts, &meta_opts)?; let mut format = probed.format; let track = format .tracks() @@ -114,7 +112,7 @@ impl AudioDecoder for SymphoniaDecoder { if packet.track_id() != track_id { continue; } - match decoder.decode(&packet).unwrap() { + match decoder.decode(&packet)? { AudioBufferRef::F32(data) => conv(&mut pcm_data, data), AudioBufferRef::U8(data) => conv(&mut pcm_data, data), AudioBufferRef::U16(data) => conv(&mut pcm_data, data), diff --git a/mania-codec/src/audio/resampler.rs b/mania-codec/src/audio/resampler.rs index c500e7c..1dea79e 100644 --- a/mania-codec/src/audio/resampler.rs +++ b/mania-codec/src/audio/resampler.rs @@ -4,7 +4,12 @@ use crate::audio::{AudioResampleStream, ResampleSample}; use thiserror::Error; #[derive(Debug, Error)] -pub enum AudioCodecResamplerError {} +pub enum AudioCodecResamplerError { + #[error("Rubato resampler error: {0}")] + RubatoResampleError(#[from] rubato::ResampleError), + #[error("Rubato resampler construction error: {0}")] + RubatoResamplerConstructionError(#[from] rubato::ResamplerConstructionError), +} pub trait AudioResampler { fn resample( diff --git a/mania-codec/src/audio/resampler/rubato_resampler.rs b/mania-codec/src/audio/resampler/rubato_resampler.rs index 737fe54..1fc92a7 100644 --- a/mania-codec/src/audio/resampler/rubato_resampler.rs +++ b/mania-codec/src/audio/resampler/rubato_resampler.rs @@ -32,22 +32,23 @@ impl AudioResampler for RubatoResampler { (pcm_in.len() as f64 * sr_out as f64 / sr_in as f64) as usize + 1024, ); // TODO: channel - let mut resampler = rubato::FftFixedInOut::::new(sr_in, sr_out, 1024, 1).unwrap(); + let mut resampler = rubato::FftFixedInOut::::new(sr_in, sr_out, 1024, 1)?; let mut output_buffer = resampler.output_buffer_allocate(true); let mut pos_in = 0; while pos_in + resampler.input_frames_next() < pcm_in.len() { - let (in_len, out_len) = resampler - .process_into_buffer(&[&pcm_in[pos_in..]], &mut output_buffer, None) - .unwrap(); + let (in_len, out_len) = + resampler.process_into_buffer(&[&pcm_in[pos_in..]], &mut output_buffer, None)?; pos_in += in_len; pcm_out.extend_from_slice(&output_buffer[0][..out_len]); } if pos_in < pcm_in.len() { - let (_, out_len) = resampler - .process_partial_into_buffer(Some(&[&pcm_in[pos_in..]]), &mut output_buffer, None) - .unwrap(); + let (_, out_len) = resampler.process_partial_into_buffer( + Some(&[&pcm_in[pos_in..]]), + &mut output_buffer, + None, + )?; pcm_out.extend_from_slice(&output_buffer[0][..out_len]); }