Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/110.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
iOS中带usb音频设备的外部时钟源_Ios_Audio_Usb_Core Audio_Ezaudio - Fatal编程技术网

iOS中带usb音频设备的外部时钟源

iOS中带usb音频设备的外部时钟源,ios,audio,usb,core-audio,ezaudio,Ios,Audio,Usb,Core Audio,Ezaudio,我的应用程序使用一个外部USB麦克风和一个非常精确的热补偿石英振荡器(TCXO)。采样率为48KHz。 我通过摄像头套件接口将其插入iOS。 我正在使用EZAudio库,除了iOS似乎保留了自己的内部时钟源用于音频采样,而不是我精确的48KHz之外,其他一切都很好 我阅读了有关CoreAudio的所有文档,但在使用lightning audio时,我没有发现任何与时钟源相关的内容 有没有办法在内部或外部时钟源之间进行选择 谢谢 var audioFormatIn = AudioStreamBas

我的应用程序使用一个外部USB麦克风和一个非常精确的热补偿石英振荡器(TCXO)。采样率为48KHz。 我通过摄像头套件接口将其插入iOS。 我正在使用EZAudio库,除了iOS似乎保留了自己的内部时钟源用于音频采样,而不是我精确的48KHz之外,其他一切都很好

我阅读了有关CoreAudio的所有文档,但在使用lightning audio时,我没有发现任何与时钟源相关的内容

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

谢谢

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)
}
更新: 多亏了@Rhythmatic Fistman,设置首选采样率部分解决了问题。不再从iOS进行重采样,TCXO仍然是时钟主源。 但现在信号很快就被缓冲区中似乎是空样本的东西破坏了。随着录音长度的增加,这个问题越来越严重。当然,因为我需要lightning端口来插入硬件,所以很难轻松调试

7分钟后的波形截图:

15分钟后的波形截图:


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

session.setPreferredSampleRate(48000)

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

我刚刚尝试过(因为它没有在EZAudio中实现),但不幸的是,它不起作用。因为我显然能够将采样率设置为低于我的48KHz,这确实意味着iOS会对传入的音频数据进行重新采样,这绝对是我想要避免的。在设置麦克风之前,
session.sampleRate
会报告什么?你能通过
ezmicroscop
查看这里的
inputFormat
发生了什么吗?我用GPS时间戳信号做了更深入的测试。事实上,“setPreferredSampleRate”解决了我的问题。我的第一个评论是错误的。但现在我有另一个问题:信号很快就被缓冲区中的空样本破坏了,而且情况越来越糟。这真的很奇怪。你正在录音存档吗?你能显示一个损坏波形的屏幕截图吗?你是说卫星意义上的GPS吗?