Skip to content

Commit 22ae5c8

Browse files
committed
ResampleStreamT: logic for to_sample_rate
1 parent 8b4b745 commit 22ae5c8

File tree

1 file changed

+21
-2
lines changed

1 file changed

+21
-2
lines changed

src/AudioTools/CoreAudio/ResampleStreamT.h

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)