int MYSTATICOGG::play_from(int position) { if (use_extra_sound_offset) extraOffset = ((16384 / (alogg_get_wave_is_stereo_ogg(tune) ? 2 : 1)) * 1000) / alogg_get_wave_freq_ogg(tune); else extraOffset = 0; if (alogg_play_ex_ogg(tune, 16384, vol, panning, 1000, repeat) != ALOGG_OK) { destroy(); delete this; return 0; } last_ms_offs = position; last_but_one = position; last_but_one_but_one = position; if (position > 0) alogg_seek_abs_msecs_ogg(tune, position); if (!psp_audio_multithreaded) poll(); return 1; }
int alogg_play_ogg_ts(ALOGG_OGG *ogg, int buffer_len, int vol, int pan, int speed) { int ret; /* start playing Ogg at normal speed */ ret = alogg_play_ex_ogg(ogg, buffer_len, vol, pan, 1000, 0); if (ret != ALOGG_OK) return ret; /* don't set up time stretching if we are playing at normal speed */ if (speed == 1000) return ALOGG_OK; ogg->time_stretch = 1; ogg->time_stretch_buffer_samples = (buffer_len / (ogg->stereo ? 2 : 1)) / 2; ogg->time_stretch_state = rubberband_new(ogg->freq, ogg->stereo ? 2 : 1, RubberBandOptionProcessRealTime | RubberBandOptionThreadingNever, 1000.0 / (float)speed, 1.0); rubberband_set_max_process_size(ogg->time_stretch_state, ogg->time_stretch_buffer_samples); ogg->time_stretch_buffer[0] = malloc(sizeof(float) * ogg->time_stretch_buffer_samples); if (ogg->stereo) ogg->time_stretch_buffer[1] = malloc(sizeof(float) * ogg->time_stretch_buffer_samples); else ogg->time_stretch_buffer[1] = NULL; return ALOGG_OK; }
int alogg_play_ogg(ALOGG_OGG *ogg, int buffer_len, int vol, int pan) { return alogg_play_ex_ogg(ogg, buffer_len, vol, pan, 1000, FALSE); }