aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine/SMFDriver.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2007-03-18 02:11:51 +0000
committerDavid Robillard <d@drobilla.net>2007-03-18 02:11:51 +0000
commit47f59aaad7a5ab8c189905544a761940ae9f8509 (patch)
tree67b6ec9ad915de327cda5007c8c1708a1e256c87 /src/engine/SMFDriver.cpp
parenta716b2c0571f5bdcd817835cecb30cb7a4c745e0 (diff)
downloadmachina-47f59aaad7a5ab8c189905544a761940ae9f8509.tar.gz
machina-47f59aaad7a5ab8c189905544a761940ae9f8509.tar.bz2
machina-47f59aaad7a5ab8c189905544a761940ae9f8509.zip
Improved automata diagram drawing (include notes, use standard initial note notation).
Made compilation without Jack possible. git-svn-id: http://svn.drobilla.net/lad/machina@363 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/SMFDriver.cpp')
-rw-r--r--src/engine/SMFDriver.cpp26
1 files changed, 21 insertions, 5 deletions
diff --git a/src/engine/SMFDriver.cpp b/src/engine/SMFDriver.cpp
index cdf2ad7..60ee1af 100644
--- a/src/engine/SMFDriver.cpp
+++ b/src/engine/SMFDriver.cpp
@@ -18,6 +18,7 @@
#include <list>
#include <iostream>
#include <glibmm/convert.h>
+#include <raul/SharedPtr.h>
#include <raul/midi_events.h>
#include <raul/SMFWriter.h>
#include <raul/SMFReader.h>
@@ -30,6 +31,13 @@ using namespace std;
namespace Machina {
+SMFDriver::SMFDriver(SharedPtr<Machine> machine)
+ : Driver(machine)
+{
+ _writer = SharedPtr<Raul::SMFWriter>(new Raul::SMFWriter());
+}
+
+
/** Learn a single track from the MIDI file at @a uri
*
* @track selects which track of the MIDI file to import, starting from 1.
@@ -43,7 +51,11 @@ SMFDriver::learn(const string& filename, unsigned track, Raul::BeatTime max_dura
SharedPtr<Machine> m(new Machine());
Raul::SMFReader reader;
- reader.open(filename);
+
+ if (!reader.open(filename)) {
+ cerr << "Unable to open MIDI file " << filename << endl;
+ return SharedPtr<Machine>();
+ }
if (track > reader.num_tracks())
return SharedPtr<Machine>();
@@ -67,7 +79,10 @@ SMFDriver::learn(const string& filename, Raul::BeatTime max_duration)
SharedPtr<Machine> m(new Machine());
Raul::SMFReader reader;
- reader.open(filename);
+ if (!reader.open(filename)) {
+ cerr << "Unable to open MIDI file " << filename << endl;
+ return SharedPtr<Machine>();
+ }
for (unsigned t=1; t <= reader.num_tracks(); ++t) {
learn_track(m, reader, t, max_duration);
@@ -87,7 +102,8 @@ SMFDriver::learn_track(SharedPtr<Machine> m,
Raul::BeatTime max_duration)
{
const bool found_track = reader.seek_to_track(track);
- assert(found_track);
+ if (!found_track)
+ return;
list<SharedPtr<Node> > active_nodes;
@@ -113,7 +129,7 @@ SMFDriver::learn_track(SharedPtr<Machine> m,
//cerr << "t = " << t << endl;
if (ev_size > 0) {
if ((buf[0] & 0xF0) == MIDI_CMD_NOTE_ON) {
- cerr << "NOTE ON: " << (int)buf[1] << ", channel = " << (int)(buf[0] & 0x0F) << endl;
+ //cerr << "NOTE ON: " << (int)buf[1] << ", channel = " << (int)(buf[0] & 0x0F) << endl;
SharedPtr<Node> node(new Node());
node->add_enter_action(SharedPtr<Action>(new MidiAction(ev_size, buf)));
assert(connect_node_end_time <= t);
@@ -195,7 +211,7 @@ SMFDriver::learn_track(SharedPtr<Machine> m,
void
SMFDriver::run(SharedPtr<Machine> machine, Raul::BeatTime max_time)
{
- Raul::TimeSlice time(1.0/(double)_ppqn, 120);
+ Raul::TimeSlice time(1.0/(double)_writer->ppqn(), 120);
time.set_length(time.beats_to_ticks(max_time));
machine->set_sink(shared_from_this());
machine->run(time);