2012-05-21 28 views
4

我能够创建我想要的广告牌和广告代码的确切功能,但是当然会遇到延迟问题。因此,阅读在网络上几乎每一篇文章和审查的示例代码堆栈后,我仍然不知道如何实现以下目标:使用远程IO对设定长度的节拍器进行录制

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

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

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

我一直在使用音频单元和远程IO,并设置了回放回调和记录器回调等项目,但现在面临着如何根据上述说明进行工作的问题。我试图找出对于初学者以下的事情:

  1. 如果我创建一个1击败CAF文件,我怎么可以利用音频单元和远程IO的玩拍的X金额,然后停下来?
  2. 我怎么能这样做片头,并开始录制后的回调4次

谁能给我一些建议或点我在正确的方向。正如我所提到的,我已经做了一堆研究,包括购买核心有声读物,阅读atastypixel.com上的每篇文章,timbolstad.com等,并通过苹果文档进行浏览。

在此先感谢您的帮助。

+0

好问题。有人回答? –

+1

+1良好的问题,如果你找到答案你在回答中发布,以便其他人将从中受益。 – ajay

回答

-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++ 
    } 
相关问题