2014-02-03 6 views
0

Я пытаюсь перенаправить звук с произвольного входа (аудиоустройство USB) на произвольный выход (другое аудиоустройство USB). Подумайте о терминах переключателя перекрестных точек. Нет записи, нет обработки, просто подключите вход A к выходу B.Уменьшить задержку/задержку в аудио в AVCaptureSession?

Я смог выполнить это, используя следующий код концепции доказательств, но задержки/задержки между входом и выходом являются чрезмерными (почти 1 секунда). Я видел публикацию (где-то), утверждающую, что AVFoundation использует довольно большие буферы для звука, и это отвечает за задержку, но я нигде не нашел, что могу изменить размер буфера.

Может кто-нибудь предложить решение к сокращению отставания,

ИЛИ:

Обеспечить предложение о том, как я могу интегрировать некоторые (как можно меньше) Core Audio (или другой) код для выполнения моего задача?

В следующем коде «IN_1» и «OUT_0,1» являются агрегатными устройствами, созданными на панели управления Audio MIDI Setup. Для целей тестирования все это реализовано в моем делете приложения теста.

- (void) setUpCaptureSession 
{ 
    NSError * error; 
    self.captureSession = [AVCaptureSession new]; 
    AVCaptureSession * session = self.captureSession; 
    AVCaptureDevice * inputDevice = [self deviceWithLocalizedName:@"IN_1"]; 
    AVCaptureDevice * outputDevice = [self deviceWithLocalizedName: @"OUT_0,1"]; 
    session.sessionPreset = AVCaptureSessionPresetLow; 
    if(inputDevice) 
     { 
     AVCaptureInput * input = [AVCaptureDeviceInput deviceInputWithDevice: inputDevice error:&error]; 
     if([session canAddInput: input]) 
      { 
      [session addInput: input]; 
      } 
     } 
    if(outputDevice) 
     { 
     AVCaptureAudioPreviewOutput * output = [AVCaptureAudioPreviewOutput new]; 
     output.outputDeviceUniqueID = outputDevice.uniqueID; 
     output.volume = 1.0; 
     if([session canAddOutput: output]) 
      { 
      [session addOutput: output]; 
      } 
     } 
    [[NSNotificationCenter defaultCenter] addObserver: self selector: @selector(handleCaptureSessionError:) name: AVCaptureSessionRuntimeErrorNotification object: self.captureSession]; 
} 

- (AVCaptureDevice *) deviceWithLocalizedName:(NSString *) name 
{ 
    AVCaptureDevice * result = nil; 
    NSArray * devices = [AVCaptureDevice devices]; 
    for(AVCaptureDevice * device in devices) 
     { 
     if([device.localizedName isCaseInsensitiveLike: name]) 
      { 
      result = device; 
      break; 
      } 
     } 
    return result; 
} 

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification 
{ 
/* NOTE: latency does NOT reduce if the following are run on a background queue */ 
    [self setUpCaptureSession]; 
    [self.captureSession startRunning]; 
} 

ответ

1

Для низкой латентности аудио, используйте Audio Units с короткими буферами для записи и воспроизведения, которые могут позволить латентность десятков миллисекунд или меньше, в зависимости от оборудования.

Смежные вопросы