簡體   English   中英

使用遠程IO根據設定長度的節拍器錄音

[英]recording against a metronome of set length using remote IO

我能夠為avaudioplayer和avaudiorecorder創建所需的確切功能,但是當然遇到了延遲問題。 因此,在閱讀了網上的幾乎所有文章並查看了示例代碼的堆棧之后,我仍然不確定如何實現以下目標:

  1. 用戶選擇錄制2根長的樣本(每小節4個節拍),並進行預卷/簽到
  2. 用戶點擊記錄
  3. 節拍器開始時計為4拍(第一拍為重音)
  4. 該應用程序會在下一個小節的開頭自動開始記錄
  5. 該應用程序會自動關閉第三個小節(2個小節+預卷)末尾的錄制
  6. 然后,用戶可以回放其記錄或將其刪除,然后重新開始。

因此,使用avaudioplayer和avaudiorecorder,我僅使用audacity創建了一個“ caf”,並將節拍器設置為正確的bpm(為應用程序設置了bpm)。 然后,我設置並播放avaudioplayer,並使用audiodidfinishsuccessally委托方法,執行一些邏輯以啟動記錄器,重新啟動播放器,維護循環計數等以關閉記錄和音頻。

如前所述,我幾乎可以實現我所追求的用戶體驗,但是延遲問題是不可接受的。

我一直在使用音頻單元和遠程IO,並且已經設置了帶有回放回調和錄音機回調等的項目,但是現在根據上面的描述面臨着如何使這項工作起作用的問題。 我正在嘗試為初學者解決以下問題:

  1. 如果我創建一個1節拍的caf文件,如何使用音頻單元和遠程IO播放x個節拍然后停止?
  2. 4拍后我該如何做預卷並開始錄音回調

任何人都可以給我一些想法或指出正確的方向。 正如我已經提到的,我已經進行了一系列研究,包括購買核心音頻書,閱讀atastypixel.com,timbolstad.com等上的每篇文章,並瀏覽了Apple文檔。

在此先感謝您的幫助。

我啟動一個NSTimer。 使用基於BPM(每分鍾的跳動數)/ 60的值。因此,如果用戶想記錄一個2 bar的文件,則可能需要執行以下操作:

//timer interval=100BPM/60secs per minute
timerInterval=100/60;

    metroTimer = [NSTimer scheduledTimerWithTimeInterval:timerinterval target:self selector:@selector(blinkMetroLight) userInfo:nil repeats:YES];




 - (void)blinkMetroLight
    {

        if(beatNumber == 0)
        {
            beatNumber = 1;


        }
        else if (beatNumber == 5)
        {
            [self audioProcessorStart];
        }
        if (beatNumber == 8)
        {

                [self audioProcessorStop];
                [metroTimer invalidate]; metroTimer = nil;
        }

    beatNumber++ 
    }

暫無
暫無

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

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