@@ -388,7 +388,17 @@ class ResampleStreamT : public ReformatBaseStream {
388388
389389 bool begin () {
390390 setupReader ();
391- setStepSize (cfg.step_size );
391+ if (cfg.step_size ) {
392+ setStepSize (cfg.step_size );
393+ } else if (cfg.to_sample_rate > 0 ) {
394+ // calculate step size from sample rate
395+ cfg.step_size = static_cast <float >(cfg.sample_rate ) /
396+ static_cast <float >(cfg.to_sample_rate );
397+ setStepSize (cfg.step_size );
398+ } else {
399+ cfg.step_size = 1 .0f ;
400+ setStepSize (1 .0f );
401+ }
392402 return true ;
393403 }
394404
@@ -415,7 +425,9 @@ class ResampleStreamT : public ReformatBaseStream {
415425 */
416426 AudioInfo audioInfoOut () override {
417427 AudioInfo out = audioInfo ();
418- if (cfg.step_size != 1 .0f ) {
428+ if (cfg.to_sample_rate > 0 ) {
429+ out.sample_rate = cfg.to_sample_rate ;
430+ } else if (cfg.step_size != 1 .0f ) {
419431 out.sample_rate = out.sample_rate / cfg.step_size ;
420432 }
421433 return out;
@@ -453,6 +465,13 @@ class ResampleStreamT : public ReformatBaseStream {
453465 AudioStream::setAudioInfo (newInfo);
454466 _resampler.setChannels (newInfo.channels );
455467 cfg.copyFrom (newInfo);
468+ // if target sample rate is set, calculate step size
469+ if (cfg.to_sample_rate > 0 ) {
470+ // calculate step size from sample rate
471+ cfg.step_size = static_cast <float >(cfg.sample_rate ) /
472+ static_cast <float >(cfg.to_sample_rate );
473+ setStepSize (cfg.step_size );
474+ }
456475 }
457476
458477 float getByteFactor () override { return 1 .0f / cfg.step_size ; }
0 commit comments