我已经搜索了几个小时这个问题的答案。我已经删除了44字节的标头,并使用ofstream传输了数据。输入立体声WAV文件是16位PCM,采样率为44.1k Hz。
int szm;
char* buff = new char[szm];
ifstream ssn(f_infile,ios::binary);
ssn.seekg(0,ssn.end);
szm = ssn.tellg();
ssn.seekg(0,ssn.beg);
ssn.read(buff,szm);
ssn.close();
ofstream sso(f_outfile,ios::binary);
for(int i =0; i < szm; i++)
{
if(i > 44)
{
word_w(file, buff[i],1);
word_w(file, 0-(buff[i]), 1);
}
}
sso.close();
file.close();
我得到了文件的大小,并将数据读入缓冲区。我知道所有的RAW数据文件都是二进制数据,我认为这种简单的技术可行。但是,我的结果好坏参半。
这第一个就像一个魅力。这是我想转换的原始样本。它是原始WAV文件[top]和以44.1k Hz输入Audacity的原始数据[bottom]的并排比较。
由于某种原因,下一个会扭曲右声道,并使文件的长度加倍。它也是立体声波文件,16位PCM,44.1k Hz采样率。
第三个完全扭曲,长度比前一个增加得更多。
为什么它在第一个文件上有效,而在其他文件格式完全相同时(16位,44.1k Hz采样率,2个通道)?