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?
16fn praeludium() -> Result<Score> {
17 let mut part = Part::new(Instrument::AcousticGrandPiano);
18
19 part.add_phrase(phrase()?, 0.);
20
21 let mut score = Score::new(
22 "Praeludium No 1 in C Major",
23 Tempo::new(96)?,
24 Some(Metadata {
25 key_signature: NN::C as i8,
26 mode: Mode::Major,
27 time_numerator: 4,
28 time_denominator: 4,
29 }),
30 );
31 score.add_part(part);
32 Ok(score)
33}More examples
26fn praeludium() -> Result<Score> {
27 let mut part: Part = Part::new(Instrument::AcousticGrandPiano);
28
29 part.add_phrase(right_hand()?, 0.);
30 part.add_phrase(left_hand_high_note()?, 0.);
31 part.add_phrase(left_hand_low_note()?, 0.);
32
33 let mut score = Score::new(
34 "Praeludium No 1 in C Major",
35 Tempo::new(96)?,
36 Some(Metadata {
37 key_signature: NN::C as i8,
38 mode: Mode::Major,
39 time_numerator: 4,
40 time_denominator: 4,
41 }),
42 );
43 score.add_part(part);
44 Ok(score)
45}22fn praeludium() -> Result<Score> {
23 let mut piano_part = Part::new(Instrument::AcousticGrandPiano);
24 let mut organ_part = Part::new(Instrument::ChurchOrgan);
25
26 piano_part.add_phrase(right_hand()?, 0.);
27 organ_part.add_phrase(left_hand_high_note()?, 0.);
28 organ_part.add_phrase(left_hand_low_note()?, 0.);
29
30 let mut score = Score::new(
31 "Praeludium No 1 in C Major",
32 Tempo::new(96)?,
33 Some(Metadata {
34 key_signature: NN::C as i8,
35 mode: Mode::Major,
36 time_numerator: 4,
37 time_denominator: 4,
38 }),
39 );
40 score.add_part(piano_part);
41 score.add_part(organ_part);
42 Ok(score)
43}11fn main() -> Result<(), Box<dyn Error>> {
12 // Create a simple C Minor Scale on octave 4 (this requires the `composition` feature)
13 let s = Scale::new(
14 compute_pitch(NoteName::Do, Accidental::Natural, 4)?,
15 ScaleMode::Aeolian,
16 );
17
18 // Create a phrase that just plays the scale as a sequence of quavers (half beat)
19 let phrase = Phrase::from_notes_sequence(Note::new_sequence(QUAVER, MF, s.n_pitches(15)))?;
20
21 // Create a piano part that plays the phrase from beat 0
22 let mut piano_part = Part::new(Instrument::AcousticGrandPiano);
23 piano_part.add_phrase(phrase, 0.);
24
25 // Create a score with a tempo of 60 (one beat per second) and add both parts
26 let mut score = Score::new("my score", Tempo::new(60)?, None);
27 score.add_part(piano_part);
28
29 // Write the score to a MIDI file for playback
30 score.write_midi_file(File::create("scale_example.mid")?)?;
31 Ok(())
32}10fn main() -> Result<(), Box<dyn Error>> {
11 // Create a musical phrase that plays C-E-G (arpeggiated C Major chord)
12 // with crotchets, at MezzoForte volume
13 let mut phrase_to_repeat = Phrase::new();
14 phrase_to_repeat.add_note(Note::new(
15 compute_pitch(NoteName::C, Accidental::Natural, 4)?,
16 CROTCHET,
17 MF,
18 )?);
19 phrase_to_repeat.add_note(Note::new(
20 compute_pitch(NoteName::E, Accidental::Natural, 4)?,
21 CROTCHET,
22 MF,
23 )?);
24 phrase_to_repeat.add_note(Note::new(
25 compute_pitch(NoteName::G, Accidental::Natural, 4)?,
26 CROTCHET,
27 MF,
28 )?);
29
30 // Create a piano part that plays the phrase from beat 0
31 let mut piano_part = Part::new(Instrument::AcousticGrandPiano);
32 piano_part.add_phrase(phrase_to_repeat.clone(), 0.);
33
34 // Create a Strings part that plays the phrase from beat 0.5
35 // (at the same time as the piano but shifted half a beat)
36 let mut violins_part = Part::new(Instrument::StringEnsemble1);
37 violins_part.add_phrase(phrase_to_repeat, 0.5);
38
39 // Create a score with a tempo of 60 (one beat per second) and add both parts
40 let mut score = Score::new("my score", Tempo::new(60)?, None);
41 score.add_part(piano_part);
42 score.add_part(violins_part);
43
44 // Write the score to a MIDI file for playback
45 score.write_midi_file(File::create("readme_example.mid")?)?;
46 Ok(())
47}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?
16fn praeludium() -> Result<Score> {
17 let mut part = Part::new(Instrument::AcousticGrandPiano);
18
19 part.add_phrase(phrase()?, 0.);
20
21 let mut score = Score::new(
22 "Praeludium No 1 in C Major",
23 Tempo::new(96)?,
24 Some(Metadata {
25 key_signature: NN::C as i8,
26 mode: Mode::Major,
27 time_numerator: 4,
28 time_denominator: 4,
29 }),
30 );
31 score.add_part(part);
32 Ok(score)
33}More examples
26fn praeludium() -> Result<Score> {
27 let mut part: Part = Part::new(Instrument::AcousticGrandPiano);
28
29 part.add_phrase(right_hand()?, 0.);
30 part.add_phrase(left_hand_high_note()?, 0.);
31 part.add_phrase(left_hand_low_note()?, 0.);
32
33 let mut score = Score::new(
34 "Praeludium No 1 in C Major",
35 Tempo::new(96)?,
36 Some(Metadata {
37 key_signature: NN::C as i8,
38 mode: Mode::Major,
39 time_numerator: 4,
40 time_denominator: 4,
41 }),
42 );
43 score.add_part(part);
44 Ok(score)
45}22fn praeludium() -> Result<Score> {
23 let mut piano_part = Part::new(Instrument::AcousticGrandPiano);
24 let mut organ_part = Part::new(Instrument::ChurchOrgan);
25
26 piano_part.add_phrase(right_hand()?, 0.);
27 organ_part.add_phrase(left_hand_high_note()?, 0.);
28 organ_part.add_phrase(left_hand_low_note()?, 0.);
29
30 let mut score = Score::new(
31 "Praeludium No 1 in C Major",
32 Tempo::new(96)?,
33 Some(Metadata {
34 key_signature: NN::C as i8,
35 mode: Mode::Major,
36 time_numerator: 4,
37 time_denominator: 4,
38 }),
39 );
40 score.add_part(piano_part);
41 score.add_part(organ_part);
42 Ok(score)
43}11fn main() -> Result<(), Box<dyn Error>> {
12 // Create a simple C Minor Scale on octave 4 (this requires the `composition` feature)
13 let s = Scale::new(
14 compute_pitch(NoteName::Do, Accidental::Natural, 4)?,
15 ScaleMode::Aeolian,
16 );
17
18 // Create a phrase that just plays the scale as a sequence of quavers (half beat)
19 let phrase = Phrase::from_notes_sequence(Note::new_sequence(QUAVER, MF, s.n_pitches(15)))?;
20
21 // Create a piano part that plays the phrase from beat 0
22 let mut piano_part = Part::new(Instrument::AcousticGrandPiano);
23 piano_part.add_phrase(phrase, 0.);
24
25 // Create a score with a tempo of 60 (one beat per second) and add both parts
26 let mut score = Score::new("my score", Tempo::new(60)?, None);
27 score.add_part(piano_part);
28
29 // Write the score to a MIDI file for playback
30 score.write_midi_file(File::create("scale_example.mid")?)?;
31 Ok(())
32}10fn main() -> Result<(), Box<dyn Error>> {
11 // Create a musical phrase that plays C-E-G (arpeggiated C Major chord)
12 // with crotchets, at MezzoForte volume
13 let mut phrase_to_repeat = Phrase::new();
14 phrase_to_repeat.add_note(Note::new(
15 compute_pitch(NoteName::C, Accidental::Natural, 4)?,
16 CROTCHET,
17 MF,
18 )?);
19 phrase_to_repeat.add_note(Note::new(
20 compute_pitch(NoteName::E, Accidental::Natural, 4)?,
21 CROTCHET,
22 MF,
23 )?);
24 phrase_to_repeat.add_note(Note::new(
25 compute_pitch(NoteName::G, Accidental::Natural, 4)?,
26 CROTCHET,
27 MF,
28 )?);
29
30 // Create a piano part that plays the phrase from beat 0
31 let mut piano_part = Part::new(Instrument::AcousticGrandPiano);
32 piano_part.add_phrase(phrase_to_repeat.clone(), 0.);
33
34 // Create a Strings part that plays the phrase from beat 0.5
35 // (at the same time as the piano but shifted half a beat)
36 let mut violins_part = Part::new(Instrument::StringEnsemble1);
37 violins_part.add_phrase(phrase_to_repeat, 0.5);
38
39 // Create a score with a tempo of 60 (one beat per second) and add both parts
40 let mut score = Score::new("my score", Tempo::new(60)?, None);
41 score.add_part(piano_part);
42 score.add_part(violins_part);
43
44 // Write the score to a MIDI file for playback
45 score.write_midi_file(File::create("readme_example.mid")?)?;
46 Ok(())
47}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
pub fn duration(&self) -> f64
Trait Implementations§
impl StructuralPartialEq for Part
Auto Trait Implementations§
impl Freeze for Part
impl RefUnwindSafe for Part
impl Send for Part
impl Sync for Part
impl Unpin for Part
impl UnwindSafe for Part
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more