]> git.donarmstrong.com Git - lilypond.git/blobdiff - lily/midi-item.cc
resolve merge
[lilypond.git] / lily / midi-item.cc
index 63b6be6b1103447ae02772b3090e9f90d5839c37..1fcb259ae13c2c0b6b0ee94967476cd8099f3928 100644 (file)
@@ -1,9 +1,20 @@
 /*
-  midi-item.cc -- implement MIDI items.
+  This file is part of LilyPond, the GNU music typesetter.
 
-  source file of the GNU LilyPond music typesetter
+  Copyright (C) 1997--2011 Jan Nieuwenhuizen <janneke@gnu.org>
 
-  (c) 1997--2009 Jan Nieuwenhuizen <janneke@gnu.org>
+  LilyPond is free software: you can redistribute it and/or modify
+  it under the terms of the GNU General Public License as published by
+  the Free Software Foundation, either version 3 of the License, or
+  (at your option) any later version.
+
+  LilyPond is distributed in the hope that it will be useful,
+  but WITHOUT ANY WARRANTY; without even the implied warranty of
+  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+  GNU General Public License for more details.
+
+  You should have received a copy of the GNU General Public License
+  along with LilyPond.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "midi-item.hh"
@@ -61,8 +72,9 @@ Midi_duration::to_string () const
 }
 
 Midi_instrument::Midi_instrument (Audio_instrument *a)
+  : Midi_channel_item (a)
+  , audio_ (a)
 {
-  audio_ = a;
   audio_->str_ = String_convert::to_lower (audio_->str_);
 }
 
@@ -76,7 +88,7 @@ Midi_instrument::to_string () const
   SCM program = scm_call_1 (proc, ly_symbol2scm (audio_->str_.c_str ()));
   found = (program != SCM_BOOL_F);
   if (found)
-    program_byte = scm_to_int (program);
+    program_byte = (Byte) scm_to_int (program);
   else
     warning (_f ("no such MIDI instrument: `%s'", audio_->str_.c_str ()));
 
@@ -89,9 +101,9 @@ Midi_item::Midi_item ()
 {
 }
 
-Midi_channel_item::Midi_channel_item ()
+Midi_channel_item::Midi_channel_item (Audio_item *ai)
+  : channel_ (ai->channel_)
 {
-  channel_ = 0;
 }
 
 Midi_item::~Midi_item ()
@@ -122,8 +134,8 @@ int2midi_varint_string (int i)
 }
 
 Midi_key::Midi_key (Audio_key *a)
+  : audio_ (a)
 {
-  audio_ = a;
 }
 
 string
@@ -139,9 +151,9 @@ Midi_key::to_string () const
 }
 
 Midi_time_signature::Midi_time_signature (Audio_time_signature *a)
+  : audio_ (a)
+  , clocks_per_1_ (18)
 {
-  audio_ = a;
-  clocks_per_1_ = 18;
 }
 
 string
@@ -167,12 +179,13 @@ Midi_time_signature::to_string () const
 }
 
 Midi_note::Midi_note (Audio_note *a)
+  : Midi_channel_item (a)
+  , audio_ (a)
+  , dynamic_byte_ (a->dynamic_ && a->dynamic_->volume_ >= 0
+                  ? Byte (a->dynamic_->volume_ * 0x7f) : Byte (0x5a))
 {
-  audio_ = a;
-  dynamic_byte_ = 0x5a;
 }
 
-
 int
 Midi_note::get_fine_tuning () const
 {
@@ -251,8 +264,9 @@ Midi_note_off::to_string () const
 }
 
 Midi_dynamic::Midi_dynamic (Audio_dynamic *a)
+  : Midi_channel_item (a)
+  , audio_ (a)
 {
-  audio_ = a;
 }
 
 string
@@ -274,14 +288,19 @@ Midi_dynamic::to_string () const
   if (volume > full_scale)
     volume = (int)full_scale;
 
+  int const volume_default = 100;
+  if (audio_->volume_ < 0 || audio_->silent_)
+    volume = volume_default;
+  
   str += ::to_string ((char)0x07);
   str += ::to_string ((char)volume);
   return str;
 }
 
 Midi_piano_pedal::Midi_piano_pedal (Audio_piano_pedal *a)
+  : Midi_channel_item (a)
+  , audio_ (a)
 {
-  audio_ = a;
 }
 
 string
@@ -303,8 +322,8 @@ Midi_piano_pedal::to_string () const
 }
 
 Midi_tempo::Midi_tempo (Audio_tempo *a)
+  : audio_ (a)
 {
-  audio_ = a;
 }
 
 string
@@ -317,8 +336,8 @@ Midi_tempo::to_string () const
 }
 
 Midi_text::Midi_text (Audio_text *a)
+  : audio_ (a)
 {
-  audio_ = a;
 }
 
 string