1

HD の wav ファイルに短いバッファを書き込めません。いくつかのチュートリアルに従いましたが、それらはすべて異なる方法で実行できます。とにかく、これは私が実装した方法ですが、何らかの理由で機能しません。の結果を印刷しようとするとoutfile0が表示され、ディスクには何も書き込まれません。また、ファイル名の有無にかかわらず、さまざまなパスを試しました。

更新:パスをファイル名のみに変更するhello.wavと (例: ではなく~/Documents/hello.wav)、 を印刷するとoutfile0x2194000.

void gilbertAnalysis::writeWAV(float * buffer, int bufferSize){
    SF_INFO sfinfo ;
    sfinfo.channels = 1;
    sfinfo.samplerate = 44100;
    sfinfo.format = SF_FORMAT_WAV | SF_FORMAT_PCM_16;

    const char* path = "~/Documents/hello.wav";

    SNDFILE * outfile = sf_open(path, SFM_WRITE, &sfinfo);
    sf_count_t count = sf_write_float(outfile, &buffer[0], bufferSize) ;
    sf_write_sync(outfile);
    sf_close(outfile);
}
4

2 に答える 2

2

libsndfile ドキュメントから:

成功すると、sf_open 関数は非 NULL ポインターを返します。このポインターは、そのオーディオ ファイルを扱う後続のすべての libsndfile 呼び出しに最初のパラメーターとして渡されます。失敗すると、sf_open 関数は NULL ポインタを返します。エラーの説明は、sf_strerror に NULL を渡すことで取得できます。

outfileが 0x2194000 でヌルでない 場合は、ファイルを正しく開いた可能性があります。

sf_strerror() を使用して、ファイル名だけでなく完全なファイル パスを指定したときに発生したエラーを確認してください。

于 2014-03-20T11:36:48.313 に答える