7

我正在开发一个以 .wav 格式录制音频的 iPhone 应用程序。

这是代码:

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

上面的代码是以 .wav 格式录制音频。如果我想使用 keykAudioFormatMPEGLayer3(mp3)而不是在 MP3 中录制音频,kAudioFormatLinearPCM(.wav)我还需要进行哪些其他更改?recordSetting 字典中的变化,如采样率、通道和所有。

或者建议任何兼容 iPhone 和 Android 的音频格式,体积更小,可以直接从 iPhone 应用程序录制。

4

2 回答 2

25

您不能在 MP3 中录制,它在编码方面是一种专有格式。这些是我使用的设置,2 分钟的录制时间约为 150KB:

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

转换也是处理器密集型操作,如果您将此音频发送到服务器,您可以使用 FFMPEG 和 mp3lame 库在服务器上进行音频转换。

编辑:这是 Android 录制的代码,它设置为 AMR 编码,因为只有 Honeycomb 才支持 AAC。

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");
于 2012-05-11T14:30:55.610 回答
4

您不能在 .mp3 文件中录制音频。kAudioFormatMPEGLayer3只为playback the .mp3 format audio。有no codec available for .mp3 recording。您需要记录aacwav格式化并将其转换为.mp3格式。

最好查看以下链接和图片:

录音参考

在此处输入图像描述

这是一个学习转换音频格式的基础知识的链接:

音频转换器参考

于 2012-05-11T14:25:46.553 回答