【问题标题】:Difference between frames and items in libsndfile?libsndfile中的框架和项目之间的区别?
【发布时间】:2014-05-18 08:36:54
【问题描述】:
我正在编写一个处理音频文件的软件。我正在使用 libsndfile 库来读取波形文件数据,我遇到了他们的文档没有解决的疑问:读取项目的函数和读取帧的函数有什么区别?或者,换句话说,如果我同时交换sf_read_short 和sf_readf_short,我得到相同的结果吗?
我在一些问题中读到音频帧等于单个样本,所以我认为 libsndfile 调用的项目可能是同一回事。在我的测试中,它们似乎是一样的。
【问题讨论】:
标签:
c
audio-processing
libsndfile
【解决方案1】:
我也很担心,找到了答案。
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 题。