我有以下情况:在我的应用程序中,我已经创建了虚拟MIDI端口,如“音频工具包”页面上的一些示例中所述。 我使用midi来触发AKMIDISampler和AKMIDISampler为打击乐器加载.aupresets。我在AULAB中创建了.aupresets,因此NOTE OFF应该被忽略。 因此,下一次打击时,样本可能会淡出,并且不会被剪切掉。 它可以与我的MIDI键盘和某些其他硬件MIDI控制器一起使用。 MIDI NOTE OFF被忽略,先前的声音可能淡出,并且声音重叠良好。但是,当我将我的应用程序加载到AudioBus并使用音序器通过虚拟MIDI触发它时,每个新采样总是会切断前一个采样。听起来很不自然,应该更改。
虚拟MIDI与非虚拟MIDI有何区别?我在做什么错?如何在两个级别上获得相同的行为?任何帮助表示赞赏!谢谢!
//open midi ports
let midi = AudioKit.midi
midi.createVirtualPorts()
midi.openInput(name: "Session 1")
midi.addListener(self)
//Play Sampler
func receivedMIDINoteOn(noteNumber: MIDINoteNumber, velocity: MIDIVelocity, channel: MIDIChannel) {
do {
try self.myMIDISampler.play(noteNumber: myNote, velocity: velocity, channel: myMIDIChannel)
} catch {
AKLog("Can't play the file, error:\(error)")
}
}
在虚拟midi和硬件midi命令上应该具有相同的结果。 原则上,我认为我需要一种方法来忽略/过滤所有级别的Midi音符。 那也可能是一个解决方案。
答案 0 :(得分:0)
@ user3491466,
在没有看到整个Xcode项目和从AU Lab保存的.aupreset的情况下,是否可以尝试在参数菜单中增加图层的“发布时间”,以便样本继续播放而不被截断?< / p>
请告诉我这是否有帮助。请确保还签出AudioKit Synth One开源项目中的Audiobus SDK和关联的类。这样,您可以查看是否有任何其他设置。