# The Ardour backend/engine
-libraries['ardour'] = LibraryInfo (LIBS='ardour', LIBPATH='#libs/ardour', CPPPATH='#libs/ardour')
-libraries['midi++2'] = LibraryInfo (LIBS='midi++', LIBPATH='#libs/midi++2', CPPPATH='#libs/midi++2')
-libraries['evoral'] = LibraryInfo (LIBS='evoral', LIBPATH='#libs/evoral', CPPPATH='#libs/evoral')
-libraries['pbd'] = LibraryInfo (LIBS='pbd', LIBPATH='#libs/pbd', CPPPATH='#libs/pbd')
+libraries['ardour'] = LibraryInfo (LIBS='ardour', LIBPATH='#libs/ardour', CPPPATH='#libs/ardour')
+libraries['midi++2'] = LibraryInfo (LIBS='midi++', LIBPATH='#libs/midi++2', CPPPATH='#libs/midi++2')
+libraries['smf'] = LibraryInfo (LIBS='smf', LIBPATH='#libs/evoral/src/libsmf', CPPPATH='#libs/evoral/src/libsmf/')
+libraries['evoral'] = LibraryInfo (LIBS='evoral', LIBPATH='#libs/evoral', CPPPATH='#libs/evoral')
+libraries['pbd'] = LibraryInfo (LIBS='pbd', LIBPATH='#libs/pbd', CPPPATH='#libs/pbd')
libraries['gtkmm2ext'] = LibraryInfo (LIBS='gtkmm2ext', LIBPATH='#libs/gtkmm2ext', CPPPATH='#libs/gtkmm2ext')
subdirs = [
'libs/pbd',
'libs/midi++2',
+ 'libs/evoral/src/libsmf',
'libs/evoral',
'libs/ardour',
'libs/vamp-sdk',
'libs/taglib',
'libs/pbd',
'libs/midi++2',
+ 'libs/evoral/src/libsmf',
'libs/evoral',
'libs/ardour',
'libs/vamp-sdk',
SMFSource::SMFSource (Session& s, std::string path, Flag flags)
: MidiSource (s, region_name_from_path(path, false))
- , Evoral::SMF<double> ()
+ , Evoral::LibSMF<double> ()
, _flags (Flag(flags | Writable)) // FIXME: this needs to be writable for now
, _allow_remove_if_empty(true)
{
size_t scratch_size = 0; // keep track of scratch to minimize reallocs
// FIXME: don't seek to start and search every read (brutal!)
- Evoral::SMF<double>::seek_to_start();
+ Evoral::LibSMF<double>::seek_to_start();
// FIXME: assumes tempo never changes after start
const double frames_per_beat = _session.tempo_map().tempo_at(_timeline_position).frames_per_beat(
const uint64_t start_ticks = (uint64_t)((start / frames_per_beat) * ppqn());
- while (!Evoral::SMF<double>::eof()) {
+ while (!Evoral::LibSMF<double>::eof()) {
int ret = read_event(&ev_delta_t, &ev_size, &ev_buffer);
if (ret == -1) { // EOF
//cerr << "SMF - EOF\n";
make_sure_controls_have_the_right_interpolation();
}
- Evoral::SMF<double>::flush();
+ Evoral::LibSMF<double>::flush();
free(buf);
const nframes_t oldlen = _length;
return;
}
- /*printf("SMFSource: %s - append_event_unlocked time = %lf, size = %u, data = ",
+ printf("SMFSource: %s - append_event_unlocked time = %lf, size = %u, data = ",
name().c_str(), ev.time(), ev.size());
for (size_t i=0; i < ev.size(); ++i) {
printf("%X ", ev.buffer()[i]);
}
- printf("\n");*/
+ printf("\n");
assert(ev.time() >= 0);
delta_time = (uint32_t)((ev.time() - last_event_time()) * ppqn());
}
- Evoral::SMF<double>::append_event_delta(delta_time, ev);
+ Evoral::LibSMF<double>::append_event_delta(delta_time, ev);
_write_data_count += ev.size();
}
SMFSource::mark_streaming_midi_write_started (NoteMode mode, nframes_t start_frame)
{
MidiSource::mark_streaming_midi_write_started (mode, start_frame);
- Evoral::SMF<double>::begin_write ();
+ Evoral::LibSMF<double>::begin_write ();
}
void
}
_model->set_edited(false);
- Evoral::SMF<double>::end_write ();
+ Evoral::LibSMF<double>::end_write ();
}
void
}
_model->start_write();
- Evoral::SMF<double>::seek_to_start();
+ Evoral::LibSMF<double>::seek_to_start();
uint64_t time = 0; /* in SMF ticks */
Evoral::Event<double> ev;
void
SMFSource::flush_midi()
{
- Evoral::SMF<double>::end_write();
+ Evoral::LibSMF<double>::end_write();
}
--- /dev/null
+# -*- python -*-
+
+import os
+import os.path
+import glob
+
+Import('env libraries install_prefix')
+
+subdirs = ['src/libsmf']
+
+smf = env.Clone()
+smf.Merge([
+ libraries['glib2']
+ ])
+
+if smf['IS_OSX']:
+ smf.Append (LINKFLAGS="-Xlinker -headerpad -Xlinker 2048")
+
+domain = 'smf'
+
+smf.Append(DOMAIN=domain, MAJOR=1, MINOR=2, MICRO=0)
+
+sources = Split("""
+smf.c
+smf_decode.c
+smf_load.c
+smf_save.c
+smf_tempo.c
+""")
+
+smf.Append(CFLAGS = '-DSMF_VERSION=\\\"1.2\\\"')
+
+libsmf = smf.SharedLibrary('smf', [ sources ])
+
+Default(libsmf)
+
+env.Alias('install', env.Install(os.path.join(install_prefix, env['LIBDIR'], 'ardour3'), libsmf))