Ios 当使用AVAudioRecorder录制音频并设置导航栏动画时发生中断时,我们如何停止并保存录制?

Ios 当使用AVAudioRecorder录制音频并设置导航栏动画时发生中断时,我们如何停止并保存录制?,ios,nstimer,avaudiorecorder,Ios,Nstimer,Avaudiorecorder,我在录制开始时使用计时器设置导航栏的动画,并在录制停止时停止导航栏(使其类似于语音备忘录应用程序) 这是密码 //do nav bar animation _navigationImageCount = 0; self.navigationBarTimer = [NSTimer scheduledTimerWithTimeInterval:(2.0 / 28.0) target:self selector:@selector(changeNavigationBarImage:) userInfo

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

这是密码

//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];
}
我正在将录制保存到库目录下名为“MyRecordings”的目录下的一个文件中,如果打印该目录的内容,它将显示该文件,但是当我尝试打印时,它给出的持续时间为0

如果我尝试在该url播放该文件,它会给出错误代码1685348671(文件无效)

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

希望这有帮助

问题在线程中得到解决。您需要暂停并恢复音频队列。我在一年前就做过这个,我不记得确切的代码,但你会从这里知道的


原来这是计时器的问题

计时器每2.0/28.0=0.7秒调用一次。这就是问题的根源。 如果我将计时器持续时间增加到0.2,效果很好,但动画不是很平滑

计时器间隔为0.1时,它大部分时间工作,但并不总是如此。 它更容易在旧设备(第二代/第三代iPod)上复制

是不是操作系统无法通过计时器处理如此快速的更新


<> P>请问有谁能解释这个问题是什么?< / P >我已经看到了这个链接,没有更简单的方法吗?我以前也在做过这方面的工作,并用C++方法来处理中断。请分享代码。一旦我看了代码,我会尝试找出其他的东西我只是在我的ViewController中有一个AVAudioRecorder对象,我开始录制一个按钮动作。我正在停止录制另一个按钮动作,然后使用AVAudioPlayer播放该文件,但它给出了错误代码1685348671。如果您想要代码,我可以共享。您是否将文件保存在文档目录中?你能直接从你的Mac电脑播放音频文件吗?看起来您的音频文件已损坏。检查它是否在Mac上工作。我正在库目录中保存文件。在Mac上,它工作正常。由于我试图处理干扰,我必须在设备上试用。