X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fnote_player.cc;h=cd5c058209b76181fe063af8fff5e2ec158f02cc;hb=99054ea415c8a28227024bc27152fdf30379bdf9;hp=09c2e8add3db235736a097cee0fc125bfa33e294;hpb=a9ebb3576e53c30b27016a442168daf8e9880707;p=ardour.git diff --git a/gtk2_ardour/note_player.cc b/gtk2_ardour/note_player.cc index 09c2e8add3..cd5c058209 100644 --- a/gtk2_ardour/note_player.cc +++ b/gtk2_ardour/note_player.cc @@ -20,7 +20,6 @@ #include #include "ardour/midi_track.h" -#include "ardour/session.h" #include "note_player.h" @@ -32,6 +31,11 @@ NotePlayer::NotePlayer (boost::shared_ptr mt) { } +NotePlayer::~NotePlayer () +{ + clear (); +} + void NotePlayer::add (boost::shared_ptr note) { @@ -39,26 +43,32 @@ NotePlayer::add (boost::shared_ptr note) } void -NotePlayer::play () +NotePlayer::clear () { - Evoral::MusicalTime longest_duration_beats = 0; - - /* note: if there is more than 1 note, we will silence them all at the same time - */ + off (); + notes.clear (); +} +void +NotePlayer::on () +{ 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(); - } } +} + +void +NotePlayer::play () +{ + on (); + + /* note: if there is more than 1 note, we will silence them all at the same time + */ - uint32_t note_length_ms = 350; - /* beats_to_frames (longest_duration_beats) - * (1000 / (double)track->session().nominal_frame_rate()); */ + const uint32_t note_length_ms = 100; - Glib::signal_timeout().connect(sigc::bind (sigc::ptr_fun (&NotePlayer::_off), this), - note_length_ms, G_PRIORITY_DEFAULT); + Glib::signal_timeout().connect (sigc::bind (sigc::ptr_fun (&NotePlayer::_off), this), + note_length_ms, G_PRIORITY_DEFAULT); } bool @@ -73,6 +83,6 @@ void NotePlayer::off () { for (Notes::iterator n = notes.begin(); n != notes.end(); ++n) { - track->write_immediate_event((*n)->off_event().size(), (*n)->off_event().buffer()); + track->write_immediate_event ((*n)->off_event().size(), (*n)->off_event().buffer()); } }