以AAC格式录制和播放声音

时间:2014-06-06 22:41:51

标签: iphone objective-c avfoundation avaudioplayer avaudiorecorder

我正在尝试使用iPhone麦克风录制声音并在扬声器上播放声音(如果插入耳机则播放耳机)。

目前我使用此设置和音频播放功能......虽然它不会在手机的底部(响亮)扬声器上播放,而是在前置摄像头附近的耳机上播放:

NSString *tempDir = NSTemporaryDirectory();
NSString *soundFilePath = [tempDir stringByAppendingPathComponent:@"sound.caf"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];

NSDictionary *recordSettings = @{AVEncoderAudioQualityKey:  [NSNumber numberWithInt:AVAudioQualityMin],
                                 AVEncoderBitRateKey:       @16,
                                 AVNumberOfChannelsKey:     @2,
                                 AVSampleRateKey:           @44100.0};

NSError *error = nil;
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];
_audioRecorder = [[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recordSettings error:&error];

我尝试过这样的事情:(更改了文件扩展名并将AVFormatIDKey添加到设置中)

NSString *soundFilePath = [tempDir stringByAppendingPathComponent:@"sound.aac"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];

// Set settings for audio recording
NSDictionary *recordSettings = @{AVFormatIDKey:             [NSNumber numberWithInt:kAudioFormatMPEG4AAC],
                                 AVEncoderAudioQualityKey:  [NSNumber numberWithInt:AVAudioQualityMin],
                                 AVEncoderBitRateKey:       @16,
                                 AVNumberOfChannelsKey:     @2,
                                 AVSampleRateKey:           @44100.0};

但后来我得到了:

Error: The operation couldn’t be completed. (OSStatus error 2003334207.)

如果我将文件扩展名更改为.caf,则不报告错误,但不会播放任何内容。

这是播放代码:

NSError *error;
_audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:_audioRecorder.url error:&error];
_audioPlayer.delegate = self;
if (error)  NSLog(@"Error: %@", [error localizedDescription]);
else        [_audioPlayer play];

简而言之,如何使用iPhone扬声器(或插入耳机时)录制和播放aac文件?

------------------编辑-----------------

使用此设置将其保存到.aac文件:

NSDictionary *recordSettings = @{AVFormatIDKey: @(kAudioFormatMPEG4AAC),
        AVEncoderAudioQualityKey: @(AVAudioQualityMin),
        AVSampleRateKey: @16000.0,
        AVNumberOfChannelsKey: @1};

现在我只需要在扬声器上播放,这样用户就可以实际听到录制的内容

0 个答案:

没有答案