Beispiel #1
0
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);
                }
            }
        }
    }
Beispiel #2
0
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"));
    }
}
Beispiel #3
0
void fa_audio_with_session(session_callback_t session_callback,
                           ptr_t                           session_data,
                           error_callback_t                error_callback,
                           ptr_t                           error_data
                          )
{
    session_t session = fa_audio_begin_session();

    if (fa_check(session)) {
        error_callback(error_data, (error_t) session);
    } else {
        session_callback(session_data, session);
    }

    fa_audio_end_session(session);
}
Beispiel #4
0
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);
    }
}
Beispiel #5
0
 fa_for_each(x, fa_audio_all(session)) {
     if (!fa_check(x)) {
         print_device(x);
     }
 }
Beispiel #6
0
Datei: vst.c Projekt: EQ4/faudio
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);
        // }

    }