【发布时间】:2012-04-18 21:25:37
【问题描述】:
当我的视图加载时,我通过以下方式设置了一个 AVAudioRecorder 实例:
AVAudioSession *audioSession = [AVAudioSession sharedInstance];
audioSession.delegate = self;
[audioSession setActive:YES error:nil];
[audioSession setCategory:AVAudioSessionCategoryRecord error:nil];
NSString *tempDir = NSTemporaryDirectory();
NSString *soundFilePath = [tempDir stringByAppendingPathComponent:@"sound.m4a"];
NSURL *soundFileURL = [NSURL fileURLWithPath:soundFilePath];
NSLog(@"%@", soundFileURL);
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];
NSError *error = nil;
self.recorder = [[AVAudioRecorder alloc]
initWithURL:soundFileURL
settings:recordSettings
error:&error];
self.recorder.delegate = self;
if (error) {
NSLog(@"error: %@", [error localizedDescription]);
} else {
[self.recorder prepareToRecord];
}
然后,当用户按下录制按钮时,我会这样做:
- (IBAction)record:(id)sender {
if (!self.isRecording) {
self.isRecording = YES;
[self.recorder record];
self.recordButton.enabled = NO;
}
}
然后停止录制/播放:
- (IBAction)stop:(id)sender {
if (self.isRecording) {
[self.recorder stop];
self.recordButton.enabled = YES;
self.isRecording = NO;
}
if (self.isPlaying) {
[self.player stop];
self.isPlaying = NO;
self.playButton.enabled = YES;
}
}
之后,我希望能够播放录制的内容,因此我执行以下操作:
- (IBAction)play:(id)sender {
NSError *error = nil;
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:self.recorder.url error:&error];
self.player.delegate = self;
if (error) {
NSLog(@"%@", error.localizedDescription);
} else {
self.isPlaying = YES;
[self.player play];
self.playButton.enabled = NO;
}
}
但是当我去播放文件时得到 OSStatus error -43 找不到文件。
顺便说一句,这一切都在设备上运行,在模拟器上尝试实例化记录器或播放器时出现错误,从我看来这是一个模拟器问题。
编辑 1: 我解决了 OSStatus 错误 -43 部分它与编码格式有关,我将格式注释掉并正确记录和播放文件,但我需要记录以压缩格式。有谁知道这个的设置吗?
编辑 2: 我设法找到了适用于压缩 AAC 音频的设置。一个 2 分钟的音频文件大小为 256KB,我更新了代码以反映当前状态。感谢所有回答您的帮助的人。
【问题讨论】:
-
也许该文件仍在被录音机使用,因此无法读取? (不过只是在黑暗中刺伤)
-
我相信在这种情况下会产生错误,当我点击停止时,记录器会停止,所以我非常怀疑。
-
对不起,如果我对此有点错误,因为我几乎没有使用任何与音频相关的课程,但是有
[self.player prepareToPlay]吗? -
问题:您是在设备上测试还是在模拟器中测试?如果是设备,是哪一个?
-
这是在设备上,iPhone 4 和 iOS 5.1
标签: ios avfoundation core-audio avaudioplayer avaudiorecorder