使用AVAudioRecorder时出现问题

时间:2010-05-10 07:31:20

标签: iphone avaudiorecorder

我遇到了AVAudioRecorder的一个奇怪问题。在我的应用程序中,我需要录制音频并播放它。我正在创建我的播放器:

if(recorder)
{
if(recorder.recording)
[recorder stop];
[recorder release];
recorder = nil;
}

NSString * filePath = [NSHomeDirectory() stringByAppendingPathComponent: [NSString stringWithFormat:@"Documents/%@.caf",songTitle]];
        NSDictionary *recordSettings = [[NSDictionary alloc] initWithObjectsAndKeys:
                                        [NSNumber numberWithFloat: 44100.0],AVSampleRateKey,
                                        [NSNumber numberWithInt: kAudioFormatAppleIMA4],AVFormatIDKey,
                                        [NSNumber numberWithInt: 1], AVNumberOfChannelsKey,
                                        [NSNumber numberWithInt: AVAudioQualityMax],AVEncoderAudioQualityKey,nil];
        recorder = [[AVAudioRecorder alloc] initWithURL: [NSURL fileURLWithPath:filePath] settings: recordSettings error: nil];
        recorder.delegate = self;
if ([recorder prepareToRecord] == YES){
                [recorder record];

每次按下录制按钮,我都会发布并创建播放器。但问题是,AVAudiorecorder在开始录制之前需要一些时间,所以如果我连续多次按下录制按钮,我的应用程序会冻结一段时间。 当耳机连接到设备时,相同的代码工作正常没有任何问题...录制没有延迟,即使我多次按录制按钮,应用程序也不会冻结。

如果有人指导我纠正这个问题,那将是非常好的。  在这方面的任何帮助将受到高度赞赏。

提前完成。

2 个答案:

答案 0 :(得分:2)

得到了解决方案。我刚刚添加了代码

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
        NSError *err = nil;
        [audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err];
        if(err){
            NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
            return;
        }
        err = nil;
        [audioSession setActive:YES error:&err];
        if(err){
            NSLog(@"audioSession: %@ %d %@", [err domain], [err code], [[err userInfo] description]);
            return;
        }

现在工作正常。但是我想知道这段代码有什么区别?为什么我的应用程序在连接耳机时工作正常,但没有它们就冻结了。?

答案 1 :(得分:0)

是的,

[audioSession setCategory :AVAudioSessionCategoryPlayAndRecord error:&err];

是解决方案。它可以让你录制和播放音频。

关于耳机错误,这可能与财产有关

[[AVAudioSession sharedInstance] inputIsAvailable]