remove unused generic; add Sequencer::player

This commit is contained in:
🪞👃🪞 2024-11-01 00:42:12 +02:00
parent 076be5bcb3
commit 86adf493c8
5 changed files with 32 additions and 30 deletions

View file

@ -55,7 +55,7 @@ pub struct Arrangement<E: Engine> {
/// Collection of phrases.
pub phrases: Arc<RwLock<PhrasePool<E>>>,
/// Collection of tracks.
pub tracks: Vec<ArrangementTrack<E>>,
pub tracks: Vec<ArrangementTrack>,
/// Collection of scenes.
pub scenes: Vec<Scene>,
/// Currently selected element.
@ -70,13 +70,13 @@ pub struct Arrangement<E: Engine> {
pub size: Measure<E>,
}
/// Represents a track in the arrangement
pub struct ArrangementTrack<E: Engine> {
pub struct ArrangementTrack {
/// Name of track
pub name: Arc<RwLock<String>>,
/// Inputs
pub inputs: Vec<Port<MidiIn>>,
/// MIDI player/recorder
pub player: PhrasePlayer<E>,
pub player: PhrasePlayer,
/// Outputs
pub outputs: Vec<Port<MidiIn>>,
/// Preferred width of track column
@ -374,10 +374,10 @@ impl<E: Engine> Arrangement<E> {
}
/// Methods for tracks in arrangement
impl<E: Engine> Arrangement<E> {
pub fn track (&self) -> Option<&ArrangementTrack<E>> {
pub fn track (&self) -> Option<&ArrangementTrack> {
self.selected.track().map(|t|self.tracks.get(t)).flatten()
}
pub fn track_mut (&mut self) -> Option<&mut ArrangementTrack<E>> {
pub fn track_mut (&mut self) -> Option<&mut ArrangementTrack> {
self.selected.track().map(|t|self.tracks.get_mut(t)).flatten()
}
pub fn track_width_inc (&mut self) { self.track_mut().map(|t|t.width_inc()); }
@ -386,7 +386,7 @@ impl<E: Engine> Arrangement<E> {
pub fn track_prev (&mut self) { self.selected.track_prev() }
pub fn track_add (
&mut self, name: Option<&str>, color: Option<Color>
) -> Usually<&mut ArrangementTrack<E>> {
) -> Usually<&mut ArrangementTrack> {
self.tracks.push(name.map_or_else(
|| ArrangementTrack::new(&self.clock, &self.track_default_name(), color),
|name| ArrangementTrack::new(&self.clock, name, color),
@ -449,10 +449,10 @@ impl<E: Engine> Arrangement<E> {
}
/// Methods for phrases in arrangement
impl<E: Engine> Arrangement<E> {
pub fn sequencer (&self) -> Option<&ArrangementTrack<E>> {
pub fn sequencer (&self) -> Option<&ArrangementTrack> {
self.selected.track().map(|track|self.tracks.get(track)).flatten()
}
pub fn sequencer_mut (&mut self) -> Option<&mut ArrangementTrack<E>> {
pub fn sequencer_mut (&mut self) -> Option<&mut ArrangementTrack> {
self.selected.track().map(|track|self.tracks.get_mut(track)).flatten()
}
pub fn phrase (&self) -> Option<Arc<RwLock<Phrase>>> {
@ -511,7 +511,7 @@ impl<E: Engine> Arrangement<E> {
}
}
}
impl<E: Engine> ArrangementTrack<E> {
impl ArrangementTrack {
pub fn new (clock: &Arc<TransportTime>, name: &str, color: Option<Color>) -> Self {
Self {
name: Arc::new(RwLock::new(name.into())),
@ -533,7 +533,7 @@ impl<E: Engine> ArrangementTrack<E> {
impl ArrangementFocus {
pub fn description <E: Engine> (
&self,
tracks: &Vec<ArrangementTrack<E>>,
tracks: &Vec<ArrangementTrack>,
scenes: &Vec<Scene>,
) -> String {
format!("Selected: {}", match self {
@ -646,7 +646,7 @@ impl Scene {
})
}
/// Returns true if all phrases in the scene are currently playing
pub fn is_playing <E: Engine> (&self, tracks: &[ArrangementTrack<E>]) -> bool {
pub fn is_playing (&self, tracks: &[ArrangementTrack]) -> bool {
self.clips.iter().any(|clip|clip.is_some()) && self.clips.iter().enumerate()
.all(|(track_index, clip)|match clip {
Some(clip) => tracks