本文整理汇总了C++中AudioDecoder::getChannels方法的典型用法代码示例。如果您正苦于以下问题:C++ AudioDecoder::getChannels方法的具体用法?C++ AudioDecoder::getChannels怎么用?C++ AudioDecoder::getChannels使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类AudioDecoder
的用法示例。
在下文中一共展示了AudioDecoder::getChannels方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: sbsms_convert
bool sbsms_convert(const char *filenameIn, const char *filenameOut, bool bAnalyze, bool bSynthesize, progress_cb progressCB, void *data, float rate0, float rate1, float pitch0, float pitch1, float volume)
{
bool status = true;
int srOut = 44100;
long blockSize;
int channels;
SampleCountType samplesIn;
int srIn;
SampleCountType samplesToOutput;
SampleCountType samplesToInput;
bool bRead = false;
bool bWrite = false;
audio *abuf = NULL;
float *fbuf = NULL;
SBSMSInterface *iface = NULL;
SBSMSInterface *ifacePre = NULL;
SBSMS *sbsms = NULL;
PcmWriter *writer = NULL;
AudioDecoder *decoder = NULL;
AudioDecoder *decoderPre = NULL;
SBSMSQuality quality(&SBSMSQualityStandard);
Slide rateSlide(SlideLinearInputRate,rate0,rate1);
Slide pitchSlide(SlideLinearOutputRate,pitch0,pitch1);
if(bAnalyze) {
float preProgress = 0.0f;
decoder = import(filenameIn);
if(!decoder) {
printf("File: %s cannot be opened\n",filenameIn);
exit(-1);
}
srIn = decoder->getSampleRate();
channels = decoder->getChannels();
samplesIn = decoder->getFrames();
samplesToInput = (SampleCountType) (samplesIn*(float)srOut/(float)srIn);
float pitch = (srOut == srIn?1.0f:(float)srOut / (float)srIn);
iface = new SBSMSInterfaceDecoder(&rateSlide,&pitchSlide,false,
channels,samplesToInput,0,&quality,decoder,pitch);
sbsms = new SBSMS(channels,&quality,bSynthesize);
samplesToOutput = iface->getSamplesToOutput();
if(bSynthesize) {
blockSize = quality.getFrameSize();
fbuf = (float*)calloc(blockSize*channels,sizeof(float));
abuf = (audio*)calloc(blockSize,sizeof(audio));
writer = new PcmWriter(filenameOut,samplesToOutput,srOut,channels);
if(writer->isError()) {
printf("File: %s cannot be opened\n",filenameOut);
status = false;
goto cleanup;
}
SampleCountType pos = 0;
long ret = -1;
while(pos<samplesToOutput && ret) {
long lastPercent=0;
ret = sbsms->read(iface,abuf,blockSize);
if(pos+ret > samplesToOutput) {
ret = (long)(samplesToOutput - pos);
}
audio_convert_from(fbuf,0,abuf,0,ret,channels);
for(int k=0;k<ret*channels;k++) {
fbuf[k] *= volume;
}
if(ret) writer->write(fbuf, ret);
pos += ret;
float progress = (float)pos / (float)samplesToOutput;
progressCB(progress,"Progress",data);
}
writer->close();
}
}
cleanup:
if(decoderPre) delete decoderPre;
if(decoder) delete decoder;
if(fbuf) free(fbuf);
if(abuf) free(abuf);
if(sbsms) delete sbsms;
if(iface) delete iface;
if(ifacePre) delete ifacePre;
if(writer) delete writer;
return status;
}