aboutsummaryrefslogtreecommitdiffstats
path: root/src/engine/JackDriver.cpp
diff options
context:
space:
mode:
authorDavid Robillard <d@drobilla.net>2008-02-09 18:23:57 +0000
committerDavid Robillard <d@drobilla.net>2008-02-09 18:23:57 +0000
commitbd92c37ed3513ab881cad3e8667c6e9c6af0858f (patch)
treefa0971280abc199228bdc84dbbfe6e3b04b8b876 /src/engine/JackDriver.cpp
parent643bc5303bd0aaf054df02782a1ee2bf2c78e852 (diff)
downloadmachina-bd92c37ed3513ab881cad3e8667c6e9c6af0858f.tar.gz
machina-bd92c37ed3513ab881cad3e8667c6e9c6af0858f.tar.bz2
machina-bd92c37ed3513ab881cad3e8667c6e9c6af0858f.zip
Use Raul::TimeStamp (LV2 compatible typed 32:32 fixed timestamp) everywhere.
Fix initial size of Patchage messages window. Machina disabled for now (transitioning to generic timestamps). git-svn-id: http://svn.drobilla.net/lad/machina@1133 a436a847-0d15-0410-975c-d299462d15a1
Diffstat (limited to 'src/engine/JackDriver.cpp')
-rw-r--r--src/engine/JackDriver.cpp30
1 files changed, 18 insertions, 12 deletions
diff --git a/src/engine/JackDriver.cpp b/src/engine/JackDriver.cpp
index 2e588ec..5560926 100644
--- a/src/engine/JackDriver.cpp
+++ b/src/engine/JackDriver.cpp
@@ -35,11 +35,10 @@ JackDriver::JackDriver(SharedPtr<Machine> machine)
, _output_port(NULL)
, _cycle_time(1/48000.0, 120.0)
, _bpm(120.0)
- , _quantization(0.0)
+ , _quantization(machine->time().unit())
+ , _record_time(machine->time().unit())
, _recording(0)
{
- if (!_machine)
- _machine = SharedPtr<Machine>(new Machine());
}
@@ -74,6 +73,10 @@ JackDriver::attach(const std::string& client_name)
if (!_output_port)
std::cerr << "WARNING: Failed to create MIDI output port." << std::endl;
+ if (!_machine)
+ _machine = SharedPtr<Machine>(new Machine(
+ TimeUnit::frames(jack_get_sample_rate(jack_client()))));
+
_machine->activate();
}
}
@@ -119,12 +122,12 @@ void
JackDriver::process_input(SharedPtr<Machine> machine, const TimeSlice& time)
{
// We only actually read Jack input at the beginning of a cycle
- assert(time.offset_ticks() == 0);
+ assert(time.offset_ticks().is_zero());
assert(_input_port);
if (_recording.get()) {
- const jack_nframes_t nframes = time.length_ticks();
+ const jack_nframes_t nframes = time.length_ticks().ticks();
void* jack_buffer = jack_port_get_buffer(_input_port, nframes);
const jack_nframes_t event_count = jack_midi_get_event_count(jack_buffer);
@@ -132,7 +135,8 @@ JackDriver::process_input(SharedPtr<Machine> machine, const TimeSlice& time)
jack_midi_event_t ev;
jack_midi_event_get(&ev, jack_buffer, i);
- _recorder->write(_record_time + ev.time, ev.size, ev.buffer);
+ _recorder->write(_record_time + TimeStamp(_record_time.unit(), ev.time, 0),
+ ev.size, ev.buffer);
}
if (event_count > 0)
@@ -140,7 +144,7 @@ JackDriver::process_input(SharedPtr<Machine> machine, const TimeSlice& time)
} else {
- const jack_nframes_t nframes = time.length_ticks();
+ const jack_nframes_t nframes = time.length_ticks().ticks();
void* jack_buffer = jack_port_get_buffer(_input_port, nframes);
const jack_nframes_t event_count = jack_midi_get_event_count(jack_buffer);
@@ -154,7 +158,8 @@ JackDriver::process_input(SharedPtr<Machine> machine, const TimeSlice& time)
if (learn) {
learn->enter_action()->set_event(ev.size, ev.buffer);
learn->start(_quantization.get(),
- time.ticks_to_beats(jack_last_frame_time(_client) + ev.time));
+ TimeStamp(TimeUnit::frames(sample_rate()),
+ jack_last_frame_time(_client) + ev.time, 0));
}
} else if (ev.buffer[0] == 0x80) {
@@ -165,7 +170,8 @@ JackDriver::process_input(SharedPtr<Machine> machine, const TimeSlice& time)
if (learn->started()) {
learn->exit_action()->set_event(ev.size, ev.buffer);
learn->finish(
- time.ticks_to_beats(jack_last_frame_time(_client) + ev.time));
+ TimeStamp(TimeUnit::frames(sample_rate()),
+ jack_last_frame_time(_client) + ev.time, 0));
machine->clear_pending_learn();
}
}
@@ -177,9 +183,9 @@ JackDriver::process_input(SharedPtr<Machine> machine, const TimeSlice& time)
void
-JackDriver::write_event(Raul::BeatTime time,
- size_t size,
- const byte* event) throw (std::logic_error)
+JackDriver::write_event(Raul::TimeStamp time,
+ size_t size,
+ const byte* event) throw (std::logic_error)
{
if (!_output_port)
return;