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 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Physicists Measure Pressure Distribution inside Proton

flink和spark Streaming中的Back Pressure

c_cpp I2C_pressure_sensor.c

UVALive - 6267 Beer Pressure

如何使用 Audiokit 发送 midi poly pressure 消息?

Trump signed presidential directive ordering actions to pressure North Korea