From 40c100e65b4d85fd779e0fb50b0cb5558c725939 Mon Sep 17 00:00:00 2001 From: Max Bradbury Date: Wed, 23 Sep 2020 11:02:08 +0100 Subject: [PATCH] implement play/pause and volume control --- src/main.rs | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) diff --git a/src/main.rs b/src/main.rs index 2f79ee9..c3d6796 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,7 @@ use gio::prelude::*; use gtk::prelude::*; use gtk::Orientation; -use rodio::Source; +use rodio::Sink; use std::env::args; use std::fs::File; use std::io::BufReader; @@ -44,7 +44,9 @@ fn build_ui(application: >k::Application) { let source = rodio::Decoder::new(BufReader::new(file)) .expect("Couldn't decode audio"); - rodio::play_raw(&device, source.convert_samples()); + let sink = Sink::new(&device); + sink.append(source); + sink.pause(); let row = gtk::Box::new(Orientation::Horizontal, SPACING); row.set_homogeneous(true); @@ -68,6 +70,18 @@ fn build_ui(application: >k::Application) { slider.set_draw_value(false); + slider.connect_value_changed(move |scale| { + let volume = scale.get_value(); + println!("volume: {}", volume); + + if volume == 0. { + sink.pause(); + } else { + sink.play(); + sink.set_volume(volume as f32); + } + }); + row.add(&slider); vertical.add(&row);