bevy_midix 4.0.0-alpha.6

The MIDI plugin for humans. Out-of-the-box soundfont synthesizer, commands, and input!
Documentation
use bevy::prelude::*;

use crate::{
    data::MidiDataSettings,
    input::{FromMidiInputData, MidiData, MidiInput, MidiInputSettings},
};

pub struct MidiIoPlugin<D: FromMidiInputData = MidiData> {
    pub input_setings: MidiInputSettings,
    pub data_settings: D::Settings,
}

impl<D: FromMidiInputData> MidiIoPlugin<D> {
    pub fn new(input_setings: MidiInputSettings, data_settings: D::Settings) -> Self {
        Self {
            input_setings,
            data_settings,
        }
    }
}

#[allow(clippy::derivable_impls)]
impl Default for MidiIoPlugin {
    fn default() -> Self {
        Self {
            input_setings: Default::default(),
            data_settings: MidiDataSettings::default(),
        }
    }
}

impl<D: FromMidiInputData> Plugin for MidiIoPlugin<D> {
    fn build(&self, app: &mut App) {
        midi_io_plugin_inner::<D>(self.input_setings.clone(), &self.data_settings, app);
    }
}

pub(crate) fn midi_io_plugin_inner<D: FromMidiInputData>(
    input_settings: MidiInputSettings,
    data_settings: &D::Settings,
    app: &mut App,
) {
    app.insert_resource(MidiInput::<D>::new(input_settings));
    D::configure_plugin(data_settings, app);
}