sequencer play fix.
This commit is contained in:
parent
e664414796
commit
d6ded83beb
16 changed files with 372 additions and 16 deletions
|
|
@ -48,6 +48,9 @@ xtc_result status_result = XTC_OK, submit_result = XTC_OK, reserve_result = XTC_
|
|||
unsigned int submissions = 0U;
|
||||
xtc_backend_status engine_status = {};
|
||||
bool partial_open = false;
|
||||
bool midi_ports_available = true;
|
||||
xtc_result midi_visit_result = XTC_OK, midi_route_result = XTC_OK;
|
||||
std::string routed_input, routed_output;
|
||||
unsigned int opens = 0, starts = 0, stops = 0, closes = 0, collects = 0, alive = 0;
|
||||
int failures = 0;
|
||||
#define CHECK(c) do { if (!(c)) { std::fprintf(stderr,"FAIL %s:%d: %s\n",__FILE__,__LINE__,#c); ++failures; } } while (0)
|
||||
|
|
@ -116,6 +119,8 @@ void reset()
|
|||
engine_status.sample_rate = 48000U;
|
||||
engine_status.buffer_frames = 1024U;
|
||||
partial_open = false;
|
||||
midi_ports_available=true; midi_visit_result=midi_route_result=XTC_OK;
|
||||
routed_input.clear(); routed_output.clear();
|
||||
}
|
||||
}
|
||||
extern "C" {
|
||||
|
|
@ -171,13 +176,13 @@ xtc_result xtc_backend_submit(xtc_backend *backend, const xtc_graph *graph)
|
|||
return XTC_OK;
|
||||
}
|
||||
xtc_result xtc_backend_start_routed(xtc_backend *b,const char *input,const char *output)
|
||||
{auto r=xtc_backend_start(b);if(r==XTC_OK && input && *input)r=xtc_backend_route_midi(b,XTC_PORT_INPUT,input,0);if(r==XTC_OK && output && *output)r=xtc_backend_route_midi(b,XTC_PORT_OUTPUT,output,0);if(r!=XTC_OK && handle.running)(void)xtc_backend_stop(b);return r;}
|
||||
{routed_input=input ? input : "";routed_output=output ? output : "";auto r=xtc_backend_start(b);if(r==XTC_OK && input && *input)r=xtc_backend_route_midi(b,XTC_PORT_INPUT,input,0);if(r==XTC_OK && output && *output)r=xtc_backend_route_midi(b,XTC_PORT_OUTPUT,output,0);if(r!=XTC_OK && handle.running)(void)xtc_backend_stop(b);return r;}
|
||||
xtc_result xtc_backend_set_midi_options(xtc_backend *,int input,int output,int thru)
|
||||
{CHECK(input>=-1 && input<16 && output>=-1 && output<16 && thru>=0 && thru<2);return handle.running ? XTC_ERR_INVALID_STATE : XTC_OK;}
|
||||
xtc_result xtc_backend_visit_midi_ports(xtc_backend *,xtc_port_direction d,xtc_backend_port_visitor visit,void *c)
|
||||
{visit(d==XTC_PORT_OUTPUT ? "Keyboard:out" : "Synth:in",c);return XTC_OK;}
|
||||
{if(midi_visit_result!=XTC_OK)return midi_visit_result;if(midi_ports_available)visit(d==XTC_PORT_OUTPUT ? "Keyboard:out" : "Synth:in",c);return XTC_OK;}
|
||||
xtc_result xtc_backend_route_midi(xtc_backend *,xtc_port_direction,const char *name,int)
|
||||
{return !strcmp(name,"missing:port") ? XTC_ERR_NOT_FOUND : XTC_OK;}
|
||||
{return !strcmp(name,"missing:port") ? XTC_ERR_NOT_FOUND : midi_route_result;}
|
||||
xtc_result xtc_backend_panic(xtc_backend *) { xtc_midi_plan_panic(handle.midi, engine_status.sample_position); return XTC_OK; }
|
||||
xtc_result xtc_backend_read_meters(xtc_backend *, xtc_meter_snapshot *out)
|
||||
{
|
||||
|
|
@ -372,7 +377,31 @@ int midi_workflow_tests()
|
|||
CHECK(find(&dialog,"Refresh MIDI devices"));press(find(&dialog,"Refresh MIDI devices"));
|
||||
CHECK(window.settings().midi_output_channel==4);
|
||||
auto missing=settings;strcpy(missing.midi_input_port,"missing:port");CHECK(window.apply_preferences(missing)==XTC_OK);
|
||||
CHECK(window.start_configured_backend()==XTC_ERR_NOT_FOUND && !handle.running);CHECK(window.apply_preferences(settings)==XTC_OK);
|
||||
CHECK(window.start_configured_backend()==XTC_OK && handle.running);
|
||||
CHECK(routed_input.empty() && routed_output=="Synth:in");
|
||||
CHECK(!strcmp(window.settings().midi_input_port,"missing:port"));
|
||||
CHECK(contains(&window,"MIDI device unavailable"));
|
||||
CHECK(xtc_backend_stop(&handle)==XTC_OK);
|
||||
strcpy(missing.midi_input_port,"Keyboard:out");strcpy(missing.midi_output_port,"missing:port");
|
||||
CHECK(window.apply_preferences(missing)==XTC_OK);
|
||||
CHECK(window.start_configured_backend()==XTC_OK && routed_input=="Keyboard:out" && routed_output.empty());
|
||||
CHECK(xtc_backend_stop(&handle)==XTC_OK);
|
||||
CHECK(window.apply_preferences(settings)==XTC_OK);
|
||||
midi_ports_available=false;
|
||||
press(find(&window,"Play"));
|
||||
CHECK(handle.running && routed_input.empty() && routed_output.empty());
|
||||
CHECK(contains(&window,"MIDI device unavailable"));
|
||||
CHECK(xtc_backend_stop(&handle)==XTC_OK);
|
||||
midi_ports_available=true;
|
||||
CHECK(window.start_configured_backend()==XTC_OK && routed_input=="Keyboard:out" && routed_output=="Synth:in");
|
||||
CHECK(xtc_backend_stop(&handle)==XTC_OK);
|
||||
midi_visit_result=XTC_ERR_IO;
|
||||
CHECK(window.start_configured_backend()==XTC_ERR_IO && !handle.running);
|
||||
midi_visit_result=XTC_OK;midi_route_result=XTC_ERR_IO;
|
||||
CHECK(window.start_configured_backend()==XTC_ERR_IO && !handle.running);
|
||||
midi_route_result=XTC_OK;start_result=XTC_ERR_IO;
|
||||
CHECK(window.start_configured_backend()==XTC_ERR_IO && !handle.running);
|
||||
start_result=XTC_OK;
|
||||
CHECK(window.create_track(true)==XTC_OK && window.open_piano_roll()==XTC_OK);
|
||||
CHECK(window.piano_roll()->add_note(0,240,64,90,2)==XTC_OK);
|
||||
std::string midi=std::string(dir)+"/clip.mid";auto *original=s->project();
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue