/* This program prints the currently connected MIDI devices. The output consists of device declarations separated by blank lines. An example device declaration: Name: Network Session 1 Host: CoreMIDI Input: true Output: false */ void print_device(fa_midi_device_t x) { fa_print("Name: %s\n", fa_string_to_string(fa_midi_name(x))); fa_print("Host: %s\n", fa_string_to_string(fa_midi_host_name(x))); fa_print("In: %s\n", fa_fb(fa_midi_has_input(x))); fa_print("Out: %s\n", fa_fb(fa_midi_has_output(x))); fa_print_ln(fa_string("")); }
/** Called whenever a new session is started. */ fa_midi_session_t print_midi_devices(fa_ptr_t _, fa_midi_session_t session) { fa_midi_add_status_callback(status_callback, session, session); // fa_thread_sleep(500); // FIXME why is this needed? fa_list_t open_streams = fa_empty(); fa_for_each(x, fa_midi_all(session)) { fa_print("Name: %s\n", fa_string_to_string(fa_midi_name(x))); fa_print("Host: %s\n", fa_string_to_string(fa_midi_host_name(x))); fa_print("In: %s\n", fa_fb(fa_midi_has_input(x))); fa_print("Out: %s\n", fa_fb(fa_midi_has_output(x))); fa_print_ln(fa_string("")); fa_mark_used(x); }
fa_pair_t fa_signal_to_tree(fa_signal_t signal) { switch (signal->tag) { case time_signal: return pair(string("time"), empty()); case random_signal: return pair(string("random"), empty()); case constant_signal: return pair( fa_string_to_string( fa_from_double( constant_get(signal, value))), empty()); case lift_signal: return pair( lift_get(signal, name), list(fa_signal_to_tree(lift_get(signal, a)))); case lift2_signal: return pair( lift_get(signal, name), list( fa_signal_to_tree(lift2_get(signal, a)), fa_signal_to_tree(lift2_get(signal, b)))); case input_signal: return pair( concat( string("input "), fa_string_show(fa_from_int32(input_get(signal, c)))), empty()); case output_signal: return pair( concat( string("output "), fa_string_show(fa_from_int32(output_get(signal, c))), string("[-"), fa_string_show(fa_from_int32(output_get(signal, n))), string("]") ), list(fa_signal_to_tree(output_get(signal, a)))); default: assert(false); } }
string_t draw_tree(pair_t value, string_t indent, bool is_last, string_t result) { ptr_t label = fa_pair_first(value); list_t children = fa_pair_second(value); fa_append_to(result, indent); if (is_last) { fa_append_to(result, string("`- ")); fa_append_to(indent, string(" ")); } else { fa_append_to(result, string("+- ")); fa_append_to(indent, string("| ")); } fa_append_to(result, fa_string_to_string(label)); fa_append_to(result, string("\n")); fa_for_each_last(x, children, last) { result = draw_tree(x, indent, last, result); }