跳轉至內容

資料表示基礎:聲音合成

來自華夏公益教科書,開放的書籍,開放的世界

試卷 2 - ⇑ 資料表示基礎 ⇑

← 奈奎斯特定理 聲音合成 流媒體音訊 →


Fairlight CMI 系列 II – 一臺早期的數字合成器
聲音合成 - 電子產生的聲音,模仿樂器或人聲

聲音合成器也被用來創造傳統音樂場景中不存在的電子聲音。1951 年,曼徹斯特大學使用 Ferranti Mark 1 計算機創造了最早的計算機生成的音樂示例。從那時起,計算機對音樂行業產生了巨大影響,本節將深入探討聲音合成。

與從 MP3 和 AAC 等現場錄音中獲取的錄音相比,聲音合成通常會產生更小的檔案大小,因為它記錄的是符號,計算機使用選定的程式設計或數字樂器來執行這些符號,而不是記錄每秒聲音的波形。但是,錄音通常聽起來不像現場錄音那麼真實。聽聽左邊的音樂,你就會明白我的意思了。


MIDI 聯結器和 MIDI 線纜

一種常見的產生合成聲音音樂的方法是使用 MIDI。MIDI 不記錄模擬聲音,而是傳送數字訊號,記錄樂譜、音高和強度、控制訊號(用於音量、顫音和聲像等引數)、提示以及用於設定節奏的時鐘訊號。然後,計算機解釋這些命令並輸出與之對應的音訊。MIDI 是一種流行的從電子鍵盤等裝置記錄音樂的方式。


擴充套件:建立一個聲音合成器

我們知道,鍵盤上的每個字元都與一個 ASCII 碼相關聯。我們將使用此程式碼,將我們的計算機鍵盤變成一個音樂鍵盤!

console.beep(frequency,duration)

其中 frequency 是每秒的振盪次數,duration 是嗶嗶聲持續的時間,單位為 毫秒

AscW(key)

其中 AscW 是按下的鍵的 ASCII 數字。這將得到

        Dim duration As Integer = 200
        Dim frequency As Integer
        Dim key As String 'stores the numeric ASCII value

        Console.WriteLine("press any key to play music, press q to quit")

        Do
            key = Console.ReadKey().KeyChar 'get the numeric ASCII value input
            frequency = (AscW(key) + 50) * 50
            Console.Beep(frequency, duration)
        Loop Until key = "q"

嘗試新增以下內容以擴充套件此功能

+ - increase and decrease frequency
= _ increase and decrease duration of sound
練習:聲音合成
為什麼你可能更願意使用聲音合成而不是錄製管絃樂隊

答案

  • 聲音合成會生成更小的檔案大小,並且不會損失質量
  • 聲音合成允許在錄音後輕鬆編輯檔案
  • 聲音合成允許生成傳統樂器無法實現的聲音
為什麼你可能不想使用聲音合成

答案

  • 聲音合成難以重現傳統樂器發出的聲音
  • 聲音合成難以重現人聲
華夏公益教科書