2011-11-03 81 views
1

我可以播放聲音,就像這樣:我怎麼能讓聲音的音量慢慢下降?

channel.noteOn(noteNumber, velocity); 

,我停止聲音,就像這樣:

channel.noteOff(noteNumber); 

但soundoff應該停止,當音量爲0,所以這樣的:在聲音播放2000毫秒,比聲音的音量會下來在1000毫秒(1000毫秒後的體積爲0),比聲音將停止 ,我發現這個代碼:

channel.noteOff(noteNumber, velocity); 

但它沒有做任何voltentown effekt。 請幫助我! 謝謝

+1

您可能想在此使用術語「淡出」。它會更清晰一點。 –

回答

-1

檢查the JavaDoc for that method。它聲明效果可能取決於使用的儀器。所以你可能想試驗不同的儀器,看看會發生什麼。

無論如何,我認爲方法setPolyPressure可能更符合你的要求。但是,要實現平滑淡出,您需要多次調用該方法並減小壓力。這需要使用Timer或其他一些異步實用程序。看起來有點尷尬,但我沒有看到任何可以在整個Java midi界面中直接使用的東西。

+0

我看到:「...通常用於改變諸如VOLUME這樣的特徵...」, 但我不能這樣做,我寫下這段代碼:channel.setPolyPressure(noteNumber,100),但沒有任何改變: ( 我寫的channel.noteon ..代碼之前,然後,但不工作:(如何???? :( – victorio

+0

@victorio我並不是所有熟悉MIDI,但我會玩今天稍晚些時候,看看我是否可以淡入淡出,同時,SSteve的回答與官方MIDI規範網站上的建議是一致的,所以看看你能用這個做什麼 –

+0

聚反應(壓力)沒有任何東西 – Brad

0

如果將音色編程爲響應音符關閉速度,在音符關中使用速度僅起作用。我不確定您的系統有多可編程,但您可能會注意到速度會影響振幅包絡的釋放時間。

如果這不是一個選項,試試卷(控制器7)和表達式(控制器11)。它們的影響在於它們會影響該頻道上的每個音符。

+0

可以給我一個例子??? – victorio

+0

我近十年來沒有用過Java,所以我不知道你要用的語法,但是你會發送一個帶有控制器的控制器事件7或11以及從0(無聲)到1的值27(最大音量)。它們將影響在該頻道上播放的所有音符。如果你想要一個平穩的改變,你需要設置一個定時器來發送多個減少值的命令。 – SSteve

1

有兩種方法可以做到這一點。

第一個(也是推薦的)方法是調整envlope:使用CC72設置release time。通過大部分合成器,您可以調整此參數以選擇該音符將在發佈後淡出多長時間。

第二種方法是使用CC7簡單地降低通道的音量。

您選擇哪種方法取決於您的需求。

相關問題