Domanda

Questo è il mio metodo:

-(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 di esso è autoesplicativo; playBool è un BOOL che è SI quando è in modalità di riproduzione. Tutto funziona nel simulatore tuttavia, quando l'eseguo su un dispositivo, [record registratore] non ha prodotto alcun. Qualcuno ha un indizio sul perché questo sta accadendo?

È stato utile?

Soluzione 3

Ok, risolto la mia domanda; Non so perché, ma devo record al NSTemporaryDirectory quando su un dispositivo. La modifica che completamente riparato.

Altri suggerimenti

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.

Questo perché non è possibile modificare l'applicazione fascio sul dispositivo (è firmato). È possibile registrare sia la cartella Documenti per la vostra applicazione, o la directory tmp.

ho avuto lo stesso identico problema. Si scopre che stavo urtando contro un'istruzione di percorso in modo non corretto generato. L'AVAudioRecorder inizializzato fine - e senza incidenti - ma iOS semplicemente non mi permetteva di scrivere. Perché? Check it out:

    /* 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 senso completo ora. Grazie per avermi sterzata nella direzione giusta.

Inoltre, assicurarsi che la vostra applicazione è consentito l'accesso 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')

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top