使用WAVE文件发生故障

时间:2016-06-14 07:39:01

标签: c++ file

我使用此library来阅读wave文件的样本,特别是this method

unsigned int ReadDoublesNI(double** samples, unsigned int offs, unsigned int nsamples, int nchdest = 0)

我打开的Grv Kick Acoustic 01.wav文件可以下载here

似乎使用此代码正确加载文件(文件属性正确,例如m_bpsm_nchsize):

WaveReader mWaveReader = WaveReader("D:\\Google Drive\\Samples\\Grv Kick Acoustic 01.wav");
const unsigned int size = mWaveReader.GetSize();
vector<double> samplesContainer(size);
double* mono[1] = { samplesContainer.data() };
mWaveReader.ReadDoublesNI(mono, 0, size, 0);

但是一旦它在ReadDoublesNI上达到fread,它就跳到函数的结尾,结束for语句并立即返回。所以我无法从文件中读取任何样本。

我哪里错了?

1 个答案:

答案 0 :(得分:2)

您当前的代码会在WaveReader构造函数调用中打开该文件:

WaveReader mWaveReader = WaveReader("D:\\Google Drive\\Samples\\Grv Kick Acoustic 01.wav");

此构造函数调用Open,但不处理此调用失败的情况。

相反,调用默认构造函数,然后显式调用Open,并自己处理错误情况:

WaveReader mWaveReader = WaveReader();
if (!mWaveReader.Open("D:\\Google Drive\\Samples\\Grv Kick Acoustic 01.wav")) {
    // something went wrong - handle this appropriately, and don't use the mWaveReader object
}

这至少会处理文件未正确打开的情况。

相关问题