From 96e9967817784d344cdb0b92ff29714b35bd86d4 Mon Sep 17 00:00:00 2001 From: Poly Date: Wed, 2 Dec 2020 15:17:57 +0100 Subject: [PATCH] Cleaning of output manager --- src/main.rs | 2 -- src/midi_device/mod.rs | 4 ---- .../midi_backend.rs} | 12 +++--------- .../mod.rs} | 17 ++++++++++------- .../mod.rs => output_manager/synth_backend.rs} | 12 ++++++------ 5 files changed, 19 insertions(+), 28 deletions(-) delete mode 100644 src/midi_device/mod.rs rename src/{midi_device/devices_manager.rs => output_manager/midi_backend.rs} (86%) rename src/{output_manager.rs => output_manager/mod.rs} (87%) rename src/{audio/mod.rs => output_manager/synth_backend.rs} (94%) diff --git a/src/main.rs b/src/main.rs index 9aaa6a6b..d2e10b18 100644 --- a/src/main.rs +++ b/src/main.rs @@ -11,8 +11,6 @@ use scene::{Scene, SceneEvent, SceneType}; mod time_manager; use time_manager::Fps; -mod audio; -mod midi_device; mod output_manager; pub use output_manager::OutputManager; diff --git a/src/midi_device/mod.rs b/src/midi_device/mod.rs deleted file mode 100644 index a3864929..00000000 --- a/src/midi_device/mod.rs +++ /dev/null @@ -1,4 +0,0 @@ -#[allow(dead_code)] -mod devices_manager; -pub use devices_manager::MidiDevicesManager; -pub use devices_manager::MidiPortInfo; diff --git a/src/midi_device/devices_manager.rs b/src/output_manager/midi_backend.rs similarity index 86% rename from src/midi_device/devices_manager.rs rename to src/output_manager/midi_backend.rs index 394859af..63f395a5 100644 --- a/src/midi_device/devices_manager.rs +++ b/src/output_manager/midi_backend.rs @@ -2,20 +2,14 @@ use crate::output_manager::{OutputConnection, OutputDescriptor}; use midir::{MidiOutput, MidiOutputConnection, MidiOutputPort}; -pub struct MidiDevicesManager { +pub struct MidiBackend { midi_out: MidiOutput, - // midi_out_c: Option, - pub outs: Vec, } -impl MidiDevicesManager { +impl MidiBackend { pub fn new() -> Result { let midi_out = MidiOutput::new("midi_out")?; - Ok(Self { - midi_out, - // midi_out_c: None, - outs: Vec::new(), - }) + Ok(Self { midi_out }) } pub fn get_outputs(&self) -> Vec { diff --git a/src/output_manager.rs b/src/output_manager/mod.rs similarity index 87% rename from src/output_manager.rs rename to src/output_manager/mod.rs index cfcfef09..3ceeecc6 100644 --- a/src/output_manager.rs +++ b/src/output_manager/mod.rs @@ -1,5 +1,8 @@ -use crate::audio::Synth; -use crate::midi_device::{MidiDevicesManager, MidiPortInfo}; +mod midi_backend; +mod synth_backend; + +use midi_backend::{MidiBackend, MidiPortInfo}; +use synth_backend::SynthBackend; use std::{ fmt::{self, Display, Formatter}, @@ -32,8 +35,8 @@ struct DummyOutput {} impl OutputConnection for DummyOutput {} pub struct OutputManager { - synth_backend: Option, - midi_backend: Option, + synth_backend: Option, + midi_backend: Option, output_connection: Box, } @@ -41,13 +44,13 @@ pub struct OutputManager { impl OutputManager { pub fn new() -> Self { let synth_backend = if Path::new("./font.sf2").exists() { - Some(Synth::new()) + Some(SynthBackend::new()) } else { log::info!("./font.sf2 not found"); None }; - let midi_backend = match MidiDevicesManager::new() { + let midi_backend = match MidiBackend::new() { Ok(midi_device_manager) => Some(midi_device_manager), Err(e) => { log::error!("{:?}", e); @@ -86,7 +89,7 @@ impl OutputManager { } } OutputDescriptor::MidiOut(info) => { - if let Some(conn) = MidiDevicesManager::new_output_connection(info) { + if let Some(conn) = MidiBackend::new_output_connection(info) { self.output_connection = Box::new(conn); } } diff --git a/src/audio/mod.rs b/src/output_manager/synth_backend.rs similarity index 94% rename from src/audio/mod.rs rename to src/output_manager/synth_backend.rs index db205284..745fa018 100644 --- a/src/audio/mod.rs +++ b/src/output_manager/synth_backend.rs @@ -12,7 +12,7 @@ enum MidiEvent { NoteOff { ch: u8, key: u8 }, } -pub struct Synth { +pub struct SynthBackend { _host: cpal::Host, device: cpal::Device, @@ -20,7 +20,7 @@ pub struct Synth { sample_format: cpal::SampleFormat, } -impl Synth { +impl SynthBackend { pub fn new() -> Self { let host = cpal::default_host(); @@ -112,7 +112,7 @@ impl Synth { stream } - pub fn new_output_connection(&mut self) -> SynthOutConnection { + pub fn new_output_connection(&mut self) -> SynthOutputConnection { let (tx, rx) = std::sync::mpsc::channel::(); let _stream = match self.sample_format { cpal::SampleFormat::F32 => self.run::(rx), @@ -120,7 +120,7 @@ impl Synth { cpal::SampleFormat::U16 => self.run::(rx), }; - SynthOutConnection { _stream, tx } + SynthOutputConnection { _stream, tx } } pub fn get_outputs(&self) -> Vec { @@ -128,12 +128,12 @@ impl Synth { } } -pub struct SynthOutConnection { +pub struct SynthOutputConnection { _stream: cpal::Stream, tx: std::sync::mpsc::Sender, } -impl OutputConnection for SynthOutConnection { +impl OutputConnection for SynthOutputConnection { fn note_on(&mut self, ch: u8, key: u8, vel: u8) { self.tx.send(MidiEvent::NoteOn { ch, key, vel }).ok(); }