如何做一个播放MIDI音符具有确定的持续时间

问题描述:

播放我使用的是AVAudioUnitSampler:如何做一个播放MIDI音符具有确定的持续时间

  sampler.stopNote(note, onChannel: channel) 

但要停止我不想使用:

  DispatchQueue.main.asyncAfter(
       deadline: DispatchTime.now() + Double(Int64(0.7 * Double(NSEC_PER_SEC)))/Double(NSEC_PER_SEC)) 
      { 
       sampler.stopNote(note, onChannel: channel) 
      } 

什么是更好的解? 谢谢

+0

你在使用AVMIDIPlayer吗?如果是这样,你应该说,也许在你的问题的标题 –

+0

我使用AVAudioUnitSampler,但我打开替代方法 – Lucas

您可以创建一个MusicSequence,并且其中的每个事件都将由MusicPlayer调度。

您可以使用AVMIDIPlayer,但是您需要将MusicSequence转换为Data,因为它不直接使用MusicSequence。

如果您想通过按钮模拟注释并按下释放按钮,请使用MusicDeviceMIDIEvent。

let status = MusicDeviceMIDIEvent(midisynthUnit, noteCommand, noteNum, velocity, 0) 

您可能需要阅读this有关使用AVAudioUnitSampler更多信息。

+0

这个例子不是我正在寻找,因为我想设置一个预定的持续时间笔记。我尝试使用MusicSequence和MusicPlayer,但我得到了一个重要的延迟。任何提示呢? – Lucas