我正在编写一个处理音频文件的软件。我正在使用libsndfile库来读取波形文件数据,我遇到了一个疑问,它们的文档没有解决:读取项目的函数和读取框架的函数有什么区别?或者,换句话说,如果我同时交换sf_read_short
和sf_readf_short
,我会得到相同的结果吗?
我已经读过一些问题,音频帧等于单个样本,所以我认为libsndfile调用的东西可能是同一个东西。在我的测试中,它们看起来是一样的。
答案 0 :(得分:2)
我也很关心并找到答案。
问题12:我在看sf_read *。什么是物品?什么是框架?
项目是您正在阅读的数据类型的单个样本;即a 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。