在动画导航栏的同时使用AVAudioRecorder录制音频时,如何在发生中断时停止并保存录音?

时间:2013-07-16 09:55:55

标签: ios nstimer avaudiorecorder

我在录制开始时使用计时器为导航栏设置动画,并在录制停止时将其停止(使其类似于语音备忘录应用程序)。

这是代码

//do nav bar animation
_navigationImageCount = 0;
self.navigationBarTimer = [NSTimer scheduledTimerWithTimeInterval:(2.0 / 28.0) target:self selector:@selector(changeNavigationBarImage:) userInfo:nil repeats:YES];

- (void)changeNavigationBarImage:(NSTimer *)timer
{   
    NSMutableArray *navigationBarImages = [NSMutableArray arrayWithArray:@[@"nav_bar_01.png", @"nav_bar_02.png", @"nav_bar_03.png", @"nav_bar_04.png", @"nav_bar_05.png", @"nav_bar_06.png", @"nav_bar_07.png", @"nav_bar_08.png", @"nav_bar_09.png", @"nav_bar_10.png", @"nav_bar_11.png", @"nav_bar_12.png", @"nav_bar_13.png", @"nav_bar_14.png"]];
    [navigationBarImages addObjectsFromArray:[[navigationBarImages reverseObjectEnumerator] allObjects]];

    NSInteger imageIndex = _navigationImageCount % 28;
    [self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:navigationBarImages[imageIndex]] forBarMetrics:UIBarMetricsDefault];

    _navigationImageCount++;
}


- (void)audioRecorderBeginInterruption:(AVAudioRecorder *)recorder
{
    [recorder stop];
    [self.recordingTimer invalidate]; //timer used to update the UI
    [self.navigationBarTimer invalidate];
}

我正在将文件保存到Library目录下名为“MyRecordings”的目录中,如果打印该目录的内容则会显示该文件,但是当我尝试打印持续时间时,它会给出0。

如果我尝试在该网址播放该文件,则会显示错误代码1685348671(文件无效)。

如何正确保存录制的第一部分保存?

2 个答案:

答案 0 :(得分:0)

希望这有帮助。

问题在线程中解决了。你需要暂停&恢复你的音频队列。我已经在这一年工作了,我不记得确切的代码,但你会从这里想到。

how to resume recording after interruption occured in iphone?

答案 1 :(得分:0)

原来这是计时器的一个问题。

每2.0 / 28.0 = 0.7秒调用一次计时器。这就是造成这个问题的原因。 如果我将计时器持续时间增加到0.2,它工作正常,但动画不是很顺利。

0.1作为计时器间隔,它大部分时间都有效,但并非总是如此。 它在旧设备(第二代/第三代iPod)上更容易重现。

操作系统是否无法通过计时器处理此类快速更新?

有人可以解释一下这个问题吗?