int main(int argc, char const *argv[]) { fa_set_log_tool(); fa_with_faudio() { BUFFER = ring_buffer((8L * 44100L * BUFFER_SIZE_MILLIS) / 1000L); // fa_signal_t left = fa_multiply(fa_signal_play_stream(BUFFER), constant(0.8)); fa_signal_t left = fa_multiply(fa_signal_random(), fa_signal_constant(0.0)); fa_signal_t right = fa_multiply(fa_signal_random(), fa_signal_constant(0.0)); fa_with_session_(session) { fa_with_default_devices(input, output, session) { fa_audio_set_parameter(fa_string("sample-rate"), fa_f64(44100), session); fa_audio_stream_t stream; if (fa_check(stream = fa_audio_open_output(input, output, list(left, right)))) { fa_error_log(stream, NULL); } else { request_audio(); // TODO some way to delay or toggle DSP thread reading from stream (give it a rate argument?) fa_thread_sleep(300 * 1000); } } } }
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")); } }
signal_t fir(ptr_t a, signal_t rec) { return fa_add((signal_t) delay(10, a), fa_multiply(rec, constant(0.9999))); }