SMFSource::SMFSource (std::string path, Flag flags)
: MidiSource (region_name_from_path(path))
, _channel(0)
- , _flags (flags)
+ , _flags (Flag(flags | Writable)) // FIXME: this needs to be writable for now
, _allow_remove_if_empty(true)
, _timeline_position (0)
, _fd (0)
, _last_ev_time(0)
- , _track_size(0)
+ , _track_size(4) // compensate for the EOT event
{
/* constructor used for new internal-to-session files. file cannot exist */
, _timeline_position (0)
, _fd (0)
, _last_ev_time(0)
- , _track_size(0)
+ , _track_size(4) // compensate for the EOT event
{
/* constructor used for existing internal-to-session files. file must exist */
int
SMFSource::read_event(MidiEvent& ev) const
{
-#if 0
if (feof(_fd)) {
return -1;
}
printf("%X ", ev.buffer[i]);
}
printf("\n");
-#endif
+
return 0;
}
jack_nframes_t
SMFSource::read_unlocked (MidiRingBuffer& dst, jack_nframes_t start, jack_nframes_t cnt) const
{
-#if 0
cerr << "SMF - read " << start << " -- " << cnt;
// FIXME: ugh
}
}
}
-#endif
+#if 0
cerr << "SMF pretending to read" << endl;
MidiEvent ev;
dst.write(ev);
//dst.clear();
-
+#endif
return cnt;
}
if (!writable()) {
return;
}
+
+ cerr << "SMF - Writing EOT\n";
+
+ fseek(_fd, 0, SEEK_END);
+ write_var_len(1); // whatever...
+ char eot[4] = { 0xFF, 0x2F, 0x00 }; // end-of-track meta-event
+ fwrite(eot, 1, 4, _fd);
+ fflush(_fd);
+
#if 0
Glib::Mutex::Lock lm (_lock);