错误:主要格式为 0(libsndfile,Qt)

Posted

技术标签:

【中文标题】错误:主要格式为 0(libsndfile,Qt)【英文标题】:Error : major format is 0 (libsndfile, Qt) 【发布时间】:2016-05-15 16:07:55 【问题描述】:

当我尝试使用以下代码中的 libsndfile 库在 Qt 中打开文件时,我不断收到主题中提到的错误(没有其他消息):

    SNDFILE * outfile;
    SF_INFO sfinfo;

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

    memset( &sfinfo, 0, sizeof(SF_INFO));
    const char* path = "RainFilter.wav";

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

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

这似乎是 sfinfo 的格式属性的主要部分的问题。我已经尝试过大多数其他格式,包括数值,例如:

sfinfo.format = 0x0B0000 | 0x0006;

我该怎么办?是库链接问题,环境问题还是代码不正确?在这种情况下,路径无关紧要,我尝试指向不同的目录,但问题仍然存在。

【问题讨论】:

【参考方案1】:

将调用移至

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

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

之前分配给sfinfo的元素。更好的是,删除对 memset 的调用,并正确地对结构进行零初始化:

    SFINFO sfinfo = 0;
    sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;
    sfinfo.channels = 1;
    sfinfo.samplerate = 44100;

【讨论】:

以上是关于错误:主要格式为 0(libsndfile,Qt)的主要内容,如果未能解决你的问题,请参考以下文章

用 Qt 的 QAudioOutput 类播放 WAV 音频文件(使用了libsndfile外部库)

为 ARM 架构构建 libsndfile 库

使用 VS2010 的 libsndfile 奇怪行为

使用 libsndfile 为 MATLAB 编写多声道音频

使用 sf_open_fd() 时,libsndfile 总是出现段错误

如何从 MATLAB 的 audioread 等 libsndfile 库中读取数组格式的音频文件