mirror of
https://github.com/Ardour/ardour.git
synced 2026-01-06 13:45:43 +01:00
* Swapped MidiSource to LibSMF
* integrated libsmf into scons git-svn-id: svn://localhost/ardour2/branches/3.0@4539 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
b1cd183511
commit
9d33176b49
8 changed files with 63 additions and 19 deletions
11
SConstruct
11
SConstruct
|
|
@ -650,10 +650,11 @@ libraries['ardour_cp'] = LibraryInfo (LIBS='ardour_cp', LIBPATH='#libs/surfaces/
|
|||
|
||||
# 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')
|
||||
|
||||
|
||||
|
|
@ -1156,6 +1157,7 @@ if env['SYSLIBS']:
|
|||
subdirs = [
|
||||
'libs/pbd',
|
||||
'libs/midi++2',
|
||||
'libs/evoral/src/libsmf',
|
||||
'libs/evoral',
|
||||
'libs/ardour',
|
||||
'libs/vamp-sdk',
|
||||
|
|
@ -1236,6 +1238,7 @@ else:
|
|||
'libs/taglib',
|
||||
'libs/pbd',
|
||||
'libs/midi++2',
|
||||
'libs/evoral/src/libsmf',
|
||||
'libs/evoral',
|
||||
'libs/ardour',
|
||||
'libs/vamp-sdk',
|
||||
|
|
|
|||
|
|
@ -47,6 +47,7 @@ gtkardour.Merge ([
|
|||
libraries['libgnomecanvasmm'],
|
||||
libraries['lrdf'],
|
||||
libraries['midi++2'],
|
||||
libraries['smf'],
|
||||
libraries['evoral'],
|
||||
libraries['pangomm'],
|
||||
libraries['pbd'],
|
||||
|
|
|
|||
|
|
@ -14,7 +14,7 @@ else
|
|||
fi
|
||||
export VAMP_PATH=libs/vamp-plugins:$VAMP_PATH
|
||||
|
||||
export LD_LIBRARY_PATH=libs/vamp-sdk:libs/surfaces/control_protocol:libs/ardour:libs/midi++2:libs/pbd:libs/rubberband:libs/soundtouch:libs/gtkmm2ext:libs/sigc++2:libs/glibmm2:libs/gtkmm2/atk:libs/gtkmm2/pango:libs/gtkmm2/gdk:libs/gtkmm2/gtk:libs/libgnomecanvasmm:libs/libsndfile:libs/appleutility:libs/cairomm:libs/taglib:libs/evoral:$LD_LIBRARY_PATH
|
||||
export LD_LIBRARY_PATH=libs/vamp-sdk:libs/surfaces/control_protocol:libs/ardour:libs/midi++2:libs/pbd:libs/rubberband:libs/soundtouch:libs/gtkmm2ext:libs/sigc++2:libs/glibmm2:libs/gtkmm2/atk:libs/gtkmm2/pango:libs/gtkmm2/gdk:libs/gtkmm2/gtk:libs/libgnomecanvasmm:libs/libsndfile:libs/appleutility:libs/cairomm:libs/taglib:libs/evoral:libs/evoral/src/libsmf:$LD_LIBRARY_PATH
|
||||
|
||||
# DYLD_LIBRARY_PATH is for darwin.
|
||||
export DYLD_FALLBACK_LIBRARY_PATH=$LD_LIBRARY_PATH
|
||||
|
|
|
|||
|
|
@ -332,6 +332,7 @@ ardour.Merge ([
|
|||
libraries['lrdf'],
|
||||
libraries['midi++2'],
|
||||
libraries['evoral'],
|
||||
libraries['smf'],
|
||||
libraries['pbd'],
|
||||
libraries['raptor'],
|
||||
libraries['samplerate'],
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@
|
|||
#include <time.h>
|
||||
|
||||
#include <ardour/midi_source.h>
|
||||
#include <evoral/SMF.hpp>
|
||||
#include <evoral/LibSMF.hpp>
|
||||
|
||||
namespace Evoral { template<typename T> class Event; }
|
||||
|
||||
|
|
@ -34,7 +34,7 @@ namespace ARDOUR {
|
|||
template<typename T> class MidiRingBuffer;
|
||||
|
||||
/** Standard Midi File (Type 0) Source */
|
||||
class SMFSource : public MidiSource, public Evoral::SMF<double> {
|
||||
class SMFSource : public MidiSource, public Evoral::LibSMF<double> {
|
||||
public:
|
||||
enum Flag {
|
||||
Writable = 0x1,
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ uint64_t SMFSource::header_position_offset;
|
|||
|
||||
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)
|
||||
{
|
||||
|
|
@ -146,7 +146,7 @@ SMFSource::read_unlocked (MidiRingBuffer<double>& dst, nframes_t start, nframes_
|
|||
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(
|
||||
|
|
@ -155,7 +155,7 @@ SMFSource::read_unlocked (MidiRingBuffer<double>& dst, nframes_t start, nframes_
|
|||
|
||||
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";
|
||||
|
|
@ -251,7 +251,7 @@ SMFSource::write_unlocked (MidiRingBuffer<double>& src, nframes_t cnt)
|
|||
make_sure_controls_have_the_right_interpolation();
|
||||
}
|
||||
|
||||
Evoral::SMF<double>::flush();
|
||||
Evoral::LibSMF<double>::flush();
|
||||
free(buf);
|
||||
|
||||
const nframes_t oldlen = _length;
|
||||
|
|
@ -271,12 +271,12 @@ SMFSource::append_event_unlocked(EventTimeUnit unit, const Evoral::Event<double>
|
|||
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);
|
||||
|
||||
|
|
@ -299,7 +299,7 @@ SMFSource::append_event_unlocked(EventTimeUnit unit, const Evoral::Event<double>
|
|||
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();
|
||||
}
|
||||
|
|
@ -354,7 +354,7 @@ void
|
|||
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
|
||||
|
|
@ -367,7 +367,7 @@ SMFSource::mark_streaming_write_completed ()
|
|||
}
|
||||
|
||||
_model->set_edited(false);
|
||||
Evoral::SMF<double>::end_write ();
|
||||
Evoral::LibSMF<double>::end_write ();
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -632,7 +632,7 @@ SMFSource::load_model(bool lock, bool force_reload)
|
|||
}
|
||||
|
||||
_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;
|
||||
|
|
@ -704,6 +704,6 @@ SMFSource::destroy_model()
|
|||
void
|
||||
SMFSource::flush_midi()
|
||||
{
|
||||
Evoral::SMF<double>::end_write();
|
||||
Evoral::LibSMF<double>::end_write();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -13,7 +13,8 @@ evoral.Merge([
|
|||
libraries['glibmm2'],
|
||||
libraries['xml'],
|
||||
libraries['pbd'],
|
||||
libraries['boost']
|
||||
libraries['boost'],
|
||||
libraries['smf']
|
||||
])
|
||||
|
||||
if evoral['IS_OSX']:
|
||||
|
|
@ -33,6 +34,7 @@ src/Event.cpp
|
|||
src/MIDIEvent.cpp
|
||||
src/Note.cpp
|
||||
src/SMF.cpp
|
||||
src/LibSMF.cpp
|
||||
src/SMFReader.cpp
|
||||
src/Sequence.cpp
|
||||
""")
|
||||
|
|
|
|||
37
libs/evoral/src/libsmf/SConscript
Normal file
37
libs/evoral/src/libsmf/SConscript
Normal file
|
|
@ -0,0 +1,37 @@
|
|||
# -*- 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))
|
||||
Loading…
Add table
Add a link
Reference in a new issue