示例#1
0
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;
}
示例#2
0
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;
}
示例#3
0
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);
}