X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=lily%2Finclude%2Faudio-item.hh;h=f3a97a2949d9805f1edc480474f78262fe9c5f3e;hb=f02831f92e71ce43e3b67e06c0d46dc19ad9bde3;hp=525544dc1df0f86db111081a24cfc465a99358c0;hpb=f86f00c1a8de0f034ba48506de2801c074bd5422;p=lilypond.git diff --git a/lily/include/audio-item.hh b/lily/include/audio-item.hh index 525544dc1d..f3a97a2949 100644 --- a/lily/include/audio-item.hh +++ b/lily/include/audio-item.hh @@ -1,7 +1,7 @@ /* This file is part of LilyPond, the GNU music typesetter. - Copyright (C) 1996--2011 Jan Nieuwenhuizen + Copyright (C) 1996--2015 Jan Nieuwenhuizen LilyPond is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -34,33 +34,40 @@ public: Audio_column *get_column () const; virtual void render (); - + private: Audio_item (Audio_item const &); Audio_item &operator = (Audio_item const &); }; -class Audio_dynamic : public Audio_item -{ -public: - Audio_dynamic (); - - Real volume_; -}; - +// Audio_span_dynamic is open at the end of the interval, so the volume +// grows/diminshes toward a target, but whether it reaches it depends on the +// next Audio_span_dynamic in the performance. For example, a crescendo +// notated as mf < p is represented as [mf < x) [p ...) i.e. growth to some +// volume louder than mf followed by an abrupt change to p. class Audio_span_dynamic : public Audio_element { public: - Direction grow_dir_; - vector dynamics_; + static const Real MINIMUM_VOLUME; + static const Real MAXIMUM_VOLUME; + static const Real DEFAULT_VOLUME; +private: + Moment start_moment_; + Real start_volume_; + Real duration_; // = target moment - start moment + Real gain_; // = target volume - start volume - virtual void render (); - void add_absolute (Audio_dynamic*); - Audio_span_dynamic (); +public: + Moment get_start_moment () const { return start_moment_; } + Real get_start_volume () const { return start_volume_; } + Real get_duration () const { return duration_; } + void set_end_moment (Moment); + void set_volume (Real start, Real target); + Real get_volume (Moment) const; + Audio_span_dynamic (Moment mom, Real volume); }; - class Audio_key : public Audio_item { public: @@ -81,15 +88,19 @@ public: class Audio_note : public Audio_item { public: - Audio_note (Pitch p, Moment m, bool tie_event, Pitch transposition); + Audio_note (Pitch p, Moment m, bool tie_event, Pitch transposition, int velocity); // with tieWaitForNote, there might be a skip between the tied notes! void tie_to (Audio_note *, Moment skip = 0); + Audio_note *tie_head (); + virtual string to_string () const; Pitch pitch_; Moment length_mom_; Pitch transposing_; - + Audio_span_dynamic *dynamic_; + int extra_velocity_; + Audio_note *tied_; bool tie_event_; }; @@ -105,12 +116,12 @@ class Audio_text : public Audio_item { public: enum Type - { - TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC, - MARKER, CUE_POINT - }; + { + TEXT = 1, COPYRIGHT, TRACK_NAME, INSTRUMENT_NAME, LYRIC, + MARKER, CUE_POINT + }; - Audio_text (Audio_text::Type type, string text_string); + Audio_text (Audio_text::Type type, const string &text_string); Type type_; string text_string_; @@ -133,6 +144,15 @@ public: int one_beat_; }; +class Audio_control_change : public Audio_item +{ +public: + Audio_control_change (int control, int value); + + int control_; + int value_; +}; + int moment_to_ticks (Moment); Real moment_to_real (Moment); Moment remap_grace_duration (Moment);