使用远程 IO 对设定长度的节拍器进行录制



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

  1. 用户选择录制 2 小节长(每小节 4 拍(的样本,并进行预滚动/计数
  2. 用户点击记录
  3. 节拍器开始计数 4 拍(第一拍重音(
  4. 该应用程序在下一个栏的开头自动开始录制
  5. 该应用程序会自动关闭第 3 小节末尾的录制(2 小节 + 前贴片(
  6. 然后,用户可以播放其录制内容或删除录制内容并重新开始。

因此,使用avaudioplayer和avaudiorecorder,我只是使用大胆创建了一个"caf",节拍器设置为正确的bpm(为应用程序设置了bpm(。然后,我设置并播放 avaudioplayer 并使用 audiodidfinish成功委托方法,执行一些逻辑来启动录音机、重新启动播放器、维护循环计数等以关闭录音和音频。

正如我所提到的,我

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

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

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

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

提前感谢您的帮助。

我启动了一个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++ 
    }

相关内容

  • 没有找到相关文章

最新更新