2016-05-15 60 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;