2016-05-15 83 views
0

我不断收到在主题(无附加信息)提到的错误时,我想在下面的代码使用libsndfile库中打开Qt中的文件:错误:主要格式为0(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;