若要進行階梯式隨機調變,請以固定間隔選取新數值,並在兩次更新之間維持該數值。這套 REAPER 工作流程會使用合成音和小型自訂 JSFX 增益效果,以明確指定的持續時間與範圍建立隨機音量階梯。

此任務刻意限定範圍:讓一個持續音以不可預測的方式改變音量,而不是在不同音量之間連續滑動。下方的自動化方法需要複製一次完整的效果程式。後續章節會說明如何使用 REAPER 原生自動化包絡線建立可編輯、可重複的階梯。

隨機調變如何形成階梯?

有三個選擇會決定結果:數值何時改變、選取哪個新數值,以及效果如何移至該數值。在這套工作流程中,時間間隔固定、音量為偽隨機值,且轉換立即完成。兩次更新之間,增益維持不變。

例如,可以先維持 −15 dB 達 250 毫秒,接著跳至 −9 dB 並維持下一個 250 毫秒,再跳至 −18 dB。這些數字僅用來說明行為,並非測量值,也不代表保證產生的輸出序列。

REAPER 的參數調變系統提供一種 LFO,並具備 Speed、Strength、Phase 和方向控制。其自動化系統則另外提供 Square 包絡線點。這是兩種不同工具:LFO 速度控制調變速率,而方波包絡線區段則定義各點之間維持的數值。請參閱 Up and Running: A REAPER User Guide 的第 18 和 19 章。

下方的自訂效果會在程式碼中明確指定維持行為。它會直接處理立體聲增益;不會設定適用於其他所有外掛參數的通用階梯式隨機來源。

準備持續的合成音

先建立空白 REAPER 專案並新增一條軌道。將 ReaSynth 加入該軌道的 FX 鏈。REAPER 文件指出,ReaSynth 是可透過 MIDI 物件演奏的合成器,因此不需要錄音或外部音訊檔。它的控制項包括輸出音量、延音和波形混合。The REAPER Cockos Effects Summary Guide, ReaSynth。

使用以下簡易音源設定:

  1. 將專案速度設為 120 BPM,並在 4/4 拍中使用四小節段落。
  2. 選取軌道,並建立涵蓋這四小節的時間選取範圍。
  3. 選擇 Insert → New MIDI Item。
  4. 按兩下 MIDI 物件以開啟 MIDI 編輯器。繪製一個音符,並將其右邊緣延伸至物件末端。
  5. 在 ReaSynth 中,先將 Volume 設為約 −12 dB,並將 Sustain 設為 0 dB。將 Square mix、Sawtooth mix 和 Triangle mix 保持在零,以得到簡單的音色。

MIDI 物件的建立與編輯流程記載於 REAPER User Guide 第 13 章。這裡的速度、持續時間和音量都是範例設定,並非應用程式的必要條件。

加入調變之前,先播放這段內容。確認軌道會產生持續音。如果聲音提早停止,請檢查音符長度和延音設定。當音源本身維持穩定音量時,會更容易評估音量變化。

加入能維持各隨機音量的效果

JSFX 是 REAPER 內建的文字程式效果系統。REAPER 會在載入時編譯這些效果;此範例不需要外部程式庫。其結構遵循官方 JSFX Programming 參考資料。

開啟 View → FX Browser。在瀏覽器的 FX 選單中,選擇 Create new JS FX,並為效果取一個獨特名稱,例如 Stepped Random Gain。使用 Edit JS FX 開啟其原始碼,將範本內容替換為下方完整程式,然後儲存。這些建立與編輯指令記載於 REAPER User Guide 第 16.16 節。

desc:Stepped Random Gain
slider1:250<20,2000,1>Step duration (ms)
slider2:-18<-60,0,0.1>Level endpoint A (dB)
slider3:-6<-60,0,0.1>Level endpoint B (dB)
in_pin:Left
in_pin:Right
out_pin:Left
out_pin:Right

@init
remaining = 0;
gain = 1;

@slider
interval_samples = max(1, floor(srate * slider1 / 1000 + 0.5));
low_db = min(slider2, slider3);
high_db = max(slider2, slider3);
remaining = 0;

@sample
remaining <= 0 ? (
  level_db = low_db + rand(1) * (high_db - low_db);
  gain = 10 ^ (level_db / 20);
  remaining = interval_samples;
);

spl0 *= gain;
spl1 *= gain;
remaining -= 1;

這是完整的立體聲音訊效果,不是程式片段。將它加在軌道 FX 鏈中的 ReaSynth 之後。如果看不到效果名稱,請清除 FX 瀏覽器的搜尋篩選條件。

程式使用 rand(1) 取得偽隨機值,並將該值映射至兩個 dB 端點之間。此語言的條件語法、指數運算子和隨機函式記載於 JSFX Programming Reference — Language Essentials。

計數器使用 srate,也就是 REAPER 的目前取樣率。每個樣本都會套用同一個已儲存增益,直到計數器到期。兩個聲道都會套用該增益,因此此效果不會各自隨機化左右聲道的音量。REAPER 在 JSFX Programming Reference — Special Variables 中說明了 srate、spl0 和 spl1。

我們已根據這些參考資料檢視程式。也另外在 44.1 和 48 kHz 下檢查了計數器運算;本文並未在 REAPER 中執行此 JSFX。

設定階梯持續時間和音量範圍

先將 Step duration (ms) 設為 250、Level endpoint A (dB) 設為 −18,並將 Level endpoint B (dB) 設為 −6。這些設定會每秒選取四次新的衰減值。除非你調整控制項,否則每個選取值都會維持完整間隔。

端點指定的是套用在合成器之後的增益,並非目標輸出電平表讀數。例如,−6 dB 約對應 0.501 的樣本倍率,−18 dB 則約對應 0.126。音源訊號和後續軌道處理仍會決定最終輸出。

預期行為 範例設定 變化內容
緩慢且明顯的平台 1,000 ms 每秒選取一個新音量
中等速度的階梯 250 ms 每秒選取四個新音量
較快的階梯 125 ms 每秒選取八個新音量
較小的音量差異 端點為 −9 和 −6 dB 縮小選取範圍
用於比較的固定衰減 兩個端點皆為 −6 dB 每次選取都產生相同增益

在 120 BPM 下,八分音符長 250 毫秒:60 秒除以 120 拍,再除以二。這是完整的時間計算範例。此效果使用毫秒,並不會隨速度變化,也不會將階梯與專案的音樂網格對齊。

端點可按任意順序輸入,因為程式會將它們排序。調整任何滑桿,都會在下一個處理樣本時重新開始間隔。隨機音量會在不插值的情況下維持不變,不過連續兩次選取的音量也可能剛好相近。

改用可編輯、可重複的階梯

如果你想在確切的時間軸位置設定精確數值,請使用自動化包絡線。這也是套用維持式變化至已顯示效果參數的原生支援方法。REAPER 在其 User Guide 第 18 章說明了參數包絡線和 Square 點形狀。

若要建立固定音量模式,請先停用自訂 JSFX。開啟軌道的包絡線控制項,並顯示 Volume 包絡線。手動編輯時,請讓軌道保持在 Trim/Read 模式。

使用 Shift 加按一下滑鼠,在每隔 250 毫秒的位置建立點,再將它們移至不規則音量。以滑鼠右鍵按一下某個點,然後選擇 Set Point Shape → Square。每個輸出區段都應維持音量的點,都要套用該形狀。包絡線應呈現水平平台,並在之後垂直變化。

若要控制其他效果的參數,請觸碰所需控制項,並選擇 Param → Show track envelope。接著在該包絡線上新增點並設定形狀。參數選單的操作流程記載於 The REAPER Cockos Effects Summary Guide。

手動放置不規則數值會建立固定模式;它不會在每次播放時產生新的隨機值。若要重複使用該模式,請選取其時間範圍,以滑鼠右鍵按一下包絡線,然後選擇 Automation items → Insert new automation item。REAPER 支援循環自動化項目及共用副本,編輯內容會同步套用至其他副本。REAPER User Guide, Automation Items。

排除音量平滑變化、缺少變化和可重複性問題

如果包絡線仍呈斜坡,請檢查輸出點的形狀。Linear 會建立斜坡;Square 則會建立此處需要的維持區段。方波 LFO 和手繪的多段階梯也有不同用途:單純在兩個音量之間交替,不會形成任意的音量序列。

如果自訂效果沒有產生明顯變化,請確認它位於 ReaSynth 之後、效果已啟用,而且兩個端點的數值不同。試著將階梯設為 1,000 毫秒、端點設為 −24 和 −6 dB,以便更容易檢視其結構。之後再改回專案所需的範圍。

增益突然變化可能會產生喀噠聲,因為樣本倍率會立即改變。此程式刻意不包含平滑處理。較小的音量差異可以減少這些不連續變化的幅度,但無法保證輸出不會產生喀噠聲。加入轉換斜坡會改變原本立即變化的階梯行為。

此效果適用於立體聲軌道,只會修改前兩個音訊聲道。它不會寫入自動化點、不會儲存選取的隨機序列、不會將數值量化為少數幾個音量,也不會提供速度同步功能。REAPER 通常會在播放開始時執行 JSFX 的 @init 區段;此程式會在該處重設計數器。不要假設重新開始播放後會重現同一組隨機序列。JSFX 程式碼區段參考。

若要自動產生維持不變的音量,請使用自訂增益效果。若要編輯、重複和保留特定變化,請使用方波自動化。兩種方法都能讓合成音呈現明確的平台;選擇哪一種,取決於你更重視新生成的數值,還是精確的時間軸模式。

來源