2016-02-01 27 views
6

ho un problema con AVAudioPlayer in alcune condizioni. in primo luogo il mio registratore audio funziona bene in generale. ma dopo la chiamata VOIP e suonare il ring da built_in_Speaker e lavorare molti con la sessione audio, dopo aver chiamato la chiamata, non posso registrare Audio con audio in primo luogo! ma in seconda battuta ogni cosa funzionava bene. AVAudioRecorder non ha audio

in condizione che ho accennato che il mio audio è stato registrato ma non ha voce!

voglio sapere in che situazione potrebbe accadere?

self.audioSession = [AVAudioSession sharedInstance]; 
NSError *err = nil; 
[self.audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err]; 
if(err){ 
    NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]); 
    return; 
} 

BOOL preparedToRecord = [self.audioRecorder prepareToRecord]; 
__block BOOL recordStarted = NO; 

err = nil; 
[self.audioSession setActive:YES error:&err]; 
if(err){ 
    NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]); 
    return; 
} 

if (preparedToRecord){ 
    recordStarted = [self.audioRecorder record]; 
} 

risposta

4

Risolto

ho trovato la ragione di questo problema. ho addObserve me stesso per ricevere la notifica di AVAudioSession e controllare l'interrupt/RoutChanging AudioSession! il problema è dopo la mia chiamata, ho provato a cambiare rotta audio verso speaker ma una classe che è stata aggiunta per la notifica AudioRoutChanging cerca di impedirlo. quindi il percorso della sessione audio cambia ogni secondo e non è possibile registrare l'audio.

Conclusione si dovrebbe fare in questo modo per registrare l'audio:

1) sicuro di permesso

2)[self.audioSession setActive:YES error:&err]; 

3)[self.audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err]; 

4) sicuro della tua percorso non essere il cambiamento durante registrazione.

4) sicuro circa il cerotto destinazione

-1

La registrazione audio richiede l'autorizzazione esplicita dell'utente. La prima volta che la sessione audio della tua app tenta di utilizzare un percorso di input audio mentre si utilizza una categoria che consente la registrazione, il sistema richiede automaticamente all'utente l'autorizzazione. È possibile chiedere esplicitamente in precedenza chiamando il metodo requestRecordPermission :. Fino a quando l'utente concede all'app l'autorizzazione per la registrazione, l'app può registrare solo il silenzio.

riferiscono qui: https://developer.apple.com/library/prerelease/ios/documentation/AVFoundation/Reference/AVAudioSession_ClassReference/index.html

+0

ho ottenere il permesso in primo lancio di app, e ho già detto io uso sessione audio nella mia chiamata e si sta lavorando bene! risolvo il problema che ho spiegato qui a breve. tnx per la tua risposta! – Mohamad