2010-04-20 17 views
6

Questo è il mio metodo:AVAudioRecorder non registrerà Sul dispositivo

-(void) playOrRecord:(UIButton *)sender { 
    if (playBool == YES) { 
     NSError *error = nil; 
     NSString *filePath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat: @"%d", [sender tag]] ofType:@"caf"]; 
     NSURL *fileUrl = [NSURL fileURLWithPath:filePath]; 
     AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithContentsOfURL:fileUrl error:&error]; 
     [player setNumberOfLoops:0]; 
     [player play];  
    } 
    else if (playBool == NO) { 
     if ([recorder isRecording]) { 
      [recorder stop]; 
      [nowRecording setImage:[UIImage imageNamed:@"NormalNormal.png"] forState:UIControlStateNormal]; 
      [nowRecording setImage:[UIImage imageNamed:@"NormalSelected.png"] forState:UIControlStateSelected]; 
     } 
     if (nowRecording == sender) { 
     nowRecording = nil; 
     return; 
     } 
     nowRecording = sender; 
     NSError *error = nil; 
     NSString *filePath = [[NSBundle mainBundle] pathForResource:[NSString stringWithFormat: @"%d", [sender tag]] ofType:@"caf"]; 
     NSURL *fileUrl = [NSURL fileURLWithPath:filePath]; 
     [sender setImage:[UIImage imageNamed:@"RecordingNormal.png"] forState:UIControlStateNormal]; 
     [sender setImage:[UIImage imageNamed:@"RecordingSelected.png"] forState:UIControlStateSelected];   
     recorder = [[AVAudioRecorder alloc] initWithURL:fileUrl settings:recordSettings error:&error]; 
     [recorder record]; 
    } 
} 

La maggior parte è autoesplicativo; playBool è un BOOL che è SÌ quando è in modalità di riproduzione. Tuttavia, tutto funziona nel simulatore, quando lo eseguo su un dispositivo, [record registratore] restituisce NO. Qualcuno ha la minima idea del perché questo sta accadendo?

risposta

3

Ok, ho risolto la mia domanda; Non so perché, ma devo registrare su NSTemporaryDirectory quando su un dispositivo. Cambiando quello completamente risolto.

+0

perché non è possibile modificare il pacchetto dell'app !!! lol –

4

Questo perché non è possibile modificare il pacchetto di app sul dispositivo (è firmato). Puoi registrare nella cartella docs della tua app o nella directory tmp.

1

Ho avuto lo stesso identico problema. Risulta che stavo sbattendo contro una dichiarazione di percorso generato in modo errato. L'AVAudioRecorder inizializzato bene - e senza incidenti - ma iOS semplicemente non mi permetteva di scrivere su di esso. Perché? Dateci un'occhiata:

/* The following code will fail - why? It fails because it is trying to write some path that is NOT accessible by 
    this app. 
NSString *recordedAudioPath = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) 
           objectAtIndex:0] 
           stringByAppendingString:@"recorded.caf"]; 
*/ 
// Correction: 
NSString *recordedAudioPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) 
           objectAtIndex:0]; 

recordedAudioPath = [recordedAudioPath stringByAppendingPathComponent:@"recorded.caf"]; 
NSURL *recordURL = [NSURL fileURLWithPath:recordedAudioPath]; 

Questo ha senso ora. Grazie per avermi guidato nella giusta direzione.

+0

Hanno esattamente lo stesso aspetto ... – Gu1234

+0

La differenza è che il componente percorso viene aggiunto se necessario. Si aggiunge essenzialmente un/prima recorded.caf Il codice precedente 'errato' avrebbe funzionato se ha usato: NSString * recordedAudioPath = [[NSSearchPathForDirectoriesInDomains (NSDocumentDirectory, NSUserDomainMask, SI) objectAtIndex: 0] stringByAppendingString: @ "/ recorded.caf "]; –

17

Se qualsiasi punto del codice si ha questa configurazione:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil]; 

modificarla in:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayAndRecord error:nil]; 

Impostazione della categoria AVAudioSession sbagliata causerà registrazione/riproduzione al sicuro.

1

Inoltre, assicurarsi che la vostra applicazione è consentito di accedere al microfono (vale a dire nelle impostazioni di iOS, scorrere verso il basso e trovare la vostra applicazione, e dovrebbe avere 'microfono', che è necessario passare a 'on')

+0

Cosa? Questo problema che ho cercato di eseguire il debug per due giorni non poteva essere qualcosa di così semplice, ovviamente questo dispositivo ha i permessi del microfono, vedi ... Oh, era così. Dispositivo/simulatore totalmente un'aringa rossa. iOS dovrebbe almeno registrare un errore, non fallire silenziosamente. Grazie, a volte è qualcosa di così semplice. –

Problemi correlati