Merge pull request #8522 from NNesh/mus

Fix AudioPlayer bugs with OGG
This commit is contained in:
Rémi Verschelde 2017-04-26 08:13:30 +02:00 committed by GitHub
commit cdf0fbd8e8

View file

@ -42,6 +42,7 @@ void AudioStreamPlaybackOGGVorbis::_mix_internal(AudioFrame *p_buffer, int p_fra
int mixed = stb_vorbis_get_samples_float_interleaved(ogg_stream, 2, (float *)p_buffer, todo * 2); int mixed = stb_vorbis_get_samples_float_interleaved(ogg_stream, 2, (float *)p_buffer, todo * 2);
todo -= mixed; todo -= mixed;
frames_mixed += mixed;
if (todo) { if (todo) {
//end of file! //end of file!
@ -66,8 +67,8 @@ float AudioStreamPlaybackOGGVorbis::get_stream_sampling_rate() {
void AudioStreamPlaybackOGGVorbis::start(float p_from_pos) { void AudioStreamPlaybackOGGVorbis::start(float p_from_pos) {
seek_pos(p_from_pos);
active = true; active = true;
seek_pos(p_from_pos);
loops = 0; loops = 0;
_begin_resample(); _begin_resample();
} }
@ -95,7 +96,12 @@ void AudioStreamPlaybackOGGVorbis::seek_pos(float p_time) {
if (!active) if (!active)
return; return;
stb_vorbis_seek(ogg_stream, uint32_t(p_time * vorbis_stream->sample_rate)); if (p_time >= get_length()) {
p_time = 0;
}
frames_mixed = uint32_t(vorbis_stream->sample_rate * p_time);
stb_vorbis_seek(ogg_stream, frames_mixed);
} }
float AudioStreamPlaybackOGGVorbis::get_length() const { float AudioStreamPlaybackOGGVorbis::get_length() const {