簡體   English   中英

在為導航欄設置動畫時使用AVAudioRecorder錄制音頻時發生中斷時,我們如何停止並保存錄制內容?

[英]How do we stop and save a recording when an interruption occurs while recording audio using AVAudioRecorder while animating the navigation bar?

我在錄制開始時使用計時器為導航欄設置動畫,並在錄制停止時停止使用它(使其類似於“語音備忘錄”應用程序)。

這是代碼

//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(文件無效)。

如何正確保存錄音的第一部分?

希望這可以幫助。

問題在線程中解決。 您需要暫停並恢復音頻隊列。 我在這一年前就從事過這項工作,我不記得確切的代碼,但是您將從這里開始。

iPhone發生中斷后如何恢復錄音?

原來這是計時器的問題。

每2.0 / 28.0 = 0.7秒調用一次計時器。 這就是導致問題的原因。 如果我將計時器持續時間增加到0.2,則效果很好,但動畫效果不是很流暢。

使用0.1作為計時器間隔,它在大多數時間都有效,但並非總是如此。 在較舊的設備(第2代/第3代iPod)上更容易復制。

是操作系統無法通過計時器處理如此快速的更新嗎?

有人可以解釋這個問題是什么嗎?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM