diff --git a/.env b/.env new file mode 100644 index 0000000..20da319 --- /dev/null +++ b/.env @@ -0,0 +1,2 @@ +DIRECTORY="E:/sounds/soundboard/all" +DEVICE_PATTERN=".*VB-Audio Virtual Cable.*" diff --git a/Cargo.lock b/Cargo.lock index 1beb0ef..d29b120 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -317,6 +317,12 @@ version = "0.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0c87e182de0887fd5361989c677c4e8f5000cd9491d6d563161a8f3a5519fc7f" +[[package]] +name = "dotenvy" +version = "0.15.7" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1aaf95b3e5c8f23aa320147307562d361db0ae0d51242340f558153b4eb2439b" + [[package]] name = "encoding_rs" version = "0.8.32" @@ -1151,6 +1157,7 @@ dependencies = [ "axum", "axum-template", "cpal", + "dotenvy", "log", "minijinja", "minimp3", diff --git a/Cargo.toml b/Cargo.toml index a981e77..6fd2ed8 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -10,6 +10,7 @@ default-run = "soundboard" axum = "0.6.18" axum-template = { version = "0.19.0", features = ["minijinja"] } cpal = "0.15.2" +dotenvy = "0.15.7" log = "0.4.20" minijinja = { version = "1.0.3", features = ["loader"] } minimp3 = "0.5.1" diff --git a/README.md b/README.md new file mode 100644 index 0000000..73f9a0b --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ +# Soundboard + +The idea is to run a web server that serves a sound board app to your devices, so you can play sounds on your computer from a second device. + +## Features + + - [x] play mp3 + - [x] play ogg + - [x] play wav + - [x] play flac + - [x] read mp3 duration + - [ ] read ogg duration + - [ ] read wav duration + - [x] block buttons + - [x] fullscreen + - [x] portrait/landscape + - [ ] static css + - [ ] categories + - [ ] set folders per env + - [ ] set output device per env + - [ ] endpoint for setting devices + - [ ] endpoint for setting folders + - [ ] auth + - [ ] multi-device support + - [ ] press button while playing + diff --git a/src/main.rs b/src/main.rs index bf53739..8c69ee1 100644 --- a/src/main.rs +++ b/src/main.rs @@ -5,10 +5,12 @@ use minijinja::{path_loader, Environment}; use state::{AppState, TemplateEngine}; use std::net::SocketAddr; -use log::{debug, info}; +use log::info; use serde::Serialize; +use std::env; use std::sync::{Arc, Mutex}; +use dotenvy::dotenv; use vbplay::{AudioThread, DeviceSelection, SoundDecoder}; mod soundclips; @@ -17,23 +19,25 @@ mod vbplay; #[tokio::main] async fn main() { + dotenv().ok(); + + let device_pattern = env::var("DEVICE_PATTERN").expect("Need a device pattern"); + let folder = env::var("DIRECTORY").expect("Need a directory in env file."); + let mut jinja = Environment::new(); jinja.set_loader(path_loader("templates")); let template_engine = Engine::from(jinja); let audio = vbplay::audio_thread( - DeviceSelection::FindByPattern(".*VB-Audio Virtual Cable.*".to_owned()), + DeviceSelection::FindByPattern(device_pattern), SoundDecoder::Detect, ); let audio: Arc> = Arc::new(Mutex::new(audio)); let app_state = AppState { engine: template_engine, - clips: soundclips::scan_directory_for_clips( - "E:/sounds/soundboard/all", - &["mp3", "ogg", "wav", "flac"], - ) - .expect("No Soundclips found."), + clips: soundclips::scan_directory_for_clips(&folder, &["mp3", "ogg", "wav", "flac"]) + .expect("No Soundclips found."), player: audio, playback: None, };