2012-09-15 11 views
12

Ich implementiere die Audioaufnahme. Es funktioniert gut mit caf & wave Format. Aber das Problem ist, dass die Dateigröße zu groß ist.iOS: Audio Recording Dateiformat

Also, kann mir jemand helfen, für Audio-Aufnahme mit Format, das auch im Fenster & Dateigröße ist wenig niedrig gespielt.

Der Code, den ich unter versucht:

dirPaths = NSSearchPathForDirectoriesInDomains(
                NSDocumentDirectory, NSUserDomainMask, YES); 
    docsDir = [dirPaths objectAtIndex:0]; 
    NSString *soundFilePath = [docsDir 
           stringByAppendingPathComponent:@"sound.wave"]; 
    NSLog(@"%@",soundFilePath); 
    NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; 

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

    NSError *error = nil; 

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

    if (error) 
    { 
     NSLog(@"error: %@", [error localizedDescription]); 

    } else { 
     [audioRecorder prepareToRecord]; 
    } 
+0

Duplikat von http://stackoverflow.com/questions/4279311/how-to-record-voice-in-m4a-format? – nneonneo

+0

Aufnahme im Format M4a (MPEG-4 AAC). Weitere Informationen finden Sie unter http://stackoverflow.com/questions/4279311/how-to-record-voice-in-m4a-format. – nneonneo

Antwort

16

ich auch AVAudioRecorder zu verwenden, wurde versucht, Datei aufzeichnen Audio in einem AAC-Format codiert vorzugsweise in einem .m4a. Ich war schnell in der Lage, den Code zur Aufnahme in AAC innerhalb einer Kern-Audiodatei (.caf) zu bekommen, aber ich konnte AVAudioRecorder nicht richtig formatieren .m4a. Ich wollte gerade den Aufzeichnungscode in meiner Anwendung mithilfe der Audio Units-API der unteren Ebene neu schreiben, aber stattdessen stellte ich das auf den Prüfstand und fügte den Code für die gemeinsame Audio-Sitzung hinzu. Sobald das eingerichtet war, ging ich zurück und versuchte als .m4a zu speichern und es hat einfach funktioniert. Hier

ist einige Beispiel-Code:

NSArray *dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *docsDir = [dirPaths objectAtIndex:0]; 
NSURL *tmpFileUrl = [NSURL fileURLWithPath:[docsDir stringByAppendingPathComponent:@"tmp.m4a"]]; 
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys: 
         [NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey, 
         [NSNumber numberWithFloat:16000.0], AVSampleRateKey, 
         [NSNumber numberWithInt: 1], AVNumberOfChannelsKey, 
         nil]; 
NSError *error = nil; 
AVAudioRecorder *recorder = [[AVAudioRecorder alloc] initWithURL:tmpFileUrl settings:recordSettings error:&error]; 
[recorder prepareToRecord]; 

AVAudioSession *session = [AVAudioSession sharedInstance]; 
[session setCategory:AVAudioSessionCategoryRecord error:nil]; 
[session setActive:YES error:nil]; 

[recorder record]; 

Dann die Aufnahme beenden ich verwendet:

[recorder stop]; 
AVAudioSession *session = [AVAudioSession sharedInstance]; 
int flags = AVAudioSessionSetActiveFlags_NotifyOthersOnDeactivation; 
[session setActive:NO withFlags:flags error:nil]; 

Dann wird die Datei auf 'tmpFileUrl' können, wie Sie verwendet werden, bitte.

+0

'setActive: withFlags: error:' ist nach iOS 6 veraltet. Stattdessen können wir 'setActive: error:' verwenden (ohne Flags zu setzen). Es funktioniert gut für mich. – Vineeth

+0

Alter! Gespeichert mein Tag :) Ich mache eine App für mein Baby zu ihrem 1. Geburtstag, also sie dankt Ihnen <3 –

+0

Wechsel von kAudioFormatMPEG4AAC zu kAudioFormatMPEG4AAC, ändert Dateigröße von 1.3MB auf 45kb – Thiru

1
NSMutableDictionary *settings = [[NSMutableDictionary alloc] initWithCapacity:0]; 

[settings setValue :[NSNumber numberWithInt:kAudioFormatMPEG4AAC] forKey:AVFormatIDKey]; 
[settings setValue:[NSNumber numberWithFloat:8000.0] forKey:AVSampleRateKey]; 
[settings setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey]; 
[settings setValue :[NSNumber numberWithInt:8] forKey:AVLinearPCMBitDepthKey]; 
[settings setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey]; 
[settings setValue :[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey]; 

//Encoder 

[settings setValue :[NSNumber numberWithInt:12000] forKey:AVEncoderBitRateKey]; 
[settings setValue :[NSNumber numberWithInt:8] forKey:AVEncoderBitDepthHintKey]; 
[settings setValue :[NSNumber numberWithInt:8] forKey:AVEncoderBitRatePerChannelKey]; 
[settings setValue :AVAudioQualityMin   forKey:AVEncoderAudioQualityKey]; 
6

Hier sind meine Einstellungen für hohe Qualität und geringe Dateigröße (per Saldo):

NSDictionary *recordSettings = @{AVEncoderAudioQualityKey: @(AVAudioQualityMedium), 
           AVFormatIDKey: @(kAudioFormatMPEG4AAC), 
           AVEncoderBitRateKey: @(128000), 
           AVNumberOfChannelsKey: @(1), 
           AVSampleRateKey: @(44100)}; 

Diese Sie Mono AAC Spur eine nahezu CD-Qualität gibt. Sie sollten die Datei mit .m4a anhängen, um überall lesbar zu sein. Alle anderen Parameter werden auf Gerätevorgaben gesetzt, was in den meisten Fällen der Fall sein soll.

+0

Auch dies funktionierte gut - aber ist jetzt verzerrt mit iOS10, wenn es ein nennenswertes Niveau gibt. Verwenden von iPad Pro –