void helper_function() { fa_signal_custom_processor_t proc; proc.before = before_; proc.after = after_; proc.render = render_; proc.receive = receive_; proc.send = NULL; proc.data = NULL; proc.destroy = NULL; // printf("Sending custom proc %p!\n", &proc); fa_signal_t a = fa_multiply(fa_signal_sin(fa_signal_line(440)), fa_signal_input(32)); fa_signal_t b = fa_signal_custom(&proc, a); fa_mark_used(a); fa_mark_used(b); fa_signal_t r = b; if (RT) { fa_audio_session_t s = fa_audio_begin_session(); fa_audio_device_t i = fa_audio_default_input(s); fa_audio_device_t o = fa_audio_default_output(s); fa_list_t out = list(r, a); fa_audio_stream_t st = fa_audio_open_stream(i, o, just, out); if (fa_check(st)) { fa_error_log(st, NULL); } fa_audio_schedule( fa_hms(0, 0, 0), fa_action_send(fa_string("DLS"), fa_string("hello!")), st ); while (1) { fa_audio_schedule( fa_hms(0, 0, 0), fa_action_send(fa_string("DLS"), fa_string("hello!")), st ); fa_thread_sleep(1000 * 1); } fa_destroy(st); fa_destroy(s); } else { fa_signal_run_file(44100 * 10, list( fa_pair_create(fa_hms(0, 0, 0), fa_action_send(fa_string("DLS"), fa_string("hello!"))) ), r, fa_string("test.wav")); } }
void helper_function() { signal_t r = fa_signal_lift2(string("times"), times, NULL, constant(0.1), fa_signal_sin(line(440))); { fa_audio_session_t s = fa_audio_begin_session(); fa_audio_device_t i = fa_audio_default_input(s); fa_audio_device_t o = fa_audio_default_output(s); fa_audio_stream_t st = fa_audio_open_stream(i, o, just, list(r, r)); if (fa_check(st)) { fa_error_log(st, NULL); } else { while (1) { fa_thread_sleep(10000); } } fa_audio_end_session(s); } }
void run_vst() { if (RT) { fa_audio_session_t s = fa_audio_begin_session(); fa_audio_device_t i = fa_audio_default_input(s); fa_audio_device_t o = fa_audio_default_output(s); fa_list_t vst = fa_signal_vst(fa_string("vst"), PATH, fa_list_empty()); fa_signal_t vst0 = fa_list_index(0, vst); fa_signal_t vst1 = fa_list_index(1, vst); fa_pair_t dls = fa_signal_dls(fa_string("dls")); fa_list_t out; fa_unpair(dls, dls0, dls1) { out = list(fa_add(vst0, dls0), fa_add(vst1, dls1)); } fa_audio_set_parameter(fa_string("sample-rate"), fa_f32(48000), s); fa_audio_set_parameter(fa_string("vector-size"), fa_i32(1024), s); fa_audio_stream_t st = fa_audio_open_stream(i, o, just, out); if (fa_check(st)) { fa_error_log(st, NULL); } #define kSynthName "dls" // fa_audio_schedule_relative(fa_hms(0, 0, 0), fa_action_send(fa_string(kSynthName), fa_pair_create(fa_string("open"), NULL)), st); fa_audio_schedule_relative(fa_hms(0, 0, 0), fa_action_send(fa_string(kSynthName), fa_midi_message_create_simple(0xc0, 60, 0)), st); for (int i = 0; i < 24; ++i) { fa_action_t chord = fa_action_send(fa_string(kSynthName), fa_midi_message_create_simple(0x90, 52 + ((i % 12) * 2), 90)); fa_audio_schedule_relative(fa_hms(0, 0, 0), chord, st); fa_thread_sleep(150); } fa_thread_sleep(5000); // { // // 201 109 !!! // int j = 200; // int k = 201; // // fa_action_t note1 = // fa_action_many(list( // fa_pair_create(fa_action_send(fa_string("midi"), fa_midi_message_create_simple(0x90, 60, 80)), fa_milliseconds(50)), // fa_pair_create(fa_action_send(fa_string("midi"), fa_midi_message_create_simple(0x90, 60, 0)), fa_milliseconds(3)) // )); // fa_action_t note2 = // fa_action_many(list( // fa_pair_create(fa_action_send(fa_string("midi"), fa_midi_message_create_simple(0x90, 61, 80)), fa_milliseconds(50)), // fa_pair_create(fa_action_send(fa_string("midi"), fa_midi_message_create_simple(0x90, 61, 0)), fa_milliseconds(3)) // )); // // fa_action_t notes1 = fa_action_many(fa_list_join(list( // list( // fa_pair_create(note1, fa_milliseconds(k)), // fa_pair_create(note1, fa_milliseconds(k)), // fa_pair_create(note1, fa_milliseconds(k - j)), // fa_pair_create(note1, fa_milliseconds(j)) // ), // list( // fa_pair_create(note1, fa_milliseconds(k)), // fa_pair_create(note1, fa_milliseconds(k)), // fa_pair_create(note1, fa_milliseconds(k - j)), // fa_pair_create(note1, fa_milliseconds(j)) // ), // list( // fa_pair_create(note1, fa_milliseconds(k)), // fa_pair_create(note1, fa_milliseconds(k)), // fa_pair_create(note1, fa_milliseconds(k - j)), // fa_pair_create(note1, fa_milliseconds(j)) // ), // list( // fa_pair_create(note1, fa_milliseconds(k)), // fa_pair_create(note1, fa_milliseconds(k)), // fa_pair_create(note1, fa_milliseconds(k - j)), // fa_pair_create(note1, fa_milliseconds(j)) // ), // list( // fa_pair_create(note1, fa_milliseconds(k)), // fa_pair_create(note1, fa_milliseconds(k)), // fa_pair_create(note1, fa_milliseconds(k - j)), // fa_pair_create(note1, fa_milliseconds(j)) // ) // ))); // fa_action_t notes2 = fa_action_many(list( // fa_pair_create(note2, fa_milliseconds(k * 3)), // fa_pair_create(note2, fa_milliseconds(k * 3)), // fa_pair_create(note2, fa_milliseconds(k * 3)), // fa_pair_create(note2, fa_milliseconds(k * 3)), // fa_pair_create(note2, fa_milliseconds(k * 3)) // )); // // // fa_audio_schedule_relative(seconds(0), notes1, s); // // fa_audio_schedule_relative(seconds(0), notes2, s); // // fa_audio_schedule_relative(seconds(0), fa_action_repeat(fa_milliseconds(3000), // fa_action_many(list( // fa_pair_create(notes1, fa_milliseconds(0)), // fa_pair_create(notes2, fa_milliseconds(0)) // ))), st); // // // 20 BE // // // int n = 200; // // fa_audio_schedule_relative(seconds(0), fa_action_repeat(fa_milliseconds(n), note1), s); // // fa_thread_sleep(100000); // } }