【问题标题】:iOS: Audio Units: setting arbitrary sample rateiOS:音频单位:设置任意采样率
【发布时间】:2011-05-08 22:24:03
【问题描述】:

我可以设置任何我想要的采样率吗?有什么限制?

硬件采样率如何?一旦设置好,单元之间传递的内部采样率有什么限制?

我猜测实际的硬件速率可能必须是 44.1KHz 的位移,并且任何内部采样率必须是该原始值的向下位移(例如 22.1KHz、11.05KHz)。这么近了吗?

据我所知,
1. 我设置音频会话的硬件采样率。
2. 系统设置采样率尽可能接近我指定的采样率。
3. 然后我在音频会话中查询我设置的相同属性,这将为我提供它使用的实际采样率

在音频单元,特别是 RemoteIO 单元的级别,文档指出该单元连接到硬件的两个点(即麦克风(输入)总线的输入范围和扬声器的输出范围(输出) 总线),采样率可能检索,但没有 设置

但是,我尝试在构建远程 I/O 单元时访问此值,但它返回零。我想也许我需要启动该单元,然后才能从其连接中获取有意义的数据(启动它的行为可能会创建连接)。因此,这里的解决方案似乎是从音频会话中获取采样率并按照上述方式使用它。

需要标签:音频单元

【问题讨论】:

标签: ios core-audio audiounit sample-rate


【解决方案1】:

我假设您使用的是 iOS,因为您提到了 AudioSessions。所以你会想要:

  1. 检查音频输入硬件。 AudioSessionGetProperty (kAudioSessionProperty_AudioInputAvailable...)

  2. 将音频会话设置为“播放和录制”模式。 AudioSessionSetProperty (kAudioSessionProperty_AudioCategory...)kAudioSessionCategory_PlayAndRecord

  3. 激活会话。 AudioSessionSetActive()

  4. 获取首选采样率。 AudioSessionGetProperty (kAudioSessionProperty_CurrentHardwareSampleRate)

然后您可以使用正确的采样率设置您的音频处理链。

至于播放音频,您可以使用任何采样率,API 应将其转换为硬件的输出采样率。显然,如果你使用非常高的采样率,它会消耗大量的内存和 CPU 时间。

【讨论】:

  • 那你在问什么?如果是关于硬件,你应该指定什么硬件,因为它们并不完全相同。
  • Ohmu 正在询问如何设置任意采样率。他/她不是在问如何访问硬件采样率。我目前有同样的问题。我希望我的 RemoteIO AudioUnit 在 22050 工作,以减少软件中发生的延迟问题。
  • 奇怪的是,设置 kAudioSessionProperty_PreferredHardwareSampleRate 可以在 iPhone 本身上运行。但是,它在模拟器中不起作用。
  • 投了反对票,因为这没有回答 OP 的问题,并且尽管其他 cmets 指出了这一点,但仍未更新。
猜你喜欢
  • 2020-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-07-22
  • 1970-01-01
  • 2017-03-04
  • 1970-01-01
  • 2011-10-08
相关资源
最近更新 更多