6 votes

iPhone SDK AVAudioRecorder : délai avant l'enregistrement

J'utilise l'AVAudioRecorder pour récupérer l'audio du microphone. Le problème auquel je suis confronté est le suivant : la première fois que je commence à enregistrer, il y a un délai de 2 secondes entre le moment où je demande à l'enregistreur de commencer et le moment où il commence effectivement. Les appels d'enregistrement suivants s'exécutent beaucoup plus rapidement. Y a-t-il des bogues évidents ? Que puis-je faire pour accélérer le temps nécessaire au démarrage de l'enregistrement initial ?

J'ai initialisé l'enregistreur dans viewDidLoad :

- (void)viewDidLoad
{
    NSString *fileName = @"test.aiff";
    [super viewDidLoad];

    NSString *docsDir = [NSSearchPathForDirectoriesInDomains(
                    NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0];

    NSString *soundFile = [docsDir
                               stringByAppendingPathComponent:fileName];

    NSURL *soundFileURL = [NSURL fileURLWithPath:soundFile];

    NSDictionary *recordSettings = [NSDictionary 
                                    dictionaryWithObjectsAndKeys:
                                    [NSNumber numberWithInt:AVAudioQualityMin],
                                    AVEncoderAudioQualityKey,
                                    [NSNumber numberWithInt:16], 
                                    AVEncoderBitRateKey,
                                    [NSNumber numberWithInt: 2], 
                                    AVNumberOfChannelsKey,
                                    [NSNumber numberWithFloat:44100.0], 
                                    AVSampleRateKey,
                                    nil];

    NSError *error = nil;

    audioRecorder = [[AVAudioRecorder alloc]
                     initWithURL:soundFileURL
                     settings:recordSettings
                     error:&error];
}

Puis, lorsque je suis prêt, je lance l'enregistreur en appelant ma méthode startRecoring :

-(void) startRecording{
    NSLog(@"Trying to start Recording");
    [audioRecorder record];
    NSLog(@"Recording started");
} 

Voici la sortie du journal et vous pouvez voir qu'il y a environ 2,5 secondes entre les deux appels NSLog. Lors du premier clic, mais pas les autres fois :

First recorder call    
2011-04-13 15:41:47.495 AudioRecorderTest[6570:207] Trying to start Recording
2011-04-13 15:41:49.869 AudioRecorderTest[6570:207] Recording started

Next Recorder Call
2011-04-13 15:42:49.236 AudioRecorderTest[6570:207] Trying to start Recording
2011-04-13 15:42:49.246 AudioRecorderTest[6570:207] Recording started

5voto

Zaky German Points 7002

Crée un fichier audio à l'emplacement spécifié par le paramètre url dans la méthode initWithURL:settings:error :. Si un fichier existe déjà à cet emplacement cet emplacement, cette méthode l'écrase.

La préparation invoquée par cette méthode a lieu automatiquement lorsque vous appelez record. Utilisez prepareToRecord lorsque vous voulez que l'enregistrement commence aussi vite le plus rapidement possible après l'appel de record.

essayez d'appeler prepareToRecord après avoir initialisé l'enregistreur audio

0voto

robbra Points 1

Après avoir initialisé l'enregistreur, en plus de prepareToRecord, essayez d'insérer :

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
NSError *err = nil;

[audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err];
if(err) {
    NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
    return;
}
[audioSession setActive:YES error:&err];
if(err){
    NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
    return;
}
UInt32 sessionCategory = kAudioSessionCategory_PlayAndRecord;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X