私のアプリでは、非常に正確な熱補償水晶発振器 (TCXO) を備えた外部 USB マイクを使用しています。サンプルレートは48KHzです。カメラ キット コネクタを介して iOS に接続します。私は EZAudio ライブラリを使用していますが、iOS が正確な 48KHz ではなく、オーディオ サンプリング用に独自の内部クロック ソースを保持しているように見えることを除いて、すべて正常に動作します。
CoreAudio に関するすべてのドキュメントを読みましたが、lightning オーディオを使用する場合のクロック ソースに関連するものは見つかりませんでした。
内部または外部クロック ソースを選択する方法はありますか?
ありがとう !
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分後の波形のスクリーンショット:

