在iphone和缓冲区的remoteIO上阅读了这么多内容之后,我写了一段代码并获得了音频样本。
但是,我无法理解缓冲区大小。
我知道每次缓冲区已满,都会调用回调函数。 缓冲区大小为2个字节,16位。 我不知道的是,回调被调用以获得这16位的频率。
不知何故,当我将缓冲区记录下来时,我每7秒只有2500个样本,这意味着每秒约400个样本。哪个太糟糕了!
我在做错了什么?或者我在这里不明白?我的代码来自我的另一篇文章: error in audio Unit code -remoteIO for iphone
答案 0 :(得分:2)
问题是NSLog与音频采样率相比太慢,因此阻止了音频回调的频繁调用。所以你几乎失去了所有的样本。从音频回调中取出所有NSLog,只需增加一个计数器来计算样本。
如果您想要NSLog某些东西,请在音频回调之外找出如何做到这一点。
您的代码示例似乎是从音频设备每秒请求44100个样本。检查错误返回值以确保。
此外,缓冲区中的样本数不涉及strlen()。
答案 1 :(得分:0)
也许这只是400Hz的记录,音频很好吗?
如果我理解正确,您可以听到音频,这意味着音频就足够了。在400Hz时,您将对200Hz以上的所有频段进行混叠,这非常低(我们可以听到高达20 kHz),这意味着您的音频将会严重失真。请参阅nyquist theorem。
答案 2 :(得分:0)
也许你得到的不是单个样本,而是一个样本数组,即一个音频缓冲区,可能包含128个样本(~400 * 128 = 44100),也许还有多个通道(取决于你的配置)。