0
Matlab有一個叫做audioread的函數,我試圖在C++中重現,但僅僅用於wav文件。我可以讀取一個wav文件並從中獲取double類型的值,但這些值似乎與Matlab函數返回的值不同。我的情況與this guy非常相似。我讀文件代碼:讀取一個16位的wav文件,並將其規範化爲Matlab
vector<double> rawAudioSignal;
std::basic_ifstream<uint8_t> inputStream(path.c_str(), std::ifstream::binary);
if (inputStream) {
// get length of file:
inputStream.seekg(0, inputStream.end);
int fileLength = inputStream.tellg();
// go back to start of stream
inputStream.seekg(0, inputStream.beg);
uint8_t *buffer = new uint8_t[fileLength];
inputStream.read((uint8_t *)buffer, fileLength);
inputStream.close();
const int wavHeaderSize = 44;
for (size_t i = wavHeaderSize; i < fileLength; i += 2)
{
// removes those huge 65000+ value spikes
int c = ((char)buffer[i + 1]) << 8 |
((unsigned char)buffer[i]);
// failed attempts
//int c = (buffer[i + 1] << 8 | buffer[i]); // little endian
//int c = (buffer[i] << 8 | buffer[i + 1]); // big endian
// failed normalizations
//rawAudioSignal.push_back((c/32768.0) - 1);
//rawAudioSignal.push_back(((c - 32768.0)/32768.0));
rawAudioSignal.push_back(c);
}
delete[] buffer;
}
所有rawAudioSignal
值都約-5到5,但在Matlab整數,編號是從-1到1,其中該特定的最低值Matlab的文件是-0.2511,最高值是0.3846。我不知道Matlab函數是正常化的還是正常化的。任何幫助表示讚賞。
我不知道爲什麼沒有發生在我身上。我必須做的唯一改變如下:rawAudioSignal.push_back(c/32768.0);非常感謝您的幫助。 –