int dumb_source_init(audio_source *src, const char* file, int channels, int freq, int resampler) { dumb_source *local = malloc(sizeof(dumb_source)); // Load file and initialize renderer char *ext = strrchr(file, '.') + 1; if(strcasecmp(ext, "psm") == 0) { local->data = dumb_load_psm(file, 0); } else if(strcasecmp(ext, "s3m") == 0) { local->data = dumb_load_s3m(file); } else if(strcasecmp(ext, "mod") == 0) { local->data = dumb_load_mod(file, 0); } else if(strcasecmp(ext, "it") == 0) { local->data = dumb_load_it(file); } else if(strcasecmp(ext, "xm") == 0) { local->data = dumb_load_xm(file); } else { PERROR("Libdumb Source: No suitable module decoder found."); goto error_0; } if(!local->data) { PERROR("Libdumb Source: Error while loading module file!"); goto error_0; } local->renderer = duh_start_sigrenderer(local->data, 0, channels, 0); local->vlen = duh_get_length(local->data); local->vpos = 0; local->sig_samples = NULL; local->sig_samples_size = 0; // Set resampler here dumb_it_set_resampling_quality(duh_get_it_sigrenderer(local->renderer), resampler); // Audio information source_set_frequency(src, freq); source_set_bytes(src, 2); source_set_channels(src, channels); source_set_resampler(src, resampler); // Set callbacks source_set_userdata(src, local); source_set_update_cb(src, dumb_source_update); source_set_close_cb(src, dumb_source_close); // Some debug info DEBUG("Libdumb Source: Loaded file '%s' succesfully.", file); // All done return 0; error_0: free(local); return 1; }
int vorbis_source_init(audio_source *src, const char* file) { vorbis_source *local; int ret; // Init local struct local = malloc(sizeof(vorbis_source)); // Try to open up the audio file ret = ov_fopen(file, &local->src_file); if(ret != 0) { PERROR("Vorbis Source: File '%s' could not be opened: ", file, vorbis_text_error(ret)); goto error_1; } // Get file information vorbis_info *vi = ov_info(&local->src_file, -1); char **comment_ptr = ov_comment(&local->src_file, -1)->user_comments; // Audio information source_set_frequency(src, vi->rate); source_set_bytes(src, 2); source_set_channels(src, vi->channels); // Set callbacks source_set_userdata(src, local); source_set_update_cb(src, vorbis_source_update); source_set_close_cb(src, vorbis_source_close); // Some debug info DEBUG("Vorbis Source: Loaded file '%s' succesfully (%d Hz, %d ch).", file, vi->rate, vi->channels); while(*comment_ptr) { DEBUG(" * Comment: %s", *comment_ptr); ++comment_ptr; } // All done return 0; error_1: free(local); return 1; }
int raw_source_init(audio_source *src, char* buffer, int len) { raw_source *local = malloc(sizeof(raw_source)); // Set data local->pos = 0; local->len = len; local->buf = buffer; // Audio information source_set_frequency(src, 8000); source_set_bytes(src, 1); source_set_channels(src, 1); // Set callbacks source_set_userdata(src, local); source_set_update_cb(src, raw_source_update); source_set_close_cb(src, raw_source_close); // Some debug info /*DEBUG("Raw Source: Loaded raw pcm sample succesfully.");*/ // All done return 0; }