2012-05-11 30 views
6

Pracuję nad aplikacją na iPhone'a, która nagrywa audio w formacie .wav.Aplikacja na iPhone'a: ​​nagrywanie dźwięku w formacie mp3

Oto kod

NSMutableDictionary* recordSetting = [[NSMutableDictionary alloc]init];   
[recordSetting setValue :[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey]; 
[recordSetting setValue:[NSNumber numberWithFloat:11025.0] forKey:AVSampleRateKey];   
[recordSetting setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey]; 
[recordSetting setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey]; 




NSArray *path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, 
NSUserDomainMask, YES); 

    NSString *documentsDirectory = [path objectAtIndex:0]; 

    NSString *myDBnew = [documentsDirectory stringByAppendingPathComponent:@"test.wav"]; 

recordedTmpFile = [NSURL fileURLWithPath:myDBnew]; 

NSLog(@"Using File called: %@",recordedTmpFile); 

     recorder = [[ AVAudioRecorder alloc] initWithURL:recordedTmpFile settings:recordSetting error:&error]; 
     [recorder setDelegate:self]; 
     [recorder prepareToRecord]; 
     [recorder record]; 

Powyższy kod jest nagrywanie dźwięku w formacie .wav. Jeśli chcę nagrać dźwięk w formacie MP3 za pomocą klucza kAudioFormatMPEGLayer3 (mp3) zamiast kAudioFormatLinearPCM (.wav), jakie inne zmiany muszę wprowadzić? Zmiany w recordSetting słownika jak częstotliwość próbkowania, kanał i wszystko

lub zaproponować dowolny format audio, który jest kompatybilny zarówno z iPhone i Androida, mniejszy i może być nagrany bezpośrednio z iPhone App

proszę o pomoc i sugerują.

Dzięki.

Odpowiedz

23

Nie można nagrywać w formacie MP3, jest to zastrzeżony format, jeśli chodzi o kodowanie ing. Są to ustawienia używam, to wychodzi na ~ 150 KB do 2 minut czasu nagrywania:

NSString *tempDir = NSTemporaryDirectory(); 
NSString *soundFilePath = [tempDir stringByAppendingPathComponent:@"sound.m4a"]; 

NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath]; 
NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys: 
            [NSNumber numberWithInt:kAudioFormatMPEG4AAC], AVFormatIDKey, 
            [NSNumber numberWithInt:AVAudioQualityMin], AVEncoderAudioQualityKey, 
            [NSNumber numberWithInt:16], AVEncoderBitRateKey, 
            [NSNumber numberWithInt: 1], AVNumberOfChannelsKey, 
            [NSNumber numberWithFloat:8000.0], AVSampleRateKey, 
            [NSNumber numberWithInt:8], AVLinearPCMBitDepthKey, 
            nil]; 

robi także konwersja jest procesor intensywne działanie, jeśli wysyłasz ten dźwięk do serwera można użyć FFMPEG z biblioteką mp3lame, aby przeprowadzić konwersję audio na serwerze.

EDIT: jest to kod do nagrywania Android, to ustawienie kodowania AAC AMR ponieważ jest obsługiwany tylko z Honeycomb.

mediaRecorder = new MediaRecorder(); 
mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); 
mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); 
mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); 
mediaRecorder.setAudioChannels(1); 
mediaRecorder.setOutputFile("sample.m4a"); 
+0

Dzięki za pomoc, ale w jaki sposób mogę uzyskać plik .aac od tego jak .m4a nie jest obsługiwana w android.Please daj mi znać. – ios

+1

Mój partner programisty Android dał mi ten http://developer.android.com/guide/appendix/media-formats.html tam możesz zobaczyć, że możesz kodować w AAC na Androida i zapisywać plik .m4a, abyś mógł mieć taki sam format .m4a dla systemu iOS i Androida bez problemu. – 8vius

+0

Zarządzane, aby rozwiązać twój problem, koleś? – 8vius

1

Nie można nagrywać dźwięku w pliku .mp3. kAudioFormatMPEGLayer3 jest tylko dla playback the .mp3 format audio. Jest no codec available for .mp3 recording. Potrzebujesz rekordu w formacie aac lub wav i przekształcić go w format .mp3.

Lepiej sprawdzić poniższy link i obrazów:

Audio Recording Reference

enter image description here

Tu jest link, aby dowiedzieć się podstawowym do konwersji formatu audio:

Audio Converter Reference