Aftertouch / Pressure Midi 命令在 AVFoundation 中不起作用
Posted
技术标签:
【中文标题】Aftertouch / Pressure Midi 命令在 AVFoundation 中不起作用【英文标题】:Aftertouch / Pressure Midi command not working in AVFoundation 【发布时间】:2015-10-18 18:06:46 【问题描述】:我正在使用 AVAudioUnitSampler 播放一些 MIDI 声音,我已加载声音字体并成功使用开始音符、停止音符和应用弯音 MIDI 命令。我现在正在尝试合并触后或压力命令,因为它在 AVFoundation 中被调用。
所以我的代码大致如下(简化):
self.midiAudioUnitSampler.startNote(60, withVelocity: 60, onChannel: 0)
//some time later...
self.midiAudioUnitSampler.sendPressure(20, onChannel: 0)
音符正在嗡嗡作响,但发送压力命令似乎对声音输出没有影响。我曾尝试使用发送压力和 sendPressureForKey 并没有运气。
我做错了什么还是我误解了 sendPressure 的作用?我希望它在播放后会改变音符的音量。
顺便说一句,我有一个正在播放音符的设置,并且我有一个单独的控件,可以在音符播放开始后的某个时间向 samplee 发射压力命令。
【问题讨论】:
【参考方案1】:我的猜测是采样器不知道如何处理触后消息。如果您想更改音符的音量(以及播放的任何其他音符),您可以将值发送到参数 7(音量):
self.midiAudioUnitSampler.sendController(7, withValue: 20, onChannel: 0)
根据我的经验,我感觉采样器确实响应 MIDI 控制器 7。
【讨论】:
感谢我也得出了同样的结论,我认为廉价的 .sf2 文件中没有这些数据。虽然不知道参数 7,但您对正常工作有一个很好的参考吗? 不幸的是我没有,但我发现 CC#11(表达式)也可以。音量 (7) 通常只在每个 MIDI 通道的歌曲开头使用一次,而表达式 (11) 用于在您播放时创建动态音量,例如渐强。采样器还会对 Pan (10)、Sustain (64)、Sostenuto (66)、All Notes Off (120) 和 All Controllers Off (121) 做出反应。以上是关于Aftertouch / Pressure Midi 命令在 AVFoundation 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章