如何做一个播放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)
}
什么是更好的解? 谢谢
答
您可以创建一个MusicSequence,并且其中的每个事件都将由MusicPlayer调度。
您可以使用AVMIDIPlayer,但是您需要将MusicSequence转换为Data,因为它不直接使用MusicSequence。
如果您想通过按钮模拟注释并按下释放按钮,请使用MusicDeviceMIDIEvent。
let status = MusicDeviceMIDIEvent(midisynthUnit, noteCommand, noteNum, velocity, 0)
您可能需要阅读this有关使用AVAudioUnitSampler更多信息。
+0
这个例子不是我正在寻找,因为我想设置一个预定的持续时间笔记。我尝试使用MusicSequence和MusicPlayer,但我得到了一个重要的延迟。任何提示呢? – Lucas
你在使用AVMIDIPlayer吗?如果是这样,你应该说,也许在你的问题的标题 –
我使用AVAudioUnitSampler,但我打开替代方法 – Lucas