遊戲的音訊
瞭解如何開發音樂和聲音並將其合併到 DirectX 遊戲中,以及如何處理音訊訊號以建立動態和位置聲音。
針對音訊程式設計,建議您在 DirectX 中使用 XAudio2 程式庫,或 Windows 執行階段音訊圖形 API。 我們在此使用 XAudio2。 XAudio2 是低階音訊庫,可提供遊戲的訊號處理和混合基礎,並支援各種格式。
您也可以使用 Microsoft Media Foundation 實作簡單的音效和音樂播放。 Microsoft Media Foundation 的設計訴求是播放媒體檔案和串流,無論是音訊和視訊,也可以用於遊戲,而且特別適合用於遊戲的電影場景或非互動式元件。
概念簡介
以下是我們在本節中使用的一些音訊程式設計概念。
- 訊號是聲音程式設計的基本單位,類似於圖形中的像素。 處理數位訊號處理器 (DSP) 就像遊戲音訊的像素著色器一樣。 它們可以轉換訊號,或加以結合,或加以篩選。 透過對 DSP 進行程式設計,您可以根據需要以或多或少的複雜程度來改變遊戲的音效和音樂。
- 聲音是兩個或多個訊號的子混音複合。 XAudio2 聲音物件有 3 種類型:來源、子混音和後製聲音。 來源聲音對用戶端提供的音訊資料進行處理。 來源聲音和子混音將其輸出傳送至一或多個子混音或後製聲音。 子混音和後製聲音混合所有輸入的聲音,並對結果進行處理。 後製聲音會將音訊資料寫入音訊裝置。
- 混音是將多個離散聲音,例如場景中播放的音效和背景音訊組合成單一串流的流程。 子混音是組合多個離散訊號 (例如引擎噪音的元件聲音) 並建立聲音的流程。
- 音訊格式。 音樂和音效可以儲存在遊戲的各種數位格式。 有未壓縮的格式,例如 WAV,以及 MP3 和 OGG 等壓縮格式。 範例的壓縮程度愈高 -- 通常是由其位元速率指定,位元速率越低,壓縮容易遺失,其精確度就越差。 精確度可能會因壓縮配置和位元速率而異,因此請針對它們進行實驗,以找出最適合您遊戲的內容。
- 取樣速率和品質。 聲音可以以不同的速率取樣,而以較低的速率取樣的聲音的精確度要低得多。 CD 品質的取樣率為 44.1 Khz (44100 Hz)。 如果您不需要高精確度的聲音,您可以選擇較低的取樣率。 較高的速率可能適用於專業音訊應用程式,但您可能不需要它們,除非您的遊戲需要專業逼真聲音。
- 聲音發射器 (或來源)。 在 XAudio2 中,聲音發射器是發出聲音的位置,無論是背景噪音或遊戲內 Jukebox 所播放的搖擺搖滾曲目。 您可以依照世界座標指定發射器。
- 聲音接聽程式。 聲音接聽程式通常是可處理從接聽程式收到的聲音之玩家,或可能是更進階遊戲中的 AI 實體。 您可以將聲音混音到音訊串流中,以播放給玩家,或者您可以使用它採取特定的遊戲內動作,例如喚醒標示為接聽程式的 AI 防護。
設計考量
音訊是遊戲設計和開發中非常重要的一部分。 許多玩家可以回憶起一個平庸的遊戲提升到傳奇狀態,只是因為一個難忘的配樂,或偉大的聲音工作和聲音混合,或整體優異的音訊製作。 音樂和聲音定義了遊戲的個性,並建立定義遊戲的主要動機,並使它與其他類似的遊戲區分開來。 您在設計及開發遊戲音訊設定檔時所花費的努力將非常值得。
位置 3D 音訊可以增加 3D 圖形所提供的沉浸式程度。 如果您正在開發模擬世界的複雜遊戲,或需要電影風格,請考慮使用 3D 位置音訊技術來真正吸引玩家。
DirectX 音訊開發藍圖
XAudio2 概念資源
XAudio2 是 DirectX 的音訊混合庫,主要用於開發適用於遊戲的高效能音訊引擎。 對於想要為其新式遊戲新增音效和背景音樂的遊戲開發人員,XAudio2 提供音訊圖形和混合引擎與低延遲,並支援動態緩衝區、同步樣本精確的播放,以及隱含的來源速率轉換。
主題 | 說明 |
---|---|
本主題提供 XAudio2 所支援的音訊程式設計功能清單。 |
|
本主題提供關鍵 XAudio2 概念、XAudio2 版本和 RIFF 音訊格式的相關資訊。 |
|
本主題提供音訊開發人員應該熟悉的常見音訊概念概觀。 |
|
本主題包含 XAudio2 聲音的概觀,這些聲音是用來對音訊資料進行子混合、操作和進行主要處理。 |
|
本主題涵蓋 XAudio 2 回撥,用來防止音訊播放中斷。 |
|
本主題涵蓋 XAudio2 音訊處理圖形,它會從用戶端取得一組音訊串流做為輸入、處理它們,並將最終結果傳遞至音訊裝置。 |
|
本主題涵蓋 XAudio2 音訊效果,這些效果會採用傳入音訊資料,並在傳遞資料之前對資料執行一些作業 (例如殘響效果)。 |
|
本主題涵蓋使用 XAudio2 的音訊串流。 |
|
本主題涵蓋 X3DAudio,這是與 XAudio2 搭配使用的 API,用來建立來自 3D 空間點的聲音錯覺。 |
|
本節包含 XAudio2 API 的完整參考。 |
XAudio2「操作說明」資源
主題 | 說明 |
---|---|
瞭解如何建立 XAudio2 引擎的執行個體,以及建立主控聲音,以初始化 XAudio2 進行音訊播放。 |
|
瞭解如何填入在 XAudio2 中播放音訊資料所需的結構。 |
|
瞭解如何在 XAudio2 中播放先前載入的音訊資料。 |
|
瞭解如何設定一組聲音,以將其輸出傳送至相同的子混合聲音。 |
|
瞭解如何使用 XAudio2 來源聲音回撥。 |
|
瞭解如何使用 XAudio2 引擎回撥。 |
|
瞭解如何建立以單一母帶聲音和單一來源聲音建構的音訊處理圖形。 |
|
瞭解如何從已建立的圖形新增或移除子混合聲音,請遵循操作說明:建置基本音訊處理圖形中的步驟。 |
|
瞭解如何將效果鏈結套用至聲音,以允許自訂處理該聲音的音訊資料。 |
|
瞭解如何實作 IXAPO 來建立 XAudio2 音訊處理物件 (XAPO)。 |
|
瞭解如何藉由實作 IXAPO 參數介面,將執行階段參數支援新增至 XAPO。 |
|
瞭解如何在 XAudio2 效果鏈結中使用實作為 XAPO 的效果。 |
|
瞭解如何在 XAudio2 效果鏈結中使用 XAPOFX 中包含的其中一個效果。 |
|
瞭解如何藉由建立個別執行緒來讀取音訊緩衝區,以及使用回撥來控制該執行緒,以串流 XAudio2 中的音訊資料。 |
|
瞭解如何使用 X3DAudio 來提供 XAudio2 聲音的音量和音調值,以及 XAudio2 內建殘響效果的參數。 |
|
瞭解如何使用 XAudio2 作業集,讓一組方法呼叫同時生效。 |
|
瞭解如何設定 XAudio2 的偵錯記錄層級。 |
媒體基礎資源
媒體基礎 (MF) 是用於串流音訊和視訊播放的媒體平台。 您可以使用媒體基礎 API,以各種演算法串流編碼和壓縮音訊和視訊。 它並非針對即時遊戲案例所設計;相反地,它提供功能強大的工具和廣泛的轉碼器支援,以取得更線性的擷取和呈現音訊和視訊元件。
主題 | 說明 |
---|---|
本節包含媒體基礎 API 的一般資訊,以及可支援它們的工具。 |
|
本主題介紹撰寫媒體基礎應用程式之前,您必須瞭解的一些概念。 |
|
本節說明 Microsoft 媒體基礎的一般設計,以及其所使用的媒體基本類型和處理管線。 |
|
本主題描述如何使用 Microsoft 媒體基礎來執行音訊和視訊擷取。 |
|
本主題描述如何在應用程式中實作音訊/視訊播放。 |
|
本主題列出 Microsoft 媒體基礎原生支援的媒體格式。 (第三方可以藉由撰寫自訂外掛程式來支援其他格式。) |
|
本主題描述如何使用 Microsoft 媒體基礎來執行音訊和視訊編碼,以及編寫媒體檔案。 |
|
本主題描述如何使用 Windows 媒體音訊和視訊轉碼器的功能來產生及取用壓縮資料串流。 |
|
本節包含媒體基礎 API 的參考資訊。 |
|
本節列出示範如何使用媒體基礎的範例應用程式。 |
Windows 執行階段 XAML 媒體類型
如果您正在使用 DirectX-XAML Interop,您可以使用 DirectX 搭配 C++ 將 Windows 執行階段 XAML 媒體 API 併入 UWP 應用程式,以取得更簡單的遊戲案例。
主題 | 說明 |
---|---|
表示包含音訊、視訊或兩者的物件的 XAML 元素。 |
|
瞭解如何在通用 Windows 平台 (UWP) 應用程式中納入基本音訊和視訊。 |
|
瞭解如何在 UWP 應用程式中播放本機儲存的媒體檔案。 |
|
瞭解如何在 UWP 應用程式中串流低延遲的媒體檔案。 |
|
瞭解如何使用 Play To 合約,將媒體從 UWP 應用程式串流至另一個裝置。 |