2013-07-30 21 views
6

Sto sviluppando un'applicazione di registrazione e desidero riprodurre un suono all'avvio della registrazione.AudioServicesPlaySystemSound mentre è attiva AVCaptureSession

Sfortunatamente sembra che da iOS 5 non sia possibile riprodurre un suono di sistema quando è attivo uno AVCaptureSession con un dispositivo audio.

Ecco la parte rilevante del codice che sto utilizzando

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSURL * soundURL = [[NSBundle mainBundle] URLForResource:@"recording-starts" withExtension:@"aif"]; 
    AudioServicesCreateSystemSoundID((__bridge CFURLRef)soundURL, &_recStartSound); 

    //... 

    if ([self.captureManager setupSession]) { 
     // ... 

     dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{ 
      [self.captureManager.session startRunning]; 
     }); 

     // ...      
    } 
} 

Più tardi, mi basta chiamare AudioServicesPlaySystemSound(_recStartSound) e niente va avanti. Tuttavia, se effettuo la stessa chiamata prima della configurazione della sessione, il suono viene riprodotto come previsto.

ho trovato questo bug report, che è esattamente rilevante per il mio problema, così come this e this domanda, ma non sono riuscito a trovare alcuna soluzione in nessuno di loro.

Come è possibile riprodurre un suono breve prima di avviare la registrazione AV?

+0

Riprodurre il suono, quindi avviare la cattura? –

+0

Questa è una molto simile domanda precedente: http://stackoverflow.com/questions/16309802/play-system-sound-while-recording-video-audio –

+0

Qualcuno può aiutarmi con questa domanda http:// StackOverflow.it/questions/21059607/how-to-use-vibration-while-recording-iphone5-ios –

risposta

0

Riprodurre il suono utilizzando AVAudioPlayer.

+0

Non capisco perché questo è stato votato. Questo in effetti funziona e risolve il problema della domanda (riprodurre un suono mentre è attiva una AVCaptureSession). – simonfi

0

Estendere la risposta di sc0rp10n, le modifiche al codice in questione sarebbe semplicemente:

inizializzazione del lettore audio (_recStartSound essendo di tipo AVAudioPlayer *):

- (void)viewDidLoad { 
    [super viewDidLoad]; 

    NSURL * soundURL = [[NSBundle mainBundle] URLForResource:@"recording-starts" withExtension:@"aif"]; 
    _recStartSound = [[AVAudioPlayer alloc] initWithContentsOfURL: soundURL error: NULL]; 

    ... 
} 

Quando si desidera riprodurre il suono:

[_recStartSound play]; 
0

Vedi Are there any other iOS system sounds available other than 'tock'?

Dopo alcune prove ed errori con i suoni di sistema disponibili, su iOS 8.1.3/iPhone 6 sono riuscito a riprodurre questi due:

AudioServicesPlaySystemSound (1114);

e

AudioServicesPlaySystemSound (1113);

richiede una sola riga di codice per riprodurre il suono dopo il collegamento:

  • AudioToolbox/AudioToolbox.h

    (vedi sopra link per maggiori informazioni)

Ed ecco un elenco parziale di suoni disponibili (dai commenti sopra) http://iphonedevwiki.net/index.php/AudioServices