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

Posted

技术标签:

【中文标题】使用远程 IO 针对设定长度的节拍器录制【英文标题】:recording against a metronome of set length using remote IO 【发布时间】:2012-05-21 15:38:36 【问题描述】:

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

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

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

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

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

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

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

提前感谢您的帮助。

【问题讨论】:

好问题。有人回答吗? +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++ 
    

【讨论】:

以上是关于使用远程 IO 针对设定长度的节拍器录制的主要内容,如果未能解决你的问题,请参考以下文章

android如何计算每分钟的节拍数

如何在android中录制音频时做Visualizer

使用 SmartFace.io 录制音频(Android - Ios)

使用 HTML5 和 Javascript 录制/上传带有进度条的固定长度视频

如何从 MIDI 文件中提取速度

同时录制音频和播放 iPod?