Exemplo n.º 1
0
Arquivo: buffer.c Projeto: EQ4/faudio
fa_pair_t fa_buffer_unzip(fa_buffer_t buffer)
{
    size_t sz = fa_buffer_size(buffer);
    fa_buffer_t buffer1 = fa_buffer_create(sz/2);
    fa_buffer_t buffer2 = fa_buffer_create(sz/2);
    
    for (int i = 0; i < (sz/2); ++i)
    {
        buffer1->data[i] = buffer->data[i*2+0];
    }
    for (int i = 0; i < (sz/2); ++i)
    {
        buffer2->data[i] = buffer->data[i*2+1];
    }    
    return fa_pair_create(buffer1, buffer2);
}
Exemplo n.º 2
0
Arquivo: buffer.c Projeto: EQ4/faudio
fa_buffer_t fa_buffer_zip(fa_buffer_t buffer1, fa_buffer_t buffer2)
{
    size_t sz = SIZE_MIN(fa_buffer_size(buffer1), fa_buffer_size(buffer2));
    fa_buffer_t buffer = fa_buffer_create(sz*2);

    for (int i = 0; i < sz; ++i)
    {
        buffer->data[i*2+0] = buffer1->data[i];
        buffer->data[i*2+1] = buffer2->data[i];
    }
    return buffer;
}
Exemplo n.º 3
0
Arquivo: buffer.c Projeto: EQ4/faudio
fa_buffer_t fa_buffer_resample_mono(double new_rate, fa_buffer_t buffer)
{
    size_t old_size = fa_buffer_size(buffer);
    double old_rate = fa_peek_int32(fa_buffer_get_meta(buffer, fa_string("sample-rate")));
    size_t new_size = ((double) old_size) * (new_rate / old_rate);

    fa_buffer_t buffer2 = fa_buffer_create(new_size);

    resample_raw(old_rate, new_rate, (double*) buffer->data, old_size / sizeof(double), (double*) buffer2->data, new_size / sizeof(double));

    buffer2->destroy_function   = buffer->destroy_function;
    buffer2->destroy_data       = buffer->destroy_data;
    buffer2->meta               = fa_copy(buffer->meta);
    fa_buffer_set_meta(buffer, fa_string("sample-rate"), fa_from_int32(new_rate));

    return buffer2;
}
Exemplo n.º 4
0
    fa_with_faudio() {
        fa_io_filter_t filter = fa_io_create_test_filter();
        fa_io_sink_t sink = (fa_io_sink_t) filter;


        for (int i = 0; i < 3; ++i) {
            fa_buffer_t buf = fa_buffer_create(3);
            fa_buffer_set(buf, 0, 1);
            fa_buffer_set(buf, 0, 2);
            fa_buffer_set(buf, 0, 3);
            fa_io_push(sink, buf);
        }

        // fa_io_run(
        //     fa_io_standard_in(),
        //     fa_io_coapply(fa_io_split(sink), fa_io_standard_out())
        //         );
    }
Exemplo n.º 5
0
fa_pair_t fa_buffer_read_audio(fa_string_t path)
{
    int             channels;
    buffer_t        buffer;

    SNDFILE         *file;
    SF_INFO         info;
    info.format     = 0;

    {
        char *cpath     = fa_string_to_utf8(path);
        //file            = sf_open(cpath, SFM_READ, &info);

//        if (sf_error(file)) {
//            char err[100];
//            snprintf(err, 100, "Could not read audio file '%s'", cpath);
//            return (pair_t) fa_error_create_simple(error, string(err), string("Doremir.Buffer"));
//        }

        inform(string_append(string("Reading "), path));
    }
    {
        size_t bufSize  = info.frames * info.channels * sizeof(double);
        buffer          = fa_buffer_create(bufSize);
        double *raw     = fa_buffer_unsafe_address(buffer);

        //sf_count_t sz   = sf_read_double(file, raw, bufSize / sizeof(double));
        //buffer          = fa_buffer_dresize(sz * sizeof(double), buffer);

        if (info.channels == 1) {
            channels = 1;
        } else if (info.channels == 2) {
            channels = 2;
        } else {
            buffer_fatal("Unknown buffer type", info.channels);
        }

//        if (sf_close(file)) {
//            return (pair_t) fa_error_create_simple(error, string("Could not close"), string("Doremir.Buffer"));
//        }
    }
    return pair(i32(channels), buffer);
}