2012-05-11 39 views
6

Tôi đang phát triển một ứng dụng iPhone có ghi âm ở định dạng .wav.Ứng dụng iPhone: ghi âm trong mp3

đây là mã

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

Trên code được ghi âm ở định dạng .wav. Nếu tôi muốn ghi lại âm thanh bằng MP3 bằng cách sử dụng phím kAudioFormatMPEGLayer3 (mp3) thay vì kAudioFormatLinearPCM (.wav) thì tôi cần phải thực hiện những thay đổi nào khác? thay đổi trong recordSetting điển như tỷ lệ mẫu, kênh và tất cả

hoặc Suggest bất kỳ định dạng âm thanh đó là tương thích với cả iPhone và Android, kích thước nhỏ hơn và có thể được ghi trực tiếp từ iPhone App

Xin vui lòng giúp và Suggest.

Cảm ơn.

Trả lời

23

Bạn không thể ghi trong MP3, nó là một định dạng độc quyền khi nói đến mã hóa ing. Đây là các thiết lập tôi sử dụng, nó đi ra tới ~ 150KB trong 2 phút của thời gian ghi:

chuyển đổi
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]; 

Cũng làm là một bộ xử lý hoạt động mãnh liệt, nếu bạn đang gửi âm thanh này đến một máy chủ, bạn có thể sử dụng FFMPEG với thư viện mp3lame để thực hiện chuyển đổi âm thanh trên máy chủ.

EDIT: đây là mã dành cho bản ghi Android, được đặt thành mã hóa AMR vì AAC chỉ được hỗ trợ như của 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

Cảm ơn bạn đã trợ giúp nhưng làm cách nào tôi có thể nhận tệp .AAC từ tệp này dưới dạng .m4a không được hỗ trợ trên android.Vui lòng cho tôi biết. – ios

+1

Đối tác phát triển Android của tôi đã cho tôi http://developer.android.com/guide/appendix/media-formats.html đó, bạn có thể thấy rằng bạn có thể mã hóa bằng AAC trên Android và lưu tệp .m4a để bạn có thể có cùng định dạng .m4a cho cả iOS và Android mà không gặp sự cố. – 8vius

+0

Được quản lý để giải quyết vấn đề của bạn, thưa bạn? – 8vius

1

Bạn không thể ghi âm trong tệp .mp3. kAudioFormatMPEGLayer3 chỉ dành cho playback the .mp3 format audio. Có no codec available for .mp3 recording. Bạn cần phải ghi ở định dạng aac hoặc wav và chuyển đổi nó thành định dạng .mp3.

Better kiểm tra liên kết dưới đây và hình ảnh:

Audio Recording Reference

enter image description here

Dưới đây là một liên kết để tìm hiểu sự cơ bản để chuyển đổi các định dạng âm thanh:

Audio Converter Reference

Các vấn đề liên quan