Java 我怎样才能得到声音';你的音量慢下来了吗?

Java 我怎样才能得到声音';你的音量慢下来了吗?,java,audio,midi,volume,fadeout,Java,Audio,Midi,Volume,Fadeout,我可以播放这样的声音: channel.noteOn(noteNumber, velocity); channel.noteOff(noteNumber); 我停止了声音,就像这样: channel.noteOn(noteNumber, velocity); channel.noteOff(noteNumber); 但是当音量为0时,发声应该停止,例如:声音播放2000ms,然后声音的音量在1000ms后下降(1000ms后音量为0),然后声音停止 我发现这个代码: channel.no

我可以播放这样的声音:

channel.noteOn(noteNumber, velocity);
channel.noteOff(noteNumber);
我停止了声音,就像这样:

channel.noteOn(noteNumber, velocity);
channel.noteOff(noteNumber);
但是当音量为0时,发声应该停止,例如:声音播放2000ms,然后声音的音量在1000ms后下降(1000ms后音量为0),然后声音停止 我发现这个代码:

channel.noteOff(noteNumber, velocity);
但它不会产生任何体积下降效应。 请帮帮我!! 谢谢检查。它指出,效果可能取决于使用的仪器。所以你可能想用不同的仪器进行实验,看看那里发生了什么


不管怎样,我认为这个方法可能更符合你们的要求。但是,要实现平滑淡出,需要在压力降低的情况下多次调用该方法。这需要使用
计时器
或其他异步实用程序。看起来有点尴尬,但我只是看不到在整个Java midi界面中有任何可直接使用的东西。

只有当补丁编程为响应Note Off velocity时,在Note Off中使用velocity才会起作用。我不确定您的系统的可编程程度,但您可能会有注释速度影响振幅包络的释放时间


如果这不是一个选项,请尝试使用音量(控制器7)和表达式(控制器11)。折衷的办法是,它们会影响该频道上的每个音符。

有两种方法可以做到这一点

第一种(也是推荐的)方法是调整envlope:使用
CC72
设置。对于大多数Synth,您可以调整此参数,以选择该音符在发行后淡出的时间

第二种方法是使用
CC7
简单地降低通道的音量


您选择哪种方法取决于您的需要。

您可能希望在此处使用“淡出”一词。这会更清楚一点。我看到:“…通常用于改变音量等功能…”,但我做不到,我写了以下代码:channel.setPolyPressure(noteNumber,100),但没有任何变化:(我在channel.noteon.之前写过,之后写过,但不起作用:(如何??:(@victorio我对MIDI不太熟悉,但今天晚些时候我会再讨论一下。看看我是否可以进行淡入淡出。同时,SSteve的答案与官方MIDI规范网站上的建议一致,所以看看你能用它做些什么。Poly aftertouch(压力)与此无关。我已经将近十年没有使用Java了,所以我不知道您会使用什么语法,但您会使用控制器7或11发送一个控制器事件,值从0(静默)到127(最大音量)。它们将影响该频道上播放的所有音符。如果希望平滑更改,则需要设置计时器以发送多个值递减的命令。