OpenAL 簡易教學
要使用OpenAL
,首先要知道裡面的四個東西:
- context: 要播放聲音的地方,可以想成
OpenGL
裡面的Window - listener:
OpenAL
支援3D音效,所以聽者的資訊是很重要的 - sources: 聲源的資訊
- buffer: 負責聲源的內容
首先是要將一個聲音檔讀入,以下示範wav檔案:
WAV檔案
其實alut裡面有一個函數可以讀取,可是alut需要額外裝,加上我第一次試驗的code前前後後就只有這一個函數用到alut,所以就來研究一下要如何不靠alut把wav檔案讀入.
WAV檔案格式
WAV是binary檔,主要有三個區塊:
RIFF Header
Name | Size | Type |
---|---|---|
ChunkID | 4 | char * 4 |
ChunkSize | 4 | int * 1 |
Format | 4 | char * 4 |
- ChunkID 必須是
"RIFF"
- Format 必須是
"WAVE"
WAVE 格式 + 資料
Name | Size | Type |
---|---|---|
subChunk1ID | 4 | char * 4 |
subChunk1Size | 4 | int * 1 |
audio Format | 2 | short * 1 |
num Channel | 2 | short * 1 |
Sample Rate | 4 | int * 1 |
Byte Rate | 4 | int * 1 |
Byte Align | 2 | short * 1 |
bits Per Sample | 2 | short * 1 |
subChunk2ID | 4 | int * 1 |
subChunk2Size | 4 | int * 1 |
Data | unsigned char |
|
|
在設定OpenAL
的聲音format時會需要考慮num Channel
, bits per Sample
以上是WAV格式簡略的介紹,接下來就是OpenAL的部分
OpenAL簡略的播放聲音
首先是初始化,像在前面有提過的,有device和context
Listener 的初始化:
準備WavLoader
首先比較特別的是我們需要決定好format
|
|
|
|
然後就可以播放拉,先把buffer讀取進來,指定給source,然後播放.
|
|
完整code(包括多重播放)
參考資料
- Tutorial: Loading Wave files in OpenAL without ALUT
- Play Compressed Formats With OpenAL
- Creative OpenAL Programmer’s Reference
- OpenAL Tutorial 1 - Playing WAV files (No ALUT required!)