【问题标题】:Access audio buffer of an AVAudioSession访问 AVAudioSession 的音频缓冲区
【发布时间】:2013-09-20 13:37:30
【问题描述】:

希望这个问题有点道理,我完全迷路了...... 在我的原型应用程序中,我正在记录微输入并保存它,到目前为止完全没有问题。

我现在需要在记录缓冲区时访问缓冲区,以便将数据块传递给另一个类(用 C 编写,而不是我编写的)来进行一些分析。

我花了一整天的时间浏览和阅读,看来我需要使用音频队列才能访问缓冲区。 问题是语法是C,我完全看不懂:)

所以我的问题是:

1) 还有其他方法可以实现我想要的吗?我不需要深入的解释,只是一些提示,我会浏览我的方式:) 我问是因为我不是 100% 确定音频队列是唯一的方法

2) 关于音频队列的任何好的教程或示例? aurioTouch tutorial by Apple 不是很有用(同样,我不知道 C)。通过遵循像我这样的菜鸟可以理解的好教程,我可以绕过我在 C 中的问题

非常感谢,感谢您提供的任何帮助。

【问题讨论】:

  • 低级音频 API 和原始缓冲区格式都是基于 C 的,因此您最好了解一下 C 和 C 数据类型,因为 C 是正确且非常有用的子集目标 C,尤其适用于任何音频作品。
  • 我对 Core Audio 一无所知,只知道 C,并且能够通过一些练习来构建和拆除音频图。如果您对 iOS 或 OSX 上的音频非常认真,那么 [Chris A 的书][amazon] 是必不可少的。 [亚马逊]:amazon.com/Learning-Core-Audio-Hands-On-Programming/dp/…
  • thx @nick 我还找到了那本书,并从网上阅读了一些示例/摘录,但同样,我的问题是我根本不喜欢 C。我可能会寻求帮助,因为这对我来说可能太硬核了:)
  • 顺便问一下,你需要将数据传递给哪个类?它做了什么样的分析?只是好奇。

标签: ios objective-c audio core-audio


【解决方案1】:

好问题。 您可以使用其他人编写的代码,例如:

Novocaine - 非常简单。 (但有一些错误,至少在我 6 个月前使用的旧版本中。单声道和立体声的东西。)

Momu - 在 C++ 中相当不错(您需要为文件使用 .mm 扩展名)

如果您想要一些低级音频编程,这些将节省您的时间。不过,仍然需要一些 C 语言的基本技能。查看this guy。他的解释和热情非常好。

通过上述所有内容,您可以在 1-2 天的工作中做好准备,从而掌握 C 方面的良好技能。

编辑

基本上,在处理低级音频的任何地方,您都会处理称为音频样本的 C 数字数组(表示为 float *audioBuffer;)。你在一个循环中循环,做一些操作,复制它,发送到某个地方,分析。

要复制它,您必须为其分配空间。缓冲区的实际字节大小可以这样计算:numberOfSamples*sizeof(type)。

【讨论】:

  • 我还推荐 iOS Accelerate.framework,尤其是它的 vDSP 部分,用于处理低级音频。在对音频缓冲区(向量)执行数学运算时使用它而不是循环 - 它工作得更快。
  • 谢谢@krafter 我现在正在看 Novocaine。有什么好的文档或教程吗?从我在示例中阅读的代码来看,仍然不清楚如何访问传入缓冲区中的数据
  • "Getting Audio" 部分的 github 页面上,有从麦克风获取音频的代码。每隔几毫秒调用一次该块,将新的音频数据带入 float *newAudio 变量。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-08
  • 2016-01-10
  • 2011-10-31
相关资源
最近更新 更多