Pregunta

Este es mi método:

-(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 mayor parte se explica por sí mismo; playBool es un BOOL que es SÍ cuando se encuentra en modo de reproducción. Todo funciona en el simulador sin embargo, cuando lo ejecuto en un dispositivo, [registro grabadora] no devolvió. ¿Alguien tiene una idea de por qué está sucediendo esto?

¿Fue útil?

Solución 3

Ok, resuelto mi propia pregunta; No sé por qué, pero tengo que registro a la NSTemporaryDirectory cuando en un dispositivo. Cambiante que se fija por completo.

Otros consejos

Si cualquier parte del código que tiene esta configuración:

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

Cambiar a:

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

Configuración de la categoría AVAudioSession equivocada causará grabación / reproducción falle.

Esto es porque no se puede modificar la aplicación de haz en el dispositivo (su firma). Puede grabar en la carpeta de documentos para su aplicación, o en el directorio tmp.

Yo tenía el mismo problema. Resulta que estaba chocando contra una instrucción de ruta generada de forma incorrecta. El AVAudioRecorder bien inicializado - y sin incidentes - IOS, pero simplemente no me permitiría escribir en él. ¿Por qué? Compruébelo usted mismo:

    /* 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];

Esto tiene mucho sentido ahora. Gracias por la dirección en la dirección correcta.

Además, asegúrese de que se permite su aplicación para acceder al micrófono (es decir, en la configuración de iOS, desplazarse hacia abajo y encontrar su aplicación, y debe tener 'micrófono', que se tenga que cambiar a 'on')

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top