如何在C ++中将WAV文件转换为RAW音频?

时间:2016-08-06 21:31:11

标签: c++ audio wav binary-data

我已经搜索了几个小时这个问题的答案。我已经删除了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]的并排比较。

sample1

由于某种原因,下一个会扭曲右声道,并使文件的长度加倍。它也是立体声波文件,16位PCM,44.1k Hz采样率。 enter image description here

第三个完全扭曲,长度比前一个增加得更多。

enter image description here

为什么它在第一个文件上有效,而在其他文件格式完全相同时(16位,44.1k Hz采样率,2个通道)?

0 个答案:

没有答案