由于sndfile库使用不当导致wav文件生成错误

时间:2016-07-09 17:44:57

标签: c++ qt audio wav libsndfile

comparison即使我保存所有样本的文本文件包含(可能)正确的样本,使用同一组数据生成的声音文件仅包含噪声。负责编写wav文件的代码:

void Filter::generateFrequencySound()
{
    SNDFILE * outfile;
    SF_INFO sfinfo;// = {0};

    memset (&sfinfo, 0, sizeof (sfinfo)) ;

    //preparing output file
    sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;
    sfinfo.channels = 1;
    sfinfo.samplerate = 44100;

    std::cout << "Trying to save samples to a file" << std::endl;

    const char* path = "FilterInFrequency.wav";

    outfile = sf_open(path, SFM_WRITE, &sfinfo);

    if(!(outfile))
    {
        std::cout << "Failed to create output file" << std::endl;
        sf_perror(outfile);
        return;
    }

    unsigned long savedSamples = sf_write_double( outfile,
                                                  outputOfFrequencyFiltration,
                                                  bufferSize);

    if(savedSamples > bufferSize)
    {
        std::cout << "Failed to save all samples into outflie. Number of sampels " << savedSamples << std::endl;
        sf_close(outfile);
        return;
    }

    sf_close(outfile);

    QSound::play("FilterInFrequency.wav");

}

负责将样本写入文本文件的代码:

 QFile file("finalResult_1.txt");

    if(!file.open(QIODevice::WriteOnly))
    {
        std::cout << "something went wrong";
        exit(16);
    }

    QTextStream outstream(&file);

    for(unsigned long i = 0; i < bufferSize; i++)
    {
        QString line = QString::number(outputOfFrequencyFiltration[i]);
        outstream << line << "\n";
    }

    file.close();

wav和绘制文本文件之间的差异比较可以在附图中看到。这些图是使用相同数量的数据创建的(约20500个样本 - 输出文件的10%)。两个图的文件大小相同。

可能出现差异的原因是什么?

textfile wavfile

0 个答案:

没有答案