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

Posted

技术标签:

【中文标题】如何播放具有确定持续时间的 MIDI 音符【英文标题】:How do a play a midi note with a determined duration 【发布时间】:2016-12-04 12:33:16 【问题描述】:

要播放,我正在使用 AVAudioUnitSampler:

            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)
            

什么是更好的解决方案? 谢谢

【问题讨论】:

你在使用 AVMIDIPlayer 吗?如果是这样,您应该在问题的标题中说明这一点 我正在使用 AVAudioUnitSampler,但我对其他方法持开放态度 【参考方案1】:

您可以创建 MusicSequence,其中的每个事件都将由 MusicPlayer 安排。

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

如果您想通过按下按钮来模拟音符打开并通过按钮释放来模拟音符关闭,请使用 MusicDeviceMIDIEvent。

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

您可能想阅读this 以了解有关使用 AVAudioUnitSampler 的更多信息。

【讨论】:

这个例子不是我要找的,因为我想为笔记设置一个预定的持续时间。我尝试使用 MusicSequence 和 MusicPlayer,但我得到了一个重要的延迟。有什么建议吗?

以上是关于如何播放具有确定持续时间的 MIDI 音符的主要内容,如果未能解决你的问题,请参考以下文章

MIDI.js 音符持续时间不会改变

如何在 Android 上播放非正弦音符?迷笛?

iOS如何播放midi音符?

在 Java 中从 Receiver 获取 midi 消息

使用 pygame.midi 播放 midi 音符时出现分段错误

在播放时捕捉 MIDI 音符?