signal_t fir(ptr_t a, signal_t rec) { return fa_add((signal_t) delay(10, a), fa_multiply(rec, constant(0.9999))); }
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); // } }