gpt4 book ai didi

ios - 获取 20 毫秒 VoIP 应用程序的麦克风数据回调

转载 作者:行者123 更新时间:2023-12-01 16:07:16 27 4
gpt4 key购买 nike

我正在开发 VOIP 通话应用程序,所以现在我处于需要将语音数据传输到服务器的阶段。为此,我想通过 20 毫秒回调从麦克风获取实时音频语音数据。

我确实搜索了很多链接,但我找不到解决方案
我是音频框架的新手。

细节

我们有自己的堆栈,例如 WebRTC,它使 RTP 每 20 毫秒从远程发送数据,并在 20 毫秒内向麦克风询问数据,我想要实现的是从麦克风获取 20 毫秒的数据并将其传递给堆栈。所以需要知道怎么做。音频格式为 pcmFormatInt16,采样率为 8000 Hz,数据为 20 毫秒。

我已经搜索过

AVAudioEngine,
音频单元,
AVCaptureSession等

  • 1.我正在使用 AVAudioSession 和 AUAudioUnit,但 audioSession 的 setPreferredIOBufferDuration 没有设置为我设置的确切值。结果我没有得到确切的数据大小。任何人都可以在 setPreferredIOBufferDuration 上帮助我。
  • 2.还有一个问题是 audioUnit.outputProvider () 在 UnsafeMutableAudioBufferListPointer 中给出 inputData。 inputData 列表有两个元素,我只想要一个样本。任何人都可以帮助我将其更改为可以在 AVAudioPlayer 中播放的数据格式。

  • 我已经关注了之前的链接
    https://gist.github.com/hotpaw2/ba815fc23b5d642705f2b1dedfaf0107
    let hwSRate = audioSession.sampleRate

    try audioSession.setActive(true)

    print("native Hardware rate : \(hwSRate)")

    try audioSession.setPreferredIOBufferDuration(preferredIOBufferDuration)

    try audioSession.setPreferredSampleRate(8000) // at 8000.0 Hz

    print("Changed native Hardware rate : \(audioSession.sampleRate) buffer duration \(audioSession.ioBufferDuration)")


    try auAudioUnit = AUAudioUnit(componentDescription: self.audioComponentDescription)



    auAudioUnit.outputProvider = { // AURenderPullInputBlock

    (actionFlags, timestamp, frameCount, inputBusNumber, inputData) -> AUAudioUnitStatus in



    if let block = self.renderBlock { // AURenderBlock?
    let err : OSStatus = block(actionFlags,
    timestamp,
    frameCount,
    1,
    inputData,
    .none)
    if err == noErr {
    // save samples from current input buffer to circular buffer
    print("inputData = \(inputData) and frameCount: \(frameCount)")
    self.recordMicrophoneInputSamples(
    inputDataList: inputData,
    frameCount: UInt32(frameCount) )
    }
    }
    let err2 : AUAudioUnitStatus = noErr
    return err2

    }

    日志:-

    更改了 native 硬件速率:8000.0 缓冲区持续时间 0.01600000075995922

    最佳答案

    尝试从音频接口(interface)获取 40 毫秒的数据,然后将其拆分为 20 毫秒的数据。

    还要检查您是否能够设置音频接口(interface)的采样频率(8 Khz)。

    关于ios - 获取 20 毫秒 VoIP 应用程序的麦克风数据回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57112481/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com