跳轉至內容

數字音樂創作/聲音製作

來自Wikibooks,開放世界中的開放書籍

聲音來源

[編輯 | 編輯原始碼]

有幾種方法可以數字生成聲音。當然,所有這些技術所做的就是產生一系列代表聲音樣本的數字。這些數字透過前面描述過的數字-模擬轉換過程轉換為實際的可聽聲音。

計算機制作聲音最直接的方法是錄製或 *取樣* 現有的聲音來源(例如傳統的非數字樂器)並回放錄音。

當然,除了直接回放外,還可以應用創意技術,例如剪輯樣本以更改其播放時間或順序、過濾等等。因此,取樣器 成為了一種非常合法的樂器。

減法合成

[編輯 | 編輯原始碼]

另一種技術是從易於電子生成的簡單週期性波形開始。大多數減法合成器使用六種不同的基本波形

  • 正弦波:正弦波是最基本的波形。它聽起來平滑乾淨,因為正弦波的聲音僅由一個基頻組成。由於減法合成透過去除諧波來工作,而正弦波沒有諧波,因此這種波形在減法合成器中用途有限。
  • 三角波:三角波具有奇次諧波,並且隨著它們離基頻越來越遠而逐漸衰減。因此,它聽起來比正弦波更清晰、更明亮。
  • 鋸齒波:鋸齒波是最嘈雜的基本波形,包含大多數諧波。這使其成為減法合成的絕佳選擇。
  • 方波:方波包含奇次諧波,聽起來比三角波更尖銳,但不如鋸齒波尖銳。
  • 脈衝波:方波的變體。它不像方波那樣具有50%的佔空比,而是具有其他佔空比。這使得它聽起來比方波更細。
  • 白噪聲:白噪聲不使用每個週期重複自身的簡單波形,而是為每個樣本生成隨機值。它包含各種頻率的混合。合適的濾波可以將其轉換為各種非旋律打擊樂聲音。

所選波形可以透過濾波器來衰減或去除選擇的諧波,從而產生各種不同的音色。

加法合成

[編輯 | 編輯原始碼]

與減法合成相反的方法是從一組對應於諧波頻率的純正弦波開始,然後以合適的幅度將它們混合在一起,以合成所需的音色。這可能需要調整許多諧波分量的幅度——16或32個或更多,這可能是一個非常繁瑣的過程,並且結果難以預測。

波形合成

[編輯 | 編輯原始碼]

一些音樂應用程式允許您在螢幕上手繪聲音的波形。但是,通常很難提前預測特定的波形會發出什麼聲音。

物理建模

[編輯 | 編輯原始碼]

也許產生逼真樂器模擬的最耗費計算資源的技術是在計算機上對樂器進行 *物理建模*。例如,要產生真實的絃樂聲音,您可以制定數學方程來描述弦的行為,同時考慮其長度、質量、彈性、張力等,以及當它被弓或撥動時作用在其上的力。

此技術還可以擴充套件到模擬在現實生活中不可能構建的樂器的音色。例如,想象一下從小提琴的引數開始,然後將弦長增加到10米;那會是什麼聲音?

在Linux上製作聲音

[編輯 | 編輯原始碼]

理論講的夠多了,讓我們開始製作一些聲音吧。在介紹典型Linux系統上如何處理聲音的一些初步知識後,我們將熟悉以下步驟

  • 配置JACK在音樂會話中的啟動
  • 為音樂應用路由音訊
  • 為音樂應用路由MIDI
  • 結束音樂會話。

ALSA、PulseAudio、JACK

[編輯 | 編輯原始碼]

幾乎所有Linux發行版都在最低層使用ALSA來管理聲音硬體。此外,現在通常還會執行一個PulseAudio守護程序,為不同的應用程式提供單獨的使用者可設定音量控制。總而言之,此係統足以處理使用者介面反饋聲音、影片流和常見媒體播放器的常規聲音播放需求。

但是,對於音樂製作工作,我們需要將JACK納入等式。這為我們提供了一個“連線板”,我們可以在其中看到正在執行的不同音樂和音訊應用程式(以及我們可用的系統硬體)公開的“埠”,並在這些埠之間執行虛擬“線”以建立音訊和控制資料的連線。

它需要一些設定,但JACK和PulseAudio *可以*被說服同時工作。PulseAudio可以在JACK執行時將其自身轉換為JACK客戶端,並在JACK退出時恢復控制您的音訊硬體。

實現此功能最簡單的方法是下載我的pajackconnect指令碼的副本。它包含在JACK啟動時設定PulseAudio的命令,以及在JACK終止時重置PulseAudio的命令。為簡單起見,將指令碼安裝到站點本地可執行檔案的常用目錄,即/usr/local/bin,這樣它將透過您的PATH自動找到,您無需鍵入其完整路徑名即可呼叫它。

啟動JACK

[編輯 | 編輯原始碼]
檔案:Qjackctlv0.6.3.png
啟動時QjackCtl主視窗,JACK未執行

JACK本身是一個後臺 *守護程序*;它為其他應用程式提供服務,但本身沒有實際的使用者介面。但是,有各種GUI工具可用於控制它;在這裡我將使用QjackCtl

啟動QjackCtl時,它將顯示一個初始主視窗,如下所示。首先,單擊“訊息”按鈕以調出一個顯示各種日誌訊息的視窗;這通常會顯示一行內容“jack伺服器未執行或無法啟動”。這現在沒關係。**請勿立即單擊“啟動”按鈕。**

另請單擊“圖形”按鈕,將出現另一個視窗,顯示JACK客戶端應用程式之間的連線。它將有3個選項卡,分別標記為“音訊”、“MIDI”和“ALSA”。“音訊”選項卡將顯示音訊資料路由的連線,“MIDI”和“ALSA”選項卡將顯示兩種不同型別的MIDI資料路由連線。使用ALSA呼叫來管理其MIDI介面的應用程式將顯示在“ALSA”選項卡下,而使用原生JACK呼叫的應用程式將顯示在“MIDI”選項卡下。

不幸的是,這兩種 MIDI 路由方式不相容:您無法在其中一個選項卡上的埠與另一個選項卡上的埠之間建立連線。看起來“原生 JACK”呼叫是未來的首選方式,而舊的應用程式仍然使用“傳統 ALSA”呼叫。幸運的是,有一種方法可以在這兩個世界之間架起橋樑(如下所述)。

在每種情況下,資料來源位於左側,目標位於右側,您會看到連線它們之間的線條(您可以控制),表示連線。最初,您在這些顯示器中將看不到任何內容,因為 JACK 尚未(執行)。

QjackCtl 設定視窗,“設定”選項卡

接下來,點選“設定...”按鈕。這將彈出一個視窗,您可以在其中設定實際執行 JACK 的選項。我們將關注“設定”和“選項”選項卡下的一些重要欄位;暫時可以忽略其他欄位。

在“設定”選項卡中,“伺服器字首”欄位包含用於啟動 JACK 守護程式的命令。預設值(“jackd”或“/usr/bin/jackd”)應該可以正常工作。

QjackCtl 設定視窗,“選項”選項卡

現在轉到“選項”選項卡。您會看到在啟動/關閉序列的各個點“執行指令碼”的選項。我們需要設定其中兩個。

首先,選中“啟動後執行指令碼”選項。我們需要在這裡執行兩個命令:一個用於執行pajackconnect指令碼,另一個用於啟動a2jmidid它將代理ALSA MIDI 連線到原生 JACK MIDI 選項卡。這兩個命令可以在同一行輸入,用分號分隔,如下所示

pajackconnect start; a2jmidid -e &

您首先需要確保已安裝a2jmidid包。並注意a2jmidid命令末尾的“&”:這告訴 QjackCtl 啟動命令並執行,而不是等待它終止。如果您忘記了這一點,QjackCtl 將掛起,直到您終止a2jmidid程序。此程式監視您所有 ALSA MIDI 連線,並自動在“MIDI”選項卡下顯示相應的原生 JACK 埠,允許您在一個選項卡下在較新和較舊的應用程式之間建立連線。“-e”選項告訴它也為硬體 MIDI 介面建立 JACK 埠。

(請注意,我們不必在音樂會話結束時提供任何型別的命令來關閉a2jmidid;當它發現 JACK 停止執行時,它會自動終止。)

接下來,查詢“關閉時執行指令碼”選項:選中此選項,並在相應的命令欄位中輸入

pajackconnect stop

這告訴pajackconnect指令碼在 JACK 終止後完成其恢復正常 PulseAudio 操作的過程。

完成上述所有更改後,單擊“確定”按鈕關閉 QjackCtl 設定視窗。

好的,現在您可以點選“啟動”按鈕啟動 JACK 了。如果一切順利,您應該會看到訊息視窗中出現大量訊息,表明 JACK 正在執行。為了進一步確認,在連線視窗中調出“音訊”選項卡,以確認它看起來像右側:左側的“系統”條目表示您的聲音輸入硬體,右側的另一個名為“系統”的條目是您的聲音輸出。PulseAudio 將在該視窗中註冊自身,並自動互連,以便其客戶端可以像以前一樣繼續播放和捕獲聲音。

故障排除

[編輯 | 編輯原始碼]

“音訊”選項卡是否未包含如所示的 PulseAudio 連線?檢查訊息視窗中的錯誤。您是否看到

sh: 1: pajackconnect: not found

(您可能需要稍微向上滾動一下)?這意味著pajackconnect指令碼在您的PATH中找不到。或者

sh: 1: pajackconnect: Permission denied

意味著指令碼尚未獲得可執行許可權。您可以透過開啟一個終端視窗並在 shell 提示符處鍵入以下命令來檢查指令碼是否可訪問

pajackconnect

如果看到訊息

Usage:
       pajackconnect start|stop

那麼pajackconnect已正確安裝。

啟動您的第一個 JACK 客戶端應用程式

[編輯 | 編輯原始碼]
ZynAddSubFX 初始視窗

現在,讓我們啟動一個可以實際使用 JACK 發出聲音的應用程式。我們將從 ZynAddSubFX 開始,因為它是一個相當獨立的軟合成器應用程式,包含各種各樣的聲音合成方法。

ZynAddSubFX 集成了大量控制元件,一開始可能會讓人感到困惑。我們將從一些非常簡單的步驟開始。啟動它時,您將看到一個類似於右側的初始視窗。在“樂器”選單下,選擇“虛擬鍵盤...”(或單擊背景為亮藍色的“vK”按鈕);這將彈出一個另一個視窗,顯示音樂鍵盤的影像,您可以在其中單擊琴鍵以發出聲音。

ZynAddSubFX 音訊尚未連線

如果您嘗試點選此鍵盤,您將聽不到任何聲音。為什麼?因為您還沒有告訴 JACK ZynAddSubFX 的音訊應該去哪裡!要解決此問題,請轉到 QjackCtl 的連線視窗;在“音訊”選項卡中,您將看到出現了一個額外的源,標記為“zynaddsubfx”;將滑鼠從這裡拖到右側的“系統”條目,它們之間應該會出現一條線。或者,您可以在各自的列表中選擇這兩個條目,然後單擊“連線”按鈕以使線條出現。

ZynAddSubFX 現在已連線音訊

無論如何,現在如果您單擊 ZynAddSubFX 的虛擬鍵盤,您應該開始聽到聲音。最初,這些聲音不會很有趣,因為 ZynAddSubFX 生成的預設音調是純 正弦波。雖然這有其用途,但還有很多更有趣的預設只需點選一下即可。

返回 ZynAddSubFX 主視窗中的“樂器”選單,這次選擇“顯示樂器庫...”。這將彈出一個視窗,顯示所有載入的預設,以及許多按鈕,包括未使用預設插槽的空白按鈕。左上角有一個彈出選單,用於在不同的預設類別中進行選擇;選擇其中一個,您應該會看到視窗顯示更改為顯示指定類別中的預設。單擊帶標籤的按鈕之一以更改聲音。現在嘗試單擊虛擬鍵盤上的琴鍵,並聽聽聲音。

使用單獨的鍵盤應用程式

[編輯 | 編輯原始碼]

現在我們將啟動一個單獨的虛擬鍵盤應用程式,稱為vmpk],或“虛擬 MIDI 鋼琴鍵盤”。當 ZynAddSubFX 已經包含一個鍵盤時,為什麼要費心?因為此鍵盤應用程式不僅可以驅動 ZynAddSubFX,還可以驅動其他聲音源,而這些聲音源沒有提供自己的鍵盤。

此應用程式應在應用程式選單中以“虛擬 MIDI 鋼琴鍵盤”的名稱顯示。啟動此應用程式後,檢查 QjackCtl 的“連線”視窗中的“ALSA”選項卡。從左側的“VMPK 輸出”到右側的“ZynAddSubFX”執行一根線。

現在嘗試點選新的虛擬鍵盤,您應該會像以前一樣聽到 ZynAddSubFX 發出聲音。當然,它自己的鍵盤仍然可以工作。

由於a2jmidid,JACK 鍵盤可以驅動 ZynAddSubFX

現在,僅僅為了好玩,讓我們嘗試一個名為“JACK Keyboard”的應用程式(包名稱為jack-keyboard)。它僅在“MIDI”連線選項卡(而不是“ALSA”)中顯示其 MIDI 埠。ZynAddSubFX 僅執行“ALSA”。但是,因為我們有a2jmidid正在執行,您將在 MIDI 選項卡中看到標記為“a2j”的源和目標。單擊右側源部分中的一個旁邊的“>”符號,您將看到 ZynAddSubFX 的條目。將其連線到 jack-keyboard 的目標,如所示,並嘗試使用此鍵盤演奏音符。

刪除 JACK 連線

[編輯 | 編輯原始碼]

如果您在 QjackCtl 中建立了錯誤的連線,或者只是改變了路由的想法,您可以透過在各自的列表中選擇其源和目標,然後單擊“斷開連線”按鈕來刪除該連線。

彈奏真實的鍵盤

[編輯 | 編輯原始碼]

如果您有真正的 MIDI 鍵盤,您可以使用 MIDI-USB 介面卡將其連線到您的 PC。Linux 包含對這些裝置的標準支援,因此它們應該會顯示在 QjackCtl 的“連線”視窗的“ALSA”選項卡中,就像vmpk一樣。並且a2jmidid也將它們路由到“MIDI”選項卡。

或者,ZynAddSubFX 和虛擬鍵盤應用程式都允許您在計算機鍵盤上演奏,就像它是一個音樂鍵盤一樣。但是,您的鍵盤能夠識別的同時按鍵數量可能有限,因此和絃中的音符最大數量也受限。

確保任何這些虛擬鍵盤視窗都處於活動狀態——無論是 ZynAddSubFX 中內建的視窗,還是vmpk或 JACK Keyboard。嘗試按下字母鍵的底行:Z、X、C、V、B、N、M 等應對應於從中央 C 向上的白鍵,下一行的 S、D 等構成相關的黑鍵。此外,Q、W、E 等為您提供了另一行從中央 C 上方的 C 開始的白鍵,字母數字 2、3 等是相應的黑鍵。這些只是預設設定;請注意 ZynAddSubFX 鍵盤中標記為“"qwer" Oct”和“"zxcv" Oct”的小控制元件:這些控制元件允許您更改這些鍵行的八度音程分配。較大的“Oct”控制元件會更改所有這些琴鍵以及視窗中可點選琴鍵的音調。

vmpk中,“基本八度音程”控制元件允許您將所有內容向上或向下轉置整個八度音程,而“轉置”控制元件允許您對音調進行半音級別的更改。在 JACK Keyboard 中,“八度音程”控制元件僅更改計算機鍵盤上的琴鍵音調,而不是虛擬鍵盤視窗中的琴鍵音調。

在所有應用程式中,當您按下計算機鍵盤上的琴鍵時,您會看到虛擬鍵盤顯示屏中相應的琴鍵高亮顯示。

使用多個MIDI通道

[編輯 | 編輯原始碼]

ZynAddSubFX可以同時接收多個MIDI通道的命令。請檢視此處標記的設定。

預設情況下,僅啟用通道1,視窗顯示通道1的設定。點選通道指示器以顯示通道2的設定,您會看到“啟用”複選框未選中;選中它以啟用通道2。檢查視窗右側的“MIDI Chn Rcv”彈出選單;對於此通道,此選單應預設為“Chn2”。此外,從樂器庫中為通道2選擇一個聲音——與您從通道1中選擇的有所區別。(您從樂器庫中選擇的任何樂器都將應用於當前在此指示器中顯示的通道。)

現在,轉到您的虛擬鍵盤應用程式,並將其切換為在通道2上傳送MIDI命令。為了增加樂趣,可以開啟兩個鍵盤,一個在通道1上,另一個在通道2上(確保它們都連線到驅動ZynAddSubFX的MIDI輸入),然後嘗試依次點選每個鍵盤上的按鍵。

結束音樂會話

[編輯 | 編輯原始碼]

完成音樂製作後,請確保終止除QjackCtl之外的所有JACK客戶端應用程式。然後點選QjackCtl主視窗中的“停止”按鈕。將彈出一個對話方塊,警告您“某些客戶端音訊應用程式仍在活動並已連線”,即使您已退出所有應用程式;此對話方塊指的是PulseAudio,它會正確地自行清理,因此請點選“是”。您應該會看到訊息視窗中出現大量訊息,甚至可能有一些看起來像是錯誤的訊息。不必過於擔心這些;重要的是,“連線”視窗中的“音訊”和“MIDI”選項卡現在為空(“ALSA”選項卡可能不是,但不用擔心)。

現在您可以退出QjackCtl,並且您的系統聲音仍可供非JACK客戶端應用程式使用。

華夏公益教科書