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); } } } }
fa_signal_t fa_signal_copy(fa_signal_t signal) { switch (signal->tag) { case time_signal: return fa_signal_time(); case random_signal: return fa_signal_random(); case constant_signal: return copy_constant(signal); case lift_signal: return copy_lift(signal); case lift2_signal: return copy_lift2(signal); case loop_signal: return copy_loop(signal); case delay_signal: return copy_delay(signal); case insert_signal: return copy_insert(signal); case custom_signal: return copy_custom(signal); case input_signal: return copy_input(signal); case output_signal: return copy_output(signal); default: assert(false); } }