// Copyright (c) 2012-2017 VideoStitch SAS// Copyright (c) 2018 stitchEm//// Asynchronous rate conveter//// Wrapper of Audio::Samples and Resampler to read from different audio reader// Convert everything in the internal format of AudioBlock#include "asrc.hpp"namespaceVideoStitch{namespaceAudio{AudioAsyncReader::AudioAsyncReader(std::shared_ptr<Input::AudioReader>audioreader,constBlockSizebs,constSamplingRateinternalSr):delegate(audioreader),internalSamplingRate(static_cast<double>(Audio::getIntFromSamplingRate(internalSr))){Input::AudioReader::Specspec=delegate->getSpec();size_tblockSizeIn=static_cast<size_t>(getDblFromBlockSize(bs)*getDblFromSamplingRate(spec.sampleRate)/getDblFromSamplingRate(internalSr));rsp=AudioResampler::create(spec.sampleRate,spec.sampleDepth,internalSr,SamplingDepth::DBL_P,spec.layout,blockSizeIn);}AudioAsyncReader*AudioAsyncReader::create(std::shared_ptr<Input::AudioReader>audioreader,constBlockSizebs,constSamplingRateinternalSr){returnnewAudioAsyncReader(audioreader,bs,internalSr);}AudioAsyncReader::~AudioAsyncReader(){deletersp;}voidAudioAsyncReader::resample(constSamples&samplesIn,AudioBlock&blockOut){rsp->resample(samplesIn,blockOut);}}// namespace Audio}// namespace VideoStitch