Made pathing AsRef but with more bounds due to thread shenanigans, locked behind audio feature

This commit is contained in:
gallant 2022-10-02 23:48:08 -05:00
parent b8ddcdb423
commit 22b71a3ffe
4 changed files with 10 additions and 9 deletions

View file

@ -15,8 +15,9 @@ version = "0.35.2"
features = ["image", "ttf"] features = ["image", "ttf"]
[dependencies] [dependencies]
rodio = "0.15.0" rodio = { version = "0.11.1", optional = true}
[features] [features]
default = [] default = []
static = ["sdl2/static-link", "sdl2/bundled"] static = ["sdl2/static-link", "sdl2/bundled"]
audio = ["dep:rodio"]

BIN
output.mp3 Normal file

Binary file not shown.

View file

@ -100,7 +100,7 @@ use std::{
path::Path, path::Path,
slice::IterMut, slice::IterMut,
}; };
use std::{thread, time, process::Command}; use std::{thread};
use sdl2::{ use sdl2::{
image::ImageRWops, image::ImageRWops,
mouse::MouseButton, mouse::MouseButton,
@ -776,20 +776,19 @@ impl Game {
/// ``` /// ```
/// play(String::from("/path/to/song.mp3", 15)); /// play(String::from("/path/to/song.mp3", 15));
/// ``` /// ```
pub fn play(x: String, y: u64) -> thread::JoinHandle<()> { #[cfg(feature = "audio")]
let wack = thread::spawn(move || { pub fn play<P: AsRef<Path> + std::marker::Send + 'static>(x: P, y: u64) -> thread::JoinHandle<()> {
thread::spawn(move || {
let (_stream, stream_handle) = OutputStream::try_default().unwrap(); let (_stream, stream_handle) = OutputStream::try_default().unwrap();
// Load a sound from a file, using a path relative to Cargo.toml // Load a sound from a file, using a path relative to Cargo.toml
let file = BufReader::new(File::open(x).unwrap()); let file = BufReader::new(File::open(x).unwrap());
// Decode that sound file into a source // Decode that sound file into a source
let source = Decoder::new(file).unwrap(); let source = Decoder::new(file).unwrap();
// Play the sound directly on the device // Play the sound directly on the device
stream_handle.play_raw(source.convert_samples()); stream_handle.play_raw(source.convert_samples()).unwrap();
// The sound plays in a separate audio thread, // The sound plays in a separate audio thread,
// so we need to keep the main thread alive while it's playing. // so we need to keep the main thread alive while it's playing.
std::thread::sleep(std::time::Duration::from_secs(y)); std::thread::sleep(std::time::Duration::from_secs(y));
})
});
wack
} }

View file

@ -1,6 +1,6 @@
#![warn(clippy::pedantic)] #![warn(clippy::pedantic)]
use cat_box::{draw_text, get_keyboard_state, get_mouse_state, Game, Sprite, SpriteCollection}; use cat_box::{draw_text, get_keyboard_state, get_mouse_state, Game, Sprite, SpriteCollection, play};
use sdl2::keyboard::Scancode; use sdl2::keyboard::Scancode;
fn main() { fn main() {
@ -19,6 +19,7 @@ fn main() {
coll.push(x); coll.push(x);
} }
} }
play(String::from("output.mp3"), 120);
game.run(|ctx| { game.run(|ctx| {
i = (i + 1) % 255; i = (i + 1) % 255;
ctx.set_background_colour(i as u8, 64, 255); ctx.set_background_colour(i as u8, 64, 255);