我的应用程序使用带有非常精确的热补偿石英振荡器(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仍然是时钟主源。 但是信号现在很快就被破坏了,似乎是缓冲区中的空样本。记录长度越来越严重,这个问题越来越严重。当然,因为我需要闪电端口来插拔硬件,所以我很难轻松调试!
7分钟后波形的屏幕截图:
15分钟后波形的屏幕截图:
答案 0 :(得分:1)
在激活它之前,将音频会话的首选采样率设置为48kHz会有帮助吗?
session.setPreferredSampleRate(48000)
我不知道它是否会对时钟源做任何事情,或者它是否会影响输入(或输出)采样率,但它值得一试。