A framework for programmatic music manipulation and composition.
It provides all the needed types and values to describe or generate complex music pieces, with multiple tracks and instruments, melodic phrases, chords, complex rhythms etc.
The Score
type that carries this information can be fully exported as a playable MIDI file.
Add rust-music
to the dependencies in your Cargo.toml
.
toml
rust-music = "0.1.3"
Then you can start creating music.
```rust use std::error::Error; use std::fs::File; use std::result::Result;
use rustmusic::{ computepitch, dynamic::, rhythm::, Accidental, Instrument, Note, NoteName, Part, Phrase, Score, Tempo, };
fn main() -> Result<(), Box
// Create a piano part that plays the phrase from beat 0
let mut piano_part = Part::new(Instrument::AcousticGrandPiano);
piano_part.add_phrase(phrase_to_repeat.clone(), 0.);
// Create a Strings part that plays the phrase from beat 0.5
// (at the same time as the piano but shifted half a beat)
let mut violins_part = Part::new(Instrument::StringEnsemble1);
violins_part.add_phrase(phrase_to_repeat, 0.5);
// Create a score with a tempo of 60 (one beat per second) and add both parts
let mut score = Score::new("my score", Tempo::new(60)?, None);
score.add_part(piano_part);
score.add_part(violins_part);
// Write the score to a MIDI file for playback
score.write_midi_file(File::create("readme_example.mid")?)?;
Ok(())
} ```
Listen to the output of this example
More complex examples are available in the examples
directory of the rust-music
Github repository.
rust-music is distributed under the terms of the MIT License.
See LICENSE.txt for details.