>From 10f023acfc259957586635dd06bc2c02fd491783 Mon Sep 17 00:00:00 2001 From: Heikki Tauriainen Date: Sat, 21 Sep 2013 23:18:28 +0300 Subject: [PATCH 2/4] New data types for controlling pan position, reverb and chorus levels --- lily/audio-item.cc | 19 ++++++++++++++ lily/include/audio-item.hh | 26 +++++++++++++++++++ lily/include/lily-proto.hh | 8 ++++++ lily/include/midi-item.hh | 39 +++++++++++++++++++++++++++++ lily/midi-item.cc | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 154 insertions(+) diff --git a/lily/audio-item.cc b/lily/audio-item.cc index b7a5ef2..d7cbced 100644 --- a/lily/audio-item.cc +++ b/lily/audio-item.cc @@ -204,3 +204,22 @@ Audio_text::Audio_text (Audio_text::Type type, const string &text_string) type_ = type; } +Audio_controller_value_change::Audio_controller_value_change (int value) + : value_ (value) +{ +} + +Audio_pan_position::Audio_pan_position (int position) + : Audio_controller_value_change (position) +{ +} + +Audio_reverb_level::Audio_reverb_level (int level) + : Audio_controller_value_change (level) +{ +} + +Audio_chorus_level::Audio_chorus_level (int level) + : Audio_controller_value_change (level) +{ +} diff --git a/lily/include/audio-item.hh b/lily/include/audio-item.hh index 544dd83..ed594f9 100644 --- a/lily/include/audio-item.hh +++ b/lily/include/audio-item.hh @@ -137,6 +137,32 @@ public: int one_beat_; }; +class Audio_controller_value_change : public Audio_item +{ +public: + Audio_controller_value_change (int value); + + int value_; +}; + +class Audio_pan_position : public Audio_controller_value_change +{ +public: + Audio_pan_position (int position); +}; + +class Audio_reverb_level : public Audio_controller_value_change +{ +public: + Audio_reverb_level (int level); +}; + +class Audio_chorus_level : public Audio_controller_value_change +{ +public: + Audio_chorus_level (int level); +}; + int moment_to_ticks (Moment); Real moment_to_real (Moment); Moment remap_grace_duration (Moment); diff --git a/lily/include/lily-proto.hh b/lily/include/lily-proto.hh index 53e863c..8873677 100644 --- a/lily/include/lily-proto.hh +++ b/lily/include/lily-proto.hh @@ -23,14 +23,18 @@ #include "flower-proto.hh" class All_font_metrics; +class Audio_chorus_level; class Audio_column; +class Audio_controller_value_change; class Audio_dynamic; class Audio_element; class Audio_instrument; class Audio_item; class Audio_key; class Audio_note; +class Audio_pan_position; class Audio_piano_pedal; +class Audio_reverb_level; class Audio_staff; class Audio_tempo; class Audio_text; @@ -103,7 +107,9 @@ class Lyric_engraver; class Lyric_performer; class Lyric_phrasing_engraver; class Mensural_ligature_engraver; +class Midi_chorus_level; class Midi_chunk; +class Midi_controller_value_change; class Midi_duration; class Midi_dynamic; class Midi_event; @@ -114,7 +120,9 @@ class Midi_key; class Midi_note; class Midi_note_event; class Midi_note_off; +class Midi_pan_position; class Midi_piano_pedal; +class Midi_reverb_level; class Midi_stream; class Midi_tempo; class Midi_text; diff --git a/lily/include/midi-item.hh b/lily/include/midi-item.hh index c5a9cc9..89396dc 100644 --- a/lily/include/midi-item.hh +++ b/lily/include/midi-item.hh @@ -46,11 +46,23 @@ public: class Midi_channel_item : public Midi_item { public: + virtual ~Midi_channel_item (); int channel_; DECLARE_CLASSNAME (Midi_channel_item); Midi_channel_item (Audio_item *ai); }; +class Midi_controller_value_change : public Midi_channel_item +{ +public: + DECLARE_CLASSNAME (Midi_controller_value_change); + Midi_controller_value_change (Audio_controller_value_change *ai); + virtual ~Midi_controller_value_change (); + virtual int get_controller_number () const = 0; + virtual string to_string () const; + int value_; +}; + class Midi_duration : public Midi_item { public: @@ -175,4 +187,31 @@ public: Audio_tempo *audio_; }; +class Midi_pan_position : public Midi_controller_value_change +{ +public: + Midi_pan_position (Audio_pan_position *); + DECLARE_CLASSNAME (Midi_pan_position); + + virtual int get_controller_number () const; +}; + +class Midi_reverb_level : public Midi_controller_value_change +{ +public: + Midi_reverb_level (Audio_reverb_level *); + DECLARE_CLASSNAME (Midi_reverb_level); + + virtual int get_controller_number () const; +}; + +class Midi_chorus_level : public Midi_controller_value_change +{ +public: + Midi_chorus_level (Audio_chorus_level *); + DECLARE_CLASSNAME (Midi_chorus_level); + + virtual int get_controller_number () const; +}; + #endif // MIDI_ITEM_HH diff --git a/lily/midi-item.cc b/lily/midi-item.cc index 0d0edbb..c6bd6a4 100644 --- a/lily/midi-item.cc +++ b/lily/midi-item.cc @@ -50,6 +50,12 @@ Midi_item::get_midi (Audio_item *a) return new Midi_time_signature (i); else if (Audio_text *i = dynamic_cast (a)) return new Midi_text (i); + else if (Audio_pan_position *i = dynamic_cast (a)) + return new Midi_pan_position (i); + else if (Audio_reverb_level *i = dynamic_cast (a)) + return new Midi_reverb_level (i); + else if (Audio_chorus_level *i = dynamic_cast (a)) + return new Midi_chorus_level (i); else assert (0); @@ -102,10 +108,23 @@ Midi_channel_item::Midi_channel_item (Audio_item *ai) { } +Midi_controller_value_change::Midi_controller_value_change (Audio_controller_value_change *ai) + : Midi_channel_item (ai), value_ (ai->value_) +{ +} + Midi_item::~Midi_item () { } +Midi_channel_item::~Midi_channel_item () +{ +} + +Midi_controller_value_change::~Midi_controller_value_change () +{ +} + string int2midi_varint_string (int i) { @@ -342,6 +361,49 @@ Midi_text::to_string () const return str; } +string +Midi_controller_value_change::to_string () const +{ + Byte status_byte = (char) (0xB0 + channel_); + string str = ::to_string ((char)status_byte); + str += ::to_string ((char)get_controller_number ()); + str += ::to_string ((char)value_); + return str; +} + +Midi_pan_position::Midi_pan_position (Audio_pan_position *a) + : Midi_controller_value_change (a) +{ +} + +int +Midi_pan_position::get_controller_number () const +{ + return 10; +} + +Midi_reverb_level::Midi_reverb_level (Audio_reverb_level *a) + : Midi_controller_value_change (a) +{ +} + +int +Midi_reverb_level::get_controller_number () const +{ + return 91; +} + +Midi_chorus_level::Midi_chorus_level (Audio_chorus_level *a) + : Midi_controller_value_change (a) +{ +} + +int +Midi_chorus_level::get_controller_number () const +{ + return 93; +} + char const * Midi_item::name () const { -- 1.8.4.rc3