summaryrefslogtreecommitdiff
path: root/src/audio
diff options
context:
space:
mode:
authorYuval Adam <_@yuv.al>2024-05-31 15:12:23 +0200
committerYuval Adam <_@yuv.al>2024-05-31 15:12:23 +0200
commit948c1f212cab5d56e82e47fd8ff10f20ecbf847f (patch)
treeab51c037c623c64422f4de2fd0a99120770c8ca0 /src/audio
parent4a4c5b9174cf0182d4eb755f5d97ca432e5960ca (diff)
Initial attempt doesn't work
Diffstat (limited to 'src/audio')
-rw-r--r--src/audio/mod.rs15
-rw-r--r--src/audio/mpv.rs5
-rw-r--r--src/audio/rodio.rs23
3 files changed, 27 insertions, 16 deletions
diff --git a/src/audio/mod.rs b/src/audio/mod.rs
index 7fca1a7..5aae19a 100644
--- a/src/audio/mod.rs
+++ b/src/audio/mod.rs
@@ -1,10 +1,6 @@
mod mpv;
mod rodio;
-pub trait AudioBackend {
- fn play(&self, url: &str);
-}
-
#[allow(dead_code)]
pub enum AudioBackends {
Mpv(mpv::Mpv),
@@ -12,14 +8,15 @@ pub enum AudioBackends {
}
pub fn get_backend() -> AudioBackends {
- AudioBackends::Mpv(mpv::Mpv {})
+ // AudioBackends::Mpv(mpv::Mpv {})
+ AudioBackends::Rodio(rodio::Rodio {})
}
-impl AudioBackend for AudioBackends {
- fn play(&self, url: &str) {
+impl AudioBackends {
+ pub async fn play(&self, url: &str) {
match self {
- AudioBackends::Mpv(m) => m.play(url),
- AudioBackends::Rodio(r) => r.play(url),
+ AudioBackends::Mpv(m) => m.play(url).await,
+ AudioBackends::Rodio(r) => r.play(url).await,
}
}
}
diff --git a/src/audio/mpv.rs b/src/audio/mpv.rs
index dddb6b2..fde2711 100644
--- a/src/audio/mpv.rs
+++ b/src/audio/mpv.rs
@@ -1,10 +1,9 @@
-use super::AudioBackend;
use std::process::Command;
pub struct Mpv {}
-impl AudioBackend for Mpv {
- fn play(&self, url: &str) {
+impl Mpv {
+ pub async fn play(&self, url: &str) {
Command::new("mpv")
.args([url])
.output()
diff --git a/src/audio/rodio.rs b/src/audio/rodio.rs
index 04883dd..8262b82 100644
--- a/src/audio/rodio.rs
+++ b/src/audio/rodio.rs
@@ -1,9 +1,24 @@
-use super::AudioBackend;
+use rodio::{Decoder, OutputStream, Sink};
+use stream_download::{storage::temp::TempStorageProvider, Settings, StreamDownload};
pub struct Rodio {}
-impl AudioBackend for Rodio {
- fn play(&self, _url: &str) {
- todo!()
+impl Rodio {
+ pub async fn play(&self, url: &str) {
+ let reader = StreamDownload::new_http(
+ url.parse().unwrap(),
+ TempStorageProvider::new(),
+ Settings::default(),
+ )
+ .await
+ .unwrap();
+
+ let _res = tokio::task::spawn_blocking(move || {
+ let (_stream, handle) = OutputStream::try_default().unwrap();
+ let sink = Sink::try_new(&handle).unwrap();
+ sink.append(Decoder::new(reader).unwrap());
+ sink.sleep_until_end();
+ })
+ .await;
}
}