bug: tweak loop delay to fit music rate
This commit is contained in:
@@ -209,7 +209,8 @@ void PlaybackEngine::musicFeedThread() {
|
||||
|
||||
int* channel_map = (int*) malloc(num_ch_out * sizeof(int));
|
||||
|
||||
int loop_delay_ms = 1000 * buf_size_samples / playbackRate.load();
|
||||
// initial guess, as long as we do not have a music file (otherwise we should divide by mp3->rate)
|
||||
size_t loop_delay_us = 1000000 * buf_size_samples / playbackRate.load();
|
||||
|
||||
int idebug = 0;
|
||||
|
||||
@@ -241,8 +242,8 @@ void PlaybackEngine::musicFeedThread() {
|
||||
// (is it like double-buffering implemented in 'stretcher'?)
|
||||
|
||||
if (num_samples == 0) {
|
||||
//LOGD("waiting for getSamplesRequired()");
|
||||
std::this_thread::sleep_for(std::chrono::milliseconds(loop_delay_ms));
|
||||
LOGD("waiting %d us for getSamplesRequired()", loop_delay_us);
|
||||
std::this_thread::sleep_for(std::chrono::microseconds(loop_delay_us));
|
||||
continue;
|
||||
}
|
||||
|
||||
@@ -252,6 +253,7 @@ void PlaybackEngine::musicFeedThread() {
|
||||
}
|
||||
|
||||
if (!haveMusicFile.load()) {
|
||||
loop_delay_us = 1000000 * num_samples / playbackRate.load();
|
||||
if(idebug++ < 10) {
|
||||
LOGI("feed %d silence samples", num_samples);
|
||||
// 1024, 512, 512
|
||||
@@ -263,6 +265,7 @@ void PlaybackEngine::musicFeedThread() {
|
||||
}
|
||||
|
||||
if(idebug++ < 10) {
|
||||
loop_delay_us = 1000000 * num_samples / musicFile->rate;
|
||||
LOGI("feed %d music samples", num_samples);
|
||||
// feed 1024 music samples
|
||||
// => stretcher is asking for 1024 = getSamplesRequired()
|
||||
@@ -275,14 +278,17 @@ void PlaybackEngine::musicFeedThread() {
|
||||
musicFile->offset = 0; // unused here
|
||||
if (err != MPG123_OK && err != MPG123_DONE) {
|
||||
// error!
|
||||
LOGE("mpg123_read() err=%d done=%d", err, done);
|
||||
LOGE("error reading mp3 file: mpg123_read() err=%d done=%d", err, done);
|
||||
// next iteration will play silence
|
||||
closeMusicFile();
|
||||
stretcher.setTimeRatio(1.0); // buffer size for playing silence is computed from 'playbackRate', so reset timeRatio
|
||||
continue;
|
||||
}
|
||||
if(err == MPG123_DONE) {
|
||||
// next iteration will play silence
|
||||
LOGI("finished reading mp3 file (MPG123_DONE)");
|
||||
closeMusicFile();
|
||||
stretcher.setTimeRatio(1.0); // buffer size for playing silence is computed from 'playbackRate', so reset timeRatio
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user