diff options
-rw-r--r-- | gtk2_ardour/note_player.cc | 58 | ||||
-rw-r--r-- | gtk2_ardour/note_player.h | 44 |
2 files changed, 69 insertions, 33 deletions
diff --git a/gtk2_ardour/note_player.cc b/gtk2_ardour/note_player.cc index fa8f69be62..09c2e8add3 100644 --- a/gtk2_ardour/note_player.cc +++ b/gtk2_ardour/note_player.cc @@ -1,3 +1,21 @@ +/* + Copyright (C) 2011 Paul Davis + + This program 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 2 of the License, or + (at your option) any later version. + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + #include <sigc++/bind.h> #include <glibmm/main.h> @@ -10,51 +28,51 @@ using namespace ARDOUR; using namespace std; NotePlayer::NotePlayer (boost::shared_ptr<MidiTrack> mt) - : track (mt) + : track (mt) { } void NotePlayer::add (boost::shared_ptr<NoteType> note) { - notes.push_back (note); + notes.push_back (note); } void NotePlayer::play () { - Evoral::MusicalTime longest_duration_beats = 0; + Evoral::MusicalTime longest_duration_beats = 0; - /* note: if there is more than 1 note, we will silence them all at the same time - */ + /* note: if there is more than 1 note, we will silence them all at the same time + */ - for (NoteList::iterator n = notes.begin(); n != notes.end(); ++n) { - track->write_immediate_event ((*n)->on_event().size(), (*n)->on_event().buffer()); - if ((*n)->length() > longest_duration_beats) { - longest_duration_beats = (*n)->length(); - } - } + for (Notes::iterator n = notes.begin(); n != notes.end(); ++n) { + track->write_immediate_event ((*n)->on_event().size(), (*n)->on_event().buffer()); + if ((*n)->length() > longest_duration_beats) { + longest_duration_beats = (*n)->length(); + } + } uint32_t note_length_ms = 350; - /* beats_to_frames (longest_duration_beats) - * (1000 / (double)track->session().nominal_frame_rate()); */ + /* beats_to_frames (longest_duration_beats) + * (1000 / (double)track->session().nominal_frame_rate()); */ Glib::signal_timeout().connect(sigc::bind (sigc::ptr_fun (&NotePlayer::_off), this), - note_length_ms, G_PRIORITY_DEFAULT); + note_length_ms, G_PRIORITY_DEFAULT); } bool NotePlayer::_off (NotePlayer* np) { - np->off (); - delete np; - return false; + np->off (); + delete np; + return false; } void NotePlayer::off () { - for (NoteList::iterator n = notes.begin(); n != notes.end(); ++n) { - track->write_immediate_event((*n)->off_event().size(), (*n)->off_event().buffer()); - } + for (Notes::iterator n = notes.begin(); n != notes.end(); ++n) { + track->write_immediate_event((*n)->off_event().size(), (*n)->off_event().buffer()); + } } diff --git a/gtk2_ardour/note_player.h b/gtk2_ardour/note_player.h index 7df4af4445..e5ff93e113 100644 --- a/gtk2_ardour/note_player.h +++ b/gtk2_ardour/note_player.h @@ -1,3 +1,21 @@ +/* + Copyright (C) 2011 Paul Davis + + This program 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 2 of the License, or + (at your option) any later version. + + This program 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 this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +*/ + #ifndef __gtk2_ardour_note_player_h__ #define __gtk2_ardour_note_player_h__ @@ -8,27 +26,27 @@ #include "evoral/Note.hpp" namespace ARDOUR { - class MidiTrack; + class MidiTrack; } class NotePlayer : public sigc::trackable { - public: - typedef Evoral::Note<Evoral::MusicalTime> NoteType; +public: + typedef Evoral::Note<Evoral::MusicalTime> NoteType; - NotePlayer (boost::shared_ptr<ARDOUR::MidiTrack>); - ~NotePlayer () {} + NotePlayer (boost::shared_ptr<ARDOUR::MidiTrack>); + ~NotePlayer () {} - void add (boost::shared_ptr<NoteType>); - void play (); - void off (); + void add (boost::shared_ptr<NoteType>); + void play (); + void off (); - static bool _off (NotePlayer*); + static bool _off (NotePlayer*); - private: - typedef std::vector<boost::shared_ptr<NoteType> > NoteList; +private: + typedef std::vector< boost::shared_ptr<NoteType> > Notes; - boost::shared_ptr<ARDOUR::MidiTrack> track; - NoteList notes; + boost::shared_ptr<ARDOUR::MidiTrack> track; + Notes notes; }; #endif /* __gtk2_ardour_note_player_h__ */ |