我已使用此示例代码创建了录音机。 http://www.stefanpopp.de/capture-iphone-microphone/
我发现大约每30秒就会出现故障。尽管我可能错了,但它们对我来说听起来像是缓冲故障。我尝试与文章的作者联系,但没有取得太大的成功。我真的很难遵循这些代码。我认为它缺少循环缓冲区,但是我不确定这有多重要。我希望有人可以向我指出正确的方向:
向我指出一些不同的示例代码,或提出我需要添加的内容(高级建议很好-我很高兴研究和从事这项工作,只是不确定什么是工作)
建议一些更好的值用于缓冲区数据大小之类的事情。
告诉我,这段代码没有什么错,我的错误几乎可以肯定在其他地方。
建议一个我可以使用的库来照顾它(“ Amazing Audio Engine 2”对我来说很不错,但我有点担心它的说明已退役。AudioKit看上去也不错,但它缺少峰值功率读数,这可能是导入了如此复杂的库后不得不实现自己而感到羞耻)
为什么不使用AVAudioSession?我需要用户能够在录音时设置麦克风音量并能够同时收听。以前,我是通过AVAudioSession做到这一点的,但在较新的设备上,isInputGainSettable返回NO。对于通过雷电电缆插入的许多硬件麦克风,它也返回“否”,而现在,越来越多的耳机插孔消失了。
最佳答案
几个问题。
Apple建议不要在音频上下文(回调)中调用对象方法。您的代码有几个。请改用C函数。
较新的iOS设备可能使用的硬件采样率为48000,而不是44100。重新采样可能会导致缓冲区更改大小。
该代码似乎假定播放回调缓冲区的大小与输入回调缓冲区的大小相同。这不能保证。因此,回放可能会以太少的样本结束,从而导致周期性的毛刺。
关于ios - AudioUnit每30秒记录一次故障,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45716112/