code: updating project and trying to fix error: seems that minimp3 has some unsafe exception

This commit is contained in:
Gabor Körber 2025-02-17 23:21:44 +01:00
parent e5b572fcc1
commit b90a37d671
3 changed files with 1212 additions and 720 deletions

1917
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@ -85,6 +85,8 @@ fn main() {
println!("Server task completed successfully"); println!("Server task completed successfully");
} }
println!("Setting shutdown timeout...");
rt.shutdown_timeout(tokio::time::Duration::from_secs(5)); rt.shutdown_timeout(tokio::time::Duration::from_secs(5));
audio.lock().unwrap().exit(); audio.lock().unwrap().exit();

View File

@ -243,7 +243,7 @@ fn detect_decoder(_file_name: &str, sound_decoder: &SoundDecoder) -> SoundDecode
// TODO: File detection via ending or whitelisting? // TODO: File detection via ending or whitelisting?
// This function MUST NOT return SoundDecoder::Detect // This function MUST NOT return SoundDecoder::Detect
match sound_decoder { match sound_decoder {
SoundDecoder::Detect => SoundDecoder::Mp3Mini, SoundDecoder::Detect => SoundDecoder::Rodio, // Mp3Mini seems bugged.
other => other.clone(), other => other.clone(),
} }
} }
@ -252,9 +252,11 @@ fn play_file(sink: &rodio::Sink, file_name: String, sound_decoder: &SoundDecoder
match detect_decoder(&file_name, sound_decoder) { match detect_decoder(&file_name, sound_decoder) {
SoundDecoder::Mp3Mini => { SoundDecoder::Mp3Mini => {
// MP3 Mini provides low latency playback // MP3 Mini provides low latency playback
let mut sound_file = File::open(file_name).unwrap(); let mut sound_file = File::open(file_name).expect("Failed opening sound file.");
let mut file_data = Vec::new(); let mut file_data = Vec::new();
sound_file.read_to_end(&mut file_data).unwrap(); sound_file
.read_to_end(&mut file_data)
.expect("Failed reading sound file.");
// Iterate over the MP3 frames and play them // Iterate over the MP3 frames and play them
let mut decoder = Decoder::new(Cursor::new(file_data)); let mut decoder = Decoder::new(Cursor::new(file_data));
loop { loop {
@ -262,7 +264,10 @@ fn play_file(sink: &rodio::Sink, file_name: String, sound_decoder: &SoundDecoder
Ok(frame) => { Ok(frame) => {
let source = rodio::buffer::SamplesBuffer::new( let source = rodio::buffer::SamplesBuffer::new(
2, 2,
frame.sample_rate.try_into().unwrap(), frame
.sample_rate
.try_into()
.expect("Sample Rate unlocking failed"),
&*frame.data, &*frame.data,
); );
sink.append(source); sink.append(source);