fa_pair_t fa_signal_to_tree(fa_signal_t signal) { switch (signal->tag) { case time_signal: return pair(string("time"), empty()); case random_signal: return pair(string("random"), empty()); case constant_signal: return pair( fa_string_to_string( fa_from_double( constant_get(signal, value))), empty()); case lift_signal: return pair( lift_get(signal, name), list(fa_signal_to_tree(lift_get(signal, a)))); case lift2_signal: return pair( lift_get(signal, name), list( fa_signal_to_tree(lift2_get(signal, a)), fa_signal_to_tree(lift2_get(signal, b)))); case input_signal: return pair( concat( string("input "), fa_string_show(fa_from_int32(input_get(signal, c)))), empty()); case output_signal: return pair( concat( string("output "), fa_string_show(fa_from_int32(output_get(signal, c))), string("[-"), fa_string_show(fa_from_int32(output_get(signal, n))), string("]") ), list(fa_signal_to_tree(output_get(signal, a)))); default: assert(false); } }
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; }