Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
读取16位wav文件并像Matlab那样对其进行规范化 Matlab有一个函数,我试图在C++中复制,但只是为了wav文件。我可以读取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; } 矢量音频信号; std::basic_ifstream inputStream(path.c_str(),std::ifstream::binary); 如果(输入流){ //获取文件的长度: inputStream.seekg(0,inputStream.end); int fileLength=inputStream.tellg(); //返回到流的开始 inputStream.seekg(0,inputStream.beg); uint8_t*buffer=新的uint8_t[fileLength]; 读取((uint8_t*)缓冲区,文件长度); inputStream.close(); 常量int wavHeaderSize=44; 对于(大小i=wavHeaderSize;i_C++_Matlab_Audio - Fatal编程技术网

读取16位wav文件并像Matlab那样对其进行规范化 Matlab有一个函数,我试图在C++中复制,但只是为了wav文件。我可以读取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; } 矢量音频信号; std::basic_ifstream inputStream(path.c_str(),std::ifstream::binary); 如果(输入流){ //获取文件的长度: inputStream.seekg(0,inputStream.end); int fileLength=inputStream.tellg(); //返回到流的开始 inputStream.seekg(0,inputStream.beg); uint8_t*buffer=新的uint8_t[fileLength]; 读取((uint8_t*)缓冲区,文件长度); inputStream.close(); 常量int wavHeaderSize=44; 对于(大小i=wavHeaderSize;i

读取16位wav文件并像Matlab那样对其进行规范化 Matlab有一个函数,我试图在C++中复制,但只是为了wav文件。我可以读取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; } 矢量音频信号; std::basic_ifstream inputStream(path.c_str(),std::ifstream::binary); 如果(输入流){ //获取文件的长度: inputStream.seekg(0,inputStream.end); int fileLength=inputStream.tellg(); //返回到流的开始 inputStream.seekg(0,inputStream.beg); uint8_t*buffer=新的uint8_t[fileLength]; 读取((uint8_t*)缓冲区,文件长度); inputStream.close(); 常量int wavHeaderSize=44; 对于(大小i=wavHeaderSize;i,c++,matlab,audio,C++,Matlab,Audio,样本是在-32768到32767范围内的16位,您希望它们缩放到-1.0到1.0。方法是除以32768.0(-32768/32768.0==-132767/32768.0略小于1) 在从字节到int的转换中,您有正确的基本想法,因此我怀疑某些强制转换可能会解决您的问题。请尝试在左移之前将单个字节强制转换为int,以防止可能的溢出。将其分解为多个语句,并在调试器中查看 int c = ((int)buffer[i+1]) << 8 | buffer[i]; int c=((int)b

样本是在-32768到32767范围内的16位,您希望它们缩放到-1.0到1.0。方法是除以32768.0(-32768/32768.0==-132767/32768.0略小于1)

在从字节到int的转换中,您有正确的基本想法,因此我怀疑某些强制转换可能会解决您的问题。请尝试在左移之前将单个字节强制转换为int,以防止可能的溢出。将其分解为多个语句,并在调试器中查看

int c = ((int)buffer[i+1]) << 8 | buffer[i];

int c=((int)buffer[i+1])样本是在-32768到32767范围内的16位,您希望它们缩放到-1.0到1.0。方法是除以32768.0(-32768/32768.0==-132767/32768.0略小于1)

在从字节到int的转换中,您有正确的基本想法,因此我怀疑某些强制转换可能会解决您的问题。请尝试在左移之前将单个字节强制转换为int,以防止可能的溢出。将其分解为多个语句,并在调试器中查看

int c = ((int)buffer[i+1]) << 8 | buffer[i];

int c=((int)buffer[i+1])样本是在-32768到32767范围内的16位,您希望它们缩放到-1.0到1.0。方法是除以32768.0(-32768/32768.0==-132767/32768.0略小于1)

在从字节到int的转换中,您有正确的基本想法,因此我怀疑某些强制转换可能会解决您的问题。请尝试在左移之前将单个字节强制转换为int,以防止可能的溢出。将其分解为多个语句,并在调试器中查看

int c = ((int)buffer[i+1]) << 8 | buffer[i];

int c=((int)buffer[i+1])样本是在-32768到32767范围内的16位,您希望它们缩放到-1.0到1.0。方法是除以32768.0(-32768/32768.0==-132767/32768.0略小于1)

在从字节到int的转换中,您有正确的基本想法,因此我怀疑某些强制转换可能会解决您的问题。请尝试在左移之前将单个字节强制转换为int,以防止可能的溢出。将其分解为多个语句,并在调试器中查看

int c = ((int)buffer[i+1]) << 8 | buffer[i];

int c=((int)buffer[i+1])我不知道为什么我没有想到。我唯一需要做的更改是:rawAudioSignal.push_back(c/32768.0);非常感谢你的帮助。我不知道为什么我没有想到。我唯一需要做的更改是:rawAudioSignal.push_back(c/32768.0);非常感谢您的帮助。我不知道为什么我没有想到。我唯一要做的更改是:rawAudioSignal.push_back(c/32768.0);非常感谢您的帮助。我不知道为什么我没有想到。我唯一要做的更改是:rawAudioSignal.push_back(c/32768.0)非常感谢你的帮助。