2016-06-18 5 views
4

В моем приложении используется внешний USB-микрофон с очень точной термокомпенсированной кварцевой генераторной установкой (TCXO). Частота дискретизации составляет 48 кГц. Я подключаю его в iOS через разъем для подключения камеры. Я использую EZAudio-библиотеку, и все работает отлично, за исключением того, что iOS, похоже, сохраняет собственный внутренний источник синхронизации для выборки звука вместо моего точного 48 кГц.Внешний источник часов с аудиоустройством usb в iOS

Я прочитал всю документацию о 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 минут:

enter image description here

Скриншот сигнала через 15 минут:

enter image description here

ответ

1

ли настройка предпочтительной частоты дискретизации звуковой сессии, чтобы 48кГц перед активацией это помогает?

session.setPreferredSampleRate(48000) 

Я не знаю, если он будет делать что-либо источников синхронизации, или, если это будет даже влиять на частоту дискретизации входного сигнала (или выход), но это стоит выстрел.

+0

Я только что попробовал (как это не реализовано в EZAudio), но это не работает, к сожалению. – jcr

+0

Поскольку я, по-видимому, могу установить частоту дискретизации ниже, чем мой 48KHz, это действительно означает, что iOS перераспределяет входящие аудиоданные, которые, безусловно, я хочу избежать. – jcr

+0

Что сообщает 'session.sampleRate' перед настройкой микрофона? Можете ли вы пройти через «EZMicrophone», чтобы узнать, что происходит с «inputFormat» здесь https://github.com/syedhali/EZAudio/blob/master/EZAudio/EZMicrophone.m#L246? –