3

我正在编写一个处理音频文件的软件。我正在使用 libsndfile 库来读取波形文件数据,但我遇到了他们的文档没有解决的疑问:读取项目的函数和读取帧的函数有什么区别?或者,换句话说,如果我同时交换sf_read_short和,我会得到相同的结果sf_readf_short吗?

我在一些问题中读到音频帧等于单个样本,所以我认为 libsndfile 调用的项目可能是同一件事。在我的测试中,它们似乎是一样的。

4

1 回答 1

3

我也很担心,找到了答案。

Q12:我正在查看 sf_read*。什么是物品?什么是框架?

项目是您正在阅读的数据类型的单个样本;即 sf_read_short 的单个短值或 sf_read_float 的单个浮点值。对于只有一个通道的声音文件,一帧与一个项目(即单个样本)相同,而对于多通道声音文件,一个帧包含每个通道的单个项目。

下面是两个简单、正确的示例,假设它们都在处理立体声文件,首先使用项目:

    #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 回答