4

我能够创建我想要的 avaudioplayer 和 avaudiorecorder 的确切功能,但当然遇到了延迟问题。因此,在阅读了网络上的几乎所有文章并查看了大量示例代码之后,我仍然不确定如何实现以下目标:

  1. 用户选择使用预卷/倒计时录制 2 小节长(每小节 4 拍)的样本
  2. 用户点击记录
  3. 节拍器开始,以 4 拍计(第一拍重音)
  4. 该应用程序会在下一个小节开始时自动开始录制
  5. 应用程序在第 3 小节结束时自动关闭录制(2 小节 + 前贴片)
  6. 然后,用户可以播放他们的录音或删除它并重新开始。

因此,使用 avaudioplayer 和 avaudiorecorder,我只需使用 audacity 将节拍器设置为正确的 bpm(为应用程序设置 bpm)创建了一个“caf”。然后我设置并播放 avaudioplayer 并使用 audiodidfinishsuccessfully 委托方法,执行一些逻辑来启动录音机,重新启动播放器,保持循环计数等以关闭录音和音频。

正如我所提到的,我几乎能够实现我所追求的用户体验,但延迟问题是不可接受的。

我一直在使用音频单元和远程 IO,并设置了一个带有播放回调和记录器回调等的项目,但现在面临如何根据上述描述进行这项工作的问题。我正在尝试为初学者解决以下问题:

  1. 如果我创建一个 1 beat caf 文件,我如何利用音频单元和远程 IO 播放 x 节拍然后停止?
  2. 我如何进行前卷并在 4 拍后开始录音回调

谁能给我一些想法或指出我正确的方向。正如我所提到的,我已经进行了大量研究,包括购买核心有声读物,阅读 atastypixel.com、timbolstad.com 等上的每篇文章,并浏览了苹果文档。

在此先感谢您的帮助。

4

1 回答 1

-1

我启动了一个 NSTimer。使用基于 BPM(每分钟节拍数)/60 的值。因此,如果用户想要记录一个包含计数的 2 小节文件,可能会执行以下操作:

//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++ 
    }
于 2014-03-21T16:12:37.870 回答