2010-10-06 123 views
0

[我做在Java中這項工作,但我認爲這個問題是語言無關。]調整MIDI音符音量

我有一個MIDI音符開量(稱爲「數據2」,它的0-127)說我正在用推子調整(0到127)。在「數學」我使用的是簡單的:

newData2 = oldData2 * faderVolume/127; 

零完美的作品,和127確實太少,但接近區間底部的體積實在是太響,尤其是較大的音符。什麼可能是一個不同於線性關係的關係(在僞代碼中會很棒)?當然,我將不得不將它們插入代碼並嘗試它們。

我意識到這個問題取決於正在播放Note Ons的樂器(Ableton Live中的BFD套件,它沒有多少通知),但也許沒有,也許還有一種標準的方法來調整Midi Note On音量與推子。

+1

有使用浮動數據和整數數據(計算它使很大的差異)的差。 'newData2'是一個整數嗎? – 2010-10-06 15:58:02

+0

@精英紳士,是的,這是我現在看到的問題的一部分。這是一個整數。但是,這能解釋我遇到的問題嗎? – 2010-10-06 16:00:49

+1

是的,因爲你錯過了十進制值(這可能會影響你的結果)。 – 2010-10-06 16:19:40

回答

1

正如我對我的評論所說的,在播放聲音或音頻或任何可聽技術時,寧願使用雙打或浮動(取決於硬件或API規範)。

您正在返回一個整數newData2。而是將其轉換爲double或float(用於精度)。

例如

float newData2 = (float)oldData2 * (float)faderVolume/(float)127; 

希望這會有所幫助。

+0

謝謝,這似乎有所幫助,但我將不得不憑經驗嘗試。只是嘗試一些數字,差異不會大於1,儘管它佔所有組合的約15%的最終音量的10%以上。如果這不起作用,我會需要更cur娜的東西。 – 2010-10-06 16:44:22

3

您的等式是正確的。您正在以線性方式計算相對於推子的音符開啓速度。一對夫婦筆記...

您正在調整的參數是速度。這並不一定意味着音量!這兩者確實對大多數合成器(包括Ableton的鼓組套件)有關聯,但它可能與您想象的音量無關。

0速度相當於音符關閉,永遠不會播放聲音。我這樣說是因爲如果0和1之間的差別很重要,那麼可能是因爲您認爲速度參數不會影響音量。

最後,傳統的混音推子使用對數律。你可以試試這個,但是我認爲你會用音量吠叫錯誤的樹。

沒有爲你應該爲體積使用信道體積MIDI消息,那就是CC 7.

+0

非常感謝,@Brad +1。關於吠叫和樹木:不幸的是我無法觸摸通道音量,因爲我的「推子」控制着通過同一通道播放的音符組的MIDI音量。無論如何,現在這一切都變得更好了,因爲我已經消除了早期鑄造造成的舍入問題。儘管我可能會嘗試一種邏輯關係 – 2010-11-04 17:49:58