Struct rust_music::Part
source · pub struct Part { /* private fields */ }Expand description
Describes a score’s part. A Part is played by a single
instrument and can contain multiple phrases, played sequentially
or simultaneously
Implementations§
source§impl Part
impl Part
sourcepub fn new(instrument: Instrument) -> Part
pub fn new(instrument: Instrument) -> Part
Returns a new empty Part with the given name and instrument
Arguments
name- title of thePartinstrument- instrument playing thePart
Examples found in repository?
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
fn praeludium() -> Result<Score> {
let mut part = Part::new(Instrument::AcousticGrandPiano);
part.add_phrase(phrase()?, 0.);
let mut score = Score::new(
"Praeludium No 1 in C Major",
Tempo::new(96)?,
Some(Metadata {
key_signature: NN::C as i8,
mode: Mode::Major,
time_numerator: 4,
time_denominator: 4,
}),
);
score.add_part(part);
Ok(score)
}More examples
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
fn praeludium() -> Result<Score> {
let mut part: Part = Part::new(Instrument::AcousticGrandPiano);
part.add_phrase(right_hand()?, 0.);
part.add_phrase(left_hand_high_note()?, 0.);
part.add_phrase(left_hand_low_note()?, 0.);
let mut score = Score::new(
"Praeludium No 1 in C Major",
Tempo::new(96)?,
Some(Metadata {
key_signature: NN::C as i8,
mode: Mode::Major,
time_numerator: 4,
time_denominator: 4,
}),
);
score.add_part(part);
Ok(score)
}22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
fn praeludium() -> Result<Score> {
let mut piano_part = Part::new(Instrument::AcousticGrandPiano);
let mut organ_part = Part::new(Instrument::ChurchOrgan);
piano_part.add_phrase(right_hand()?, 0.);
organ_part.add_phrase(left_hand_high_note()?, 0.);
organ_part.add_phrase(left_hand_low_note()?, 0.);
let mut score = Score::new(
"Praeludium No 1 in C Major",
Tempo::new(96)?,
Some(Metadata {
key_signature: NN::C as i8,
mode: Mode::Major,
time_numerator: 4,
time_denominator: 4,
}),
);
score.add_part(piano_part);
score.add_part(organ_part);
Ok(score)
}10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
fn main() -> Result<(), Box<dyn Error>> {
// Create a musical phrase that plays C-E-G (arpeggiated C Major chord)
// with crotchets, at MezzoForte volume
let mut phrase_to_repeat = Phrase::new();
phrase_to_repeat.add_note(Note::new(
compute_pitch(NoteName::C, Accidental::Natural, 4)?,
CROTCHET,
MF,
)?);
phrase_to_repeat.add_note(Note::new(
compute_pitch(NoteName::E, Accidental::Natural, 4)?,
CROTCHET,
MF,
)?);
phrase_to_repeat.add_note(Note::new(
compute_pitch(NoteName::G, Accidental::Natural, 4)?,
CROTCHET,
MF,
)?);
// 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(())
}sourcepub fn set_name<S: ToString>(&mut self, name: S)
pub fn set_name<S: ToString>(&mut self, name: S)
Sets a name for the Part. The name does not have to be unique.
sourcepub fn add_phrase(&mut self, phrase: Phrase, start_beat: f64)
pub fn add_phrase(&mut self, phrase: Phrase, start_beat: f64)
Inserts a Phrase in the Part. The phrase will start at beat start_beat.
Each beat corresponds to 1.0 in rhythm value.
The Phrase can be played in parallel with other phrases if start_beat is
smaller then their length.
Examples found in repository?
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
fn praeludium() -> Result<Score> {
let mut part = Part::new(Instrument::AcousticGrandPiano);
part.add_phrase(phrase()?, 0.);
let mut score = Score::new(
"Praeludium No 1 in C Major",
Tempo::new(96)?,
Some(Metadata {
key_signature: NN::C as i8,
mode: Mode::Major,
time_numerator: 4,
time_denominator: 4,
}),
);
score.add_part(part);
Ok(score)
}More examples
26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45
fn praeludium() -> Result<Score> {
let mut part: Part = Part::new(Instrument::AcousticGrandPiano);
part.add_phrase(right_hand()?, 0.);
part.add_phrase(left_hand_high_note()?, 0.);
part.add_phrase(left_hand_low_note()?, 0.);
let mut score = Score::new(
"Praeludium No 1 in C Major",
Tempo::new(96)?,
Some(Metadata {
key_signature: NN::C as i8,
mode: Mode::Major,
time_numerator: 4,
time_denominator: 4,
}),
);
score.add_part(part);
Ok(score)
}22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
fn praeludium() -> Result<Score> {
let mut piano_part = Part::new(Instrument::AcousticGrandPiano);
let mut organ_part = Part::new(Instrument::ChurchOrgan);
piano_part.add_phrase(right_hand()?, 0.);
organ_part.add_phrase(left_hand_high_note()?, 0.);
organ_part.add_phrase(left_hand_low_note()?, 0.);
let mut score = Score::new(
"Praeludium No 1 in C Major",
Tempo::new(96)?,
Some(Metadata {
key_signature: NN::C as i8,
mode: Mode::Major,
time_numerator: 4,
time_denominator: 4,
}),
);
score.add_part(piano_part);
score.add_part(organ_part);
Ok(score)
}10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
fn main() -> Result<(), Box<dyn Error>> {
// Create a musical phrase that plays C-E-G (arpeggiated C Major chord)
// with crotchets, at MezzoForte volume
let mut phrase_to_repeat = Phrase::new();
phrase_to_repeat.add_note(Note::new(
compute_pitch(NoteName::C, Accidental::Natural, 4)?,
CROTCHET,
MF,
)?);
phrase_to_repeat.add_note(Note::new(
compute_pitch(NoteName::E, Accidental::Natural, 4)?,
CROTCHET,
MF,
)?);
phrase_to_repeat.add_note(Note::new(
compute_pitch(NoteName::G, Accidental::Natural, 4)?,
CROTCHET,
MF,
)?);
// 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(())
}sourcepub fn append_phrase_to_previous(&mut self, phrase: Phrase)
pub fn append_phrase_to_previous(&mut self, phrase: Phrase)
Appends a Phrase immediately at the end of the last added Phrase.
If phrases added before the last one were longer, they can be played
in parallel with the new Phrase.
sourcepub fn append_phrase_to_part_end(&mut self, phrase: Phrase)
pub fn append_phrase_to_part_end(&mut self, phrase: Phrase)
Appends a Phrase immediately at the end of the entire Part, i.e. the end
of the Phrase that ends the latest
sourcepub fn instrument(&self) -> Instrument
pub fn instrument(&self) -> Instrument
Returns the instrument playing the Part