代码之家  ›  专栏  ›  技术社区  ›  P i

iOS:音频单位:设置任意采样率

  •  5
  • P i  · 技术社区  · 14 年前

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

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

    我猜实际的硬件速率可能是44.1KHz的某个比特移位,而任何内部采样速率都必须是这个原始值的向下比特移位(例如22.1KHz,11.05KHz)。离这儿近吗?

    据我所知,
    一。我 设置 音频会话的硬件采样率。
    2。这个 系统 设置 抽样率 尽可能接近 以我指定的采样率。
    三。然后,我查询音频会话以获得我设置的相同属性,该属性将给出它使用的实际采样率

    在音频单元(特别是远程IO单元)级别,文档说明单元连接到硬件的两点(即麦克风(输入)总线的输入范围和扬声器(输出)总线的输出范围),采样率可以是 恢复 但是 设置 .

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

    需要标签:音频单元

    1 回复  |  直到 11 年前
        1
  •  1
  •   lucius    14 年前

    我猜你是在iOS上,因为你提到了音频会话。所以你要:

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

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

    3. 激活会话。 AudioSessionSetActive()

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

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

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