4

我的应用程序使用带有非常精确的热补偿石英振荡器 (TCXO) 的外部 USB 麦克风。采样率为 48KHz。我通过相机套件连接器将其插入 iOS。我正在使用 EZAudio 库,一切正常,除了 iOS 似乎保留自己的内部时钟源进行音频采样,而不是我准确的 48KHz。

我阅读了有关 CoreAudio 的所有文档,但在使用闪电音频时没有找到与时钟源相关的任何内容。

有没有办法在内部或外部时钟源之间进行选择?

谢谢 !

var audioFormatIn = AudioStreamBasicDescription(mSampleRate: Float64(48000),
                                                mFormatID: AudioFormatID(kAudioFormatLinearPCM),
                                                mFormatFlags: AudioFormatFlags(kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked),
                                                mBytesPerPacket: 2,
                                                mFramesPerPacket: 1,
                                                mBytesPerFrame: 2,
                                                mChannelsPerFrame: 1,
                                                mBitsPerChannel: 16,
                                                mReserved: 0)

func initAudio()
{       
    let session : AVAudioSession = AVAudioSession.sharedInstance()
    do {
        try session.setCategory(AVAudioSessionCategoryPlayAndRecord)
        try session.setMode(AVAudioSessionModeMeasurement)
        try session.setActive(true)
    }
    catch {
        print("Error Audio")
    }
    self.microphone = EZMicrophone(microphoneDelegate: self, withAudioStreamBasicDescription: audioFormatIn)
}

更新: 感谢@Rhythmic Fistman,设置首选采样率部分解决了问题。不再从 iOS 重新采样,TCXO 仍然是主时钟源。但是信号现在很快被缓冲区中的空样本破坏了。这个问题随着录音长度越来越严重。当然,由于我需要Lightning端口来插入硬件,所以我很难轻松调试!

7分钟后的波形截图:

在此处输入图像描述

15分钟后的波形截图:

在此处输入图像描述

4

1 回答 1

1

在激活之前将音频会话的首选采样率设置为 48kHz 是否有帮助?

session.setPreferredSampleRate(48000)

我不知道它是否会对时钟源做任何事情,或者它是否会影响输入(或输出)采样率,但值得一试。

于 2016-06-19T02:15:51.117 回答