/ / AVAudioRecorder cesse de fonctionner lors de l'écriture sur / dev / null sur l'iPhone 5 avec iOS 7 - ios7, avaudiorecorder

AVAudioRecorder cesse de fonctionner lors de l'écriture sur / dev / null sur l'iPhone 5 avec iOS 7 - ios7, avaudiorecorder

J'ai une application qui surveille le niveau audio d'arrière-plan sans enregistrer dans un fichier. J'utilise le truc d'écrire dans / dev / null pour accomplir cela.

Ce code a fonctionné sur l'iPhone 3GS avec iOS 6, l'iPhone 4 avec iOS 6 et iOS 7, et dans le simulateur avec iOS 7 et iPhone Retina (4 pouces 64 bits).

Cependant, lorsque je l'essaie sur un vrai iPhone 5, l'enregistreur semble capturer l'audio pendant un moment, puis meurt en silence.

Ceci est le code:

    // Inititalize the audio

NSURL *url = [NSURL fileURLWithPath:@"/dev/null"];

NSDictionary *settings = [NSDictionary dictionaryWithObjectsAndKeys:
[NSNumber numberWithFloat: 44100.0],                 AVSampleRateKey,
[NSNumber numberWithInt: kAudioFormatAppleLossless], AVFormatIDKey,
[NSNumber numberWithInt: 1],                         AVNumberOfChannelsKey,
[NSNumber numberWithInt: AVAudioQualityMax],         AVEncoderAudioQualityKey,
nil];


NSError *error;

recorder = [[AVAudioRecorder alloc] initWithURL:url settings:settings error:&error];

if (recorder) {
[recorder prepareToRecord];
recorder.meteringEnabled = YES;
[recorder record];
levelTimer = [NSTimer scheduledTimerWithTimeInterval: 0.03 target: self selector: @selector(levelTimerCallback:) userInfo: nil repeats: YES];
//        peakLevelTimer = [NSTimer scheduledTimerWithTimeInterval: 2.0 target: self selector: @selector(peakLevelTimerCallback:) userInfo: nil repeats: YES];
} else {
NSLog(@"There was an error setting up the recorder.");
NSLog([error description]);
}

Quelques idées sur ce qui pourrait se passer?

Quelqu'un pourrait-il suggérer une solution de contournement? L’écriture dans un fichier réel fonctionne, mais je ne souhaite pas occuper tout l’espace du périphérique uniquement pour contrôler l’audio. Existe-t-il un moyen d’écrire dans un petit tampon de fichier qui s’évapore en un rien de temps? Implémenter mon propre / dev / Null, effectivement?

Réponses:

7 pour la réponse № 1

J'ai eu le même problème lors du test de l'une de mes applications pour iOS 7.

J'ai contourné l'absence de / dev / null en créantun fichier initial que j'ai ensuite supprimé quelques secondes après le début de l'enregistrement. L'enregistrement a continué à fonctionner pour mon application et aucun fichier de données n'a été stocké.

- (void)startRecording
{
// New recording path.
NSString *recorderFilePath = [NSString stringWithFormat:@"%@/%@.caf", [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"], @"cache"];
NSURL *url = [NSURL fileURLWithPath:recorderFilePath];

AVAudioRecorder recorder = [[ AVAudioRecorder alloc] initWithURL:url settings:recordSetting error:&err];

if([recorder prepareToRecord])
{
[recorder record];
NSTimer deleteFileTimer = [NSTimer scheduledTimerWithTimeInterval:15 target:self selector:@selector(removeRecordingFile) userInfo:nil repeats:NO];
}
}

- (void)removeRecordingFile
{
// Remove the data file from the recording.
NSString *recorderFilePath = [NSString stringWithFormat:@"%@/%@.caf", [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"], @"cache"];
NSFileManager *fileManager = [NSFileManager defaultManager];
NSError *error = nil;

BOOL success = [fileManager removeItemAtPath:recorderFilePath error:&error];

if(success)
{
NSLog(@"Deleted recording file");
}
else
{
NSLog(@"Could not delete file -:%@ ",[error localizedDescription]);
}
}

0 pour la réponse № 2

Vous devez changer:

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

à:

[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:NULL];