fa_buffer_t fa_buffer_create(size_t size) { fa_ptr_t buffer_impl(fa_id_t interface); buffer_t buffer = fa_new(buffer); buffer->impl = &buffer_impl; buffer->size = size; buffer->data = fa_malloc(size); buffer->destroy_function = default_destroy; buffer->destroy_data = NULL; memset(buffer->data, 0, buffer->size); if (!buffer->data) { if (errno == ENOMEM) { buffer_fatal("Out of memory", errno); } else { buffer_fatal("Unknown", errno); } } return buffer; }
fa_buffer_t fa_buffer_create(size_t size) { fa_ptr_t buffer_impl(fa_id_t interface); fa_buffer_t buffer = fa_new(buffer); buffer->impl = &buffer_impl; buffer->size = size; buffer->data = fa_malloc(size); buffer->ref_count = fa_atomic(); buffer->marked_for_destruction = fa_atomic(); //fa_slog_info("fa_buffer_create ", fa_i32(size)); buffer->destroy_function = default_destroy; buffer->destroy_data = NULL; buffer->meta = fa_map_empty(); fa_map_set_value_destructor(buffer->meta, fa_destroy); memset(buffer->data, 0, buffer->size); if (!buffer->data) { if (errno == ENOMEM) { buffer_fatal("Out of memory", errno); } else { buffer_fatal("Unknown", errno); } } buffer_warn(fa_string("Buffer created")); return buffer; }
inline static signal_t new_signal(int tag) { fa_ptr_t signal_impl(fa_id_t interface); signal_t s = fa_new(signal); s->impl = &signal_impl; s->tag = tag; return s; }
fa_pair_t new_pair(fa_ptr_t first, fa_ptr_t second) { fa_ptr_t pair_impl(fa_id_t interface); fa_pair_t pair = fa_new(pair); pair->impl = &pair_impl; pair->values[0] = first; pair->values[1] = second; gPairCount++; return pair; }
fa_buffer_t fa_buffer_wrap(fa_ptr_t pointer, size_t size, fa_unary_t destroy_function, fa_ptr_t destroy_data) { fa_ptr_t buffer_impl(fa_id_t interface); buffer_t b = fa_new(buffer); b->impl = &buffer_impl; b->size = size; b->data = pointer; b->destroy_function = destroy_function; b->destroy_data = destroy_data; return b; }
inline static device_t new_device(session_t session, native_index_t index) { if (index == paNoDevice) { return NULL; } device_t device = fa_new(audio_device); device->impl = &audio_device_impl; const PaDeviceInfo *info = Pa_GetDeviceInfo(index); const PaHostApiInfo *host_info = Pa_GetHostApiInfo(info->hostApi); device->index = index; device->session = session; device->name = string((char *) info->name); // const cast device->host_name = string((char *) host_info->name); // device->muted = false; // device->volume = 1.0; return device; }
fa_buffer_t fa_buffer_wrap(fa_ptr_t pointer, size_t size, fa_unary_t destroy_function, fa_ptr_t destroy_data) { fa_ptr_t buffer_impl(fa_id_t interface); fa_buffer_t b = fa_new(buffer); b->impl = &buffer_impl; b->size = size; b->data = pointer; b->ref_count = fa_atomic(); b->marked_for_destruction = fa_atomic(); b->destroy_function = destroy_function; b->destroy_data = destroy_data; b->meta = fa_map_empty(); buffer_warn(fa_string("Buffer wrapped")); return b; }
inline static stream_t new_stream(device_t input, device_t output, double sample_rate, long max_buffer_size) { stream_t stream = fa_new(audio_stream); stream->impl = &audio_stream_impl; stream->input = input; stream->output = output; stream->input_channels = fa_audio_input_channels(input); stream->output_channels = fa_audio_output_channels(output); stream->sample_rate = sample_rate; stream->max_buffer_size = max_buffer_size; stream->signal_count = 0; stream->sample_count = 0; stream->in_controls = atomic_queue(); stream->controls = priority_queue(); return stream; }
fa_buffer_t fa_buffer_resize(size_t size, fa_buffer_t buffer) { fa_ptr_t buffer_impl(fa_id_t interface); buffer_t copy = fa_new(buffer); copy->impl = &buffer_impl; copy->size = size; copy->data = fa_malloc(size); copy->destroy_function = buffer->destroy_function; copy->destroy_data = buffer->destroy_data; if (!copy->data) { if (errno == ENOMEM) { buffer_fatal("Out of memory", errno); } else { buffer_fatal("Unknown", errno); } } copy->data = memcpy(copy->data, buffer->data, size); return copy; }
inline static session_t new_session() { session_t session = fa_new(audio_session); session->impl = &audio_session_impl; return session; }
static void setup() { fp = fopen("scanner.in", "r"); in = buffered_input_stream_new(fp, DEFAULT_BUFFER_SIZE); m = fa_new("test", NUMBER_STATES); }