Fix crash bug in MIDI recording.
git-svn-id: svn://localhost/ardour2/trunk@1980
d708f5d6-7413-0410-9779-
e7cbd77b26cf
void
MidiRegionView::add_event (const MidiEvent& ev)
{
void
MidiRegionView::add_event (const MidiEvent& ev)
{
- /*printf("Event, time = %u, size = %zu, data = ",
+ printf("Event, time = %u, size = %zu, data = ",
ev.time, ev.size);
for (size_t i=0; i < ev.size; ++i) {
printf("%X ", ev.buffer[i]);
}
ev.time, ev.size);
for (size_t i=0; i < ev.size; ++i) {
printf("%X ", ev.buffer[i]);
}
double y1 = trackview.height / 2.0;
if ((ev.buffer[0] & 0xF0) == MIDI_CMD_NOTE_ON) {
const Byte& note = ev.buffer[1];
double y1 = trackview.height / 2.0;
if ((ev.buffer[0] & 0xF0) == MIDI_CMD_NOTE_ON) {
const Byte& note = ev.buffer[1];
// priv_read_ptr);
//
} else {
// priv_read_ptr);
//
} else {
- printf("MRB - SKIPPING - %#X %d %d with time %u\n",
- ev.buffer[0], ev.buffer[1], ev.buffer[2], ev.time);
+ printf("MRB - SKIPPING EVENT (with time %u)\n", ev.time);
nframes_t time = 0;
MidiEvent ev;
nframes_t time = 0;
MidiEvent ev;
+ // FIXME: assumes tempo never changes after start
+ const double frames_per_beat = _session.tempo_map().tempo_at(_timeline_position).frames_per_beat(
+ _session.engine().frame_rate());
+
int ret;
while ((ret = read_event(ev)) >= 0) {
time += ev.time;
ev.time = time;
int ret;
while ((ret = read_event(ev)) >= 0) {
time += ev.time;
ev.time = time;
+
+ ev.time = (nframes_t)(ev.time * frames_per_beat / (double)_ppqn);
+
if (ret > 0) { // didn't skip (meta) event
//cerr << "ADDING EVENT TO MODEL: " << ev.time << endl;
_model->append(ev);
if (ret > 0) { // didn't skip (meta) event
//cerr << "ADDING EVENT TO MODEL: " << ev.time << endl;
_model->append(ev);