diff --git a/Cargo.lock b/Cargo.lock index eef30b4..4dd18f9 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -684,7 +684,7 @@ checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" [[package]] name = "musicgen" -version = "0.1.0" +version = "1.0.0" dependencies = [ "clap", "cpal 0.16.0", diff --git a/Cargo.toml b/Cargo.toml index 31025b1..89bf80f 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "musicgen" -version = "0.1.0" +version = "1.0.0" edition = "2024" authors = ["Atridad Lahiji "] description = "Generate electronic music without AI" diff --git a/src/composition.rs b/src/composition.rs index 85424ea..906cb38 100644 --- a/src/composition.rs +++ b/src/composition.rs @@ -8,6 +8,7 @@ use crate::core::{ Track, }; use crate::scales::{Scale, ScaleType}; +use crate::synthesis::Waveform; /// Track-based composition #[derive(Debug, Clone)] @@ -90,12 +91,22 @@ impl Composition { _ => InstrumentType::Lead, }; + let waveform = match instrument_type { + InstrumentType::Lead => Waveform::Sawtooth, + InstrumentType::Bass => Waveform::Square, + InstrumentType::Pad => Waveform::Sine, + InstrumentType::Arp => Waveform::Triangle, + InstrumentType::Percussion => Waveform::Noise, + InstrumentType::Drone => Waveform::Sine, + }; + Ok(Track { name: track.name.clone(), - octave: 4, // Will be overridden by note specifications + octave: 4, notes, volume: track.volume, instrument_type, + waveform, }) } diff --git a/src/core.rs b/src/core.rs index d6db6df..bf1a179 100644 --- a/src/core.rs +++ b/src/core.rs @@ -4,6 +4,7 @@ //! the musicgen library for representing notes, tracks, and compositions. use crate::scales::ScaleType; +use crate::synthesis::Waveform; /// Musical note representation #[derive(Debug, Clone, PartialEq)] @@ -50,6 +51,7 @@ pub struct Track { pub notes: Vec, pub volume: f32, pub instrument_type: InstrumentType, + pub waveform: Waveform, } /// Composition styles (kept for compatibility) @@ -296,6 +298,7 @@ mod tests { ], volume: 0.8, instrument_type: InstrumentType::Lead, + waveform: Waveform::Sawtooth, }; composition.tracks.push(track);