3

私はオーディオファイルを処理するソフトウェアを書いています。Wave ファイル データの読み取りに libsndfile ライブラリを使用していますが、ドキュメントでは解決されなかった疑問に遭遇しました。項目を読み取る関数とフレームを読み取る関数の違いは何ですか? または、言い換えると、 と の両方を交換しても同じ結果が得られるのsf_read_shortでしょsf_readf_shortうか?

オーディオ フレームは 1 つのサンプルに相当するという質問をいくつか読んだので、libsndfile がアイテムを呼び出すものは同じものである可能性があると考えました。私のテスト中、それらは同じように見えました。

4

1 に答える 1

3

私も気になって答えを見つけました。

Q12 : sf_read* を見ています。アイテムとは?フレームとは

項目は、読み取っているデータ型の単一のサンプルです。つまり、sf_read_short の単一の short 値または sf_read_float の単一の float です。チャネルが 1 つだけのサウンド ファイルの場合、フレームは項目 (つまり、単一のサンプル) と同じですが、マルチチャネルのサウンド ファイルの場合、単一のフレームにはチャネルごとに単一の項目が含まれます。

以下に 2 つの単純で正しい例を示します。どちらも最初に項目を使用して、ステレオ ファイルで作業していると想定されています。

    #define CHANNELS 2
    short data [CHANNELS * 100] ;
    sf_count items_read = sf_read_short (file, data, 200) ;
    assert (items_read == 200) ;

フレームを使用してまったく同じ量のデータを読み取るようになりました。

    #define CHANNELS 2
    short data [CHANNELS * 100] ;
    sf_count frames_read = sf_readf_short (file, data, 100) ;
    assert (frames_read == 100) ;

これはlibsndfile FAQ、質問 12からのコピー & ペースト です。

于 2014-07-15T13:36:02.447 に答える