OpenAL是一款非常優(yōu)秀的跨平臺(tái)音效API軟件,它為電腦游戲設(shè)計(jì),為用戶提供了非強(qiáng)悍的音效解決方案,OpenAL主要由3個(gè)實(shí)體構(gòu)成:聽眾Listener、聲源Source、緩存Buffer,設(shè)計(jì)給多通道三維位置音效的特效表現(xiàn)。OpenAL 最初是由 Loki Software 所開發(fā),是為了將 Windows 商業(yè)游戲移植到 Linux 上。Loki 倒閉以后,這個(gè)專案由自由軟件/開放源始碼社群繼續(xù)維護(hù)。不過現(xiàn)在最大的主導(dǎo)者(并大量發(fā)展)是創(chuàng)新科技,并得到來自 Apple 和自由軟件/開放源代碼愛好者的持續(xù)支援。幾乎沒有一API能達(dá)到它的全部潛能

OpenAL的發(fā)展
OpenAL(Open Audio Library)是自由軟件界的跨平臺(tái)音效API。OpenAL最初是由Loki Software所開發(fā),是為了將Windows商業(yè)游戲移植到Linux上,Loki倒閉以后,這個(gè)項(xiàng)目由自由軟件/開放源始碼社群繼續(xù)維護(hù)。
OpenAL是Open Audio Library的簡(jiǎn)稱,在PC游戲中經(jīng)常用到OPENAL。OPENAL有許多的潛能,有許多的聲音庫(kù)工作在最地層的hardware上。但OPENAL的設(shè)計(jì)者經(jīng)過無數(shù)的測(cè)試使她成為一個(gè)高級(jí)的API。
OpenAL特色
OpenAL 主要的功能是在來源物體、音效緩沖和收聽者中編碼。來源物體包含一個(gè)指向緩沖區(qū)的指標(biāo)、聲音的速度、位置和方向,以及聲音強(qiáng)度。收聽者物體包含收聽者的速度、位置和方向,以及全部聲音的整體增益。緩沖里包含 8 或 16 位元、單聲道或立體聲 PCM 格式的音效資料,表現(xiàn)引擎進(jìn)行所有必要的計(jì)算,如距離衰減、都普勒效應(yīng)等。
不同于 OpenGL 規(guī)格,OpenAL 規(guī)格包含兩個(gè)API分支;以實(shí)際 OpenAL 函式組成的核心,和 ALC API,ALC 用于管理表現(xiàn)內(nèi)容、資源使用情況,并將跨平臺(tái)風(fēng)格封在其中。還有“ALUT”程式庫(kù),提供高階“易用”的函式,其定位相當(dāng)于 OpenGL 的 GLUT。
OpenAL功能
1.在來源物體、音效緩沖和收聽者中編碼。
2.來源物體包含一個(gè)指向緩沖區(qū)的指標(biāo)、聲音的速度、位置和方向,以及聲音強(qiáng)度。
3.收聽者物體包含收聽者的速度、位置和方向,以及全部聲音的整體增益。
4.緩沖里包含8或16位元、單聲道或立體聲PCM格式的音效資料,表現(xiàn)引擎進(jìn)行所有必要的計(jì)算,如距離衰減、都普勒效應(yīng)等。
5.用于Windows的OpenAL安裝程序?qū)惭bOpenAL 1.1庫(kù),從而使核心的OpenAL業(yè)務(wù)以及諸如EAX和EFX效果擴(kuò)展的支持。
6.安裝程序支持32位和64位Windows版本。
OpenAL使用方法
OpenAL主要由3個(gè)實(shí)體構(gòu)成:聽眾Listener, 聲源Source, 以及緩存Buffer。
聽眾Listener:就是你。Listener的位置是可以移動(dòng)的。
聲源Source:類似一個(gè)話筒。它發(fā)出聲音給聽眾聽。和Listener一樣,聲源的位置也是可以移動(dòng)的。例如oalTouch中實(shí)現(xiàn)了聲音遠(yuǎn)近的控制(近響遠(yuǎn)輕),就是通過Listener和Source兩張圖片之間的距離實(shí)現(xiàn)的。
緩存Buffer:存著原始聲音數(shù)據(jù),就是你需要播放的聲音。
還有2個(gè)重要的對(duì)象:設(shè)備device和環(huán)境context。
設(shè)備是播放聲音的硬件。
環(huán)境是聲源和聽眾所在的空間。
OpenAL安裝方法:
OpenAL的安裝很簡(jiǎn)單,運(yùn)行程序,點(diǎn)擊“OK”,就完成了。沒有很煩瑣的安裝過程。
變化和錯(cuò)誤修正
增加了新的統(tǒng)計(jì)擴(kuò)展(ALC_ENUMERATE_ALL_EXT)任何聲卡上使用soundcard/音頻端點(diǎn)
“通用硬件”設(shè)備只出現(xiàn)是否可以用在枚舉字符串
安裝alcGetIntegerv的要求active context
安裝alcCaptureOpenDevice,以便它返回一個(gè)字符串,如果捕捉設(shè)備無法打開