在使用 AVAudioRecorder 在为导航栏设置动画的同时录制音频时发生中断时,我们如何停止并保存录制?
Posted
技术标签:
【中文标题】在使用 AVAudioRecorder 在为导航栏设置动画的同时录制音频时发生中断时,我们如何停止并保存录制?【英文标题】:How do we stop and save a recording when an interruption occurs while recording audio using AVAudioRecorder while animating the navigation bar? 【发布时间】:2013-07-16 09:55:54 【问题描述】:我在录制开始时使用计时器为导航栏设置动画,并在录制停止时停止导航栏(使其类似于语音备忘录应用)。
这里是代码
//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(文件无效)。
如何正确保存录音的第一部分?
【问题讨论】:
【参考方案1】:希望这会有所帮助。
问题已在线程中解决。您需要暂停和恢复您的音频队列。一年前我已经研究过这个,我不记得确切的代码,但你会从这里知道。
how to resume recording after interruption occured in iphone?
【讨论】:
那个链接我看过了,有没有更简单的方法? 我之前也做过这方面的工作,并使用这个 C++ 方法来处理中断。请分享代码。一旦我会查看代码,我会尝试找出其他的东西 我的 ViewController 中只有一个 AVAudioRecorder 对象,我正在开始录制按钮操作。我正在停止录制另一个按钮操作,然后使用 AVAudioPlayer 播放文件,但它给出了错误代码 1685348671。如果你想要代码,我可以分享它。 您是否将文件保存在文档目录中?您可以直接尝试从 Mac 播放音频文件吗?看起来您的音频文件已损坏。检查它是否可以在 Mac 上运行 我将文件保存在库目录中。在 Mac 上它工作正常。由于我正在尝试处理中断,因此我必须在设备上进行尝试。【参考方案2】:原来这是计时器的问题。
计时器每 2.0 / 28.0 = 0.7 秒调用一次。这就是造成问题的原因。 如果我将计时器持续时间增加到 0.2,它可以正常工作,但动画不是很流畅。
使用 0.1 作为计时器间隔,它大部分时间都有效,但并非总是如此。 它更容易在旧设备(第 2 代/第 3 代 iPod)上重现。
是不是操作系统无法通过计时器处理如此快速的更新?
有人能解释一下可能是什么问题吗?
【讨论】:
以上是关于在使用 AVAudioRecorder 在为导航栏设置动画的同时录制音频时发生中断时,我们如何停止并保存录制?的主要内容,如果未能解决你的问题,请参考以下文章