-
當(dāng)前位置:首頁 > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
openal干什么用的(open al 是什么軟件)
大家好!今天讓創(chuàng)意嶺的小編來大家介紹下關(guān)于openal干什么用的的問題,以下是小編對此問題的歸納整理,讓我們一起來看看吧。
ChatGPT國內(nèi)免費(fèi)在線使用,一鍵生成原創(chuàng)文章、方案、文案、工作計劃、工作報告、論文、代碼、作文、做題和對話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁版、PC客戶端
官網(wǎng):https://ai.de1919.com
本文目錄:
一、OpenCL是什么,查了半天沒看懂,能簡單明了的告訴我是干什么的有什么功能嗎
OpenCL是GPU通用運(yùn)算API。是顯卡作通用浮點(diǎn)運(yùn)算的API。比如視頻轉(zhuǎn)碼,原來這個工作都是CPU來做的?,F(xiàn)在顯卡運(yùn)算能力比較強(qiáng),這個工作完全可以交給顯卡來做。
要調(diào)用顯卡,這個工作不需要再由程序員考慮了,因為已經(jīng)有一個現(xiàn)成的接口了,程序員只要管好轉(zhuǎn)碼的算法,然后直接調(diào)用OpenCL中現(xiàn)成的指令,這個工作就自動由CPU轉(zhuǎn)交到GPU了。
OpenCL是一個為異構(gòu)平臺編寫程序的框架,此異構(gòu)平臺可由CPU,GPU或其他類型的處理器形成。OpenCL由一門用于編寫kernels (在OpenCL設(shè)備上運(yùn)行的函數(shù))的語言(基于C99)和一組用于定義并控制平臺的API組成。OpenCL提供了基于任務(wù)分割和數(shù)據(jù)分割的并行計算機(jī)制。
OpenCL類似于另外兩個開放的工業(yè)標(biāo)準(zhǔn)OpenGL和OpenAL,這兩個標(biāo)準(zhǔn)分別用于三維圖形和計算機(jī)音頻方面。OpenCL擴(kuò)展了GPU用于圖形生成之外的能力。OpenCL由非盈利性技術(shù)組織Khronos Group掌管。
擴(kuò)展資料
API之主要目的是提供應(yīng)用程序與開發(fā)人員以訪問一組例程的能力,而又無需訪問源碼,或理解內(nèi)部工作機(jī)制的細(xì)節(jié)。提供API所定義的功能的軟件稱作此API的實現(xiàn)。API是一種接口,故而是一種抽象。
應(yīng)用程序接口(英語:Application Programming Interface,簡稱:API),又稱為應(yīng)用編程接口,就是軟件系統(tǒng)不同組成部分銜接的約定。由于近年來軟件的規(guī)模日益龐大,常常需要把復(fù)雜的系統(tǒng)劃分成小的組成部分,編程接口的設(shè)計十分重要。程序設(shè)計的實踐中,編程接口的設(shè)計首先要使軟件系統(tǒng)的職責(zé)得到合理劃分。良好的接口設(shè)計可以降低系統(tǒng)各部分的相互依賴,提高組成單元的內(nèi)聚性,降低組成單元間的耦合程度,從而提高系統(tǒng)的維護(hù)性和擴(kuò)展性。[1]
參考資料來源 OpenCL_百度百科
二、你好OpenAL是什么?。克杏脝??可以卸載嗎?
你好 你說的是不是這個 這個是、是可以刪的 刪了對系統(tǒng)沒有影響
三、OpenAL編程用alutLoadWAVFile讀取聲音文件問題
簡介
歡迎來到OPENAL的世界!OPENAL一直在不斷的創(chuàng)新,幾乎沒有一個API能達(dá)到
她的全部潛能。一個很大的原因是因為hardware加速建立在特殊的版卡上。然而,
Creative Labs是APENAL的主要支持者,同時也是最大聲卡廠商之一。OPENAL的另
一個主要支持者LOKI。
OPENAL不是商業(yè)產(chǎn)品,那樣做限制了她的發(fā)展。我只知道再PC游戲中用OPENAL。
OPENAL有許多的潛能,有許多的聲音庫工作在最地層的hardware上。但OPENAL的
設(shè)計者經(jīng)過無數(shù)的測試使她成為一個高級的API。她的風(fēng)格是自由的,不同的編碼
風(fēng)格和hardware部件將充分運(yùn)用她的功能。有OPENGL編程精練的人將很快掌握OPEN
AL。OPENAL有建立3D環(huán)境音效的能力。
OPENAL是very cool,她是一個非常清晰的API并且能熔入你的代碼。你將做出
很COOL的音效,下面讓我們進(jìn)入COOL COOL的OPENAL世界。
#include <conio.h>
#include <stdlib.h>
#include <al/al.h>
#include <al/alc.h>
#include <al/alu.h>
#include <al/alut.h>
你會發(fā)現(xiàn)再OPENAL頭和OPENGL頭的定義上有許多的相似之處。除了“al.h","al
u.h","alut.h"與”gl.h","glu.h","glut.h"相似,還增加了一個"alc.h".ALC(
AUDIO LIBRARY CONTEXT)處理聲音通過不同的平臺,她也處理你在幾個窗口下共
享設(shè)備的環(huán)境。
// 存儲聲音數(shù)據(jù)
ALuint Buffer;
// 用于播放聲音
ALuint Source;
這是程序處理結(jié)構(gòu)的初始化。在OPENAL中三種不同的結(jié)構(gòu),所有關(guān)于聲音播放和
聲音數(shù)據(jù)存儲在一個內(nèi)存中,源(source)是指向放聲音的空間。明白源是非常
的重要。源只播放內(nèi)存中的背景聲音數(shù)據(jù)。源也給出了特殊的屬性如位置和速度。
第三個對象是聽者,用戶就是那唯一的聽者。聽者屬性屬于源屬性,決定如何
聽聲音。例如,不同位置將決定聲音的速度。
// 源聲音的位置
ALfloat SourcePos[] = { 0.0, 0.0, 0.0 };
// 源聲音的速度
ALfloat SourceVel[] = { 0.0, 0.0, 0.0 };
// 聽者的位置
ALfloat ListenerPos[] = { 0.0, 0.0, 0.0 };
// 聽者的速度
ALfloat ListenerVel[] = { 0.0, 0.0, 0.0 };
// 聽者的方向 (first 3 elements are "at", second 3 are "up")
ALfloat ListenerOri[] = { 0.0, 0.0, -1.0, 0.0, 1.0, 0.0 };
在上面的代碼中,我們定義了源和聽者對象的位置和速度。這些數(shù)組是基于笛
卡兒坐標(biāo)的矢量。你能很容易用結(jié)構(gòu)或類做相同的事情。
ALboolean LoadALData()
{
// 載入變量.
ALenum format;
ALsizei size;
ALvoid* data;
ALsizei freq;
ALboolean loop;
在這里我們建立一個函數(shù)用于從一個文件中載入聲音數(shù)據(jù)。變量用于存儲適合
我們的ALUT信息。
// 載入WAV數(shù)據(jù)
alGenBuffers(1, &Buffer);
if (alGetError() != AL_NO_ERROR)
return AL_FALSE;
alutLoadWAVFile("wavdata/FancyPants.wav", &format, &data, &size, &;freq, &loop);
alBufferData(Buffer, format, data, size, freq);
alutUnloadWAV(format, data, size, freq);
函數(shù)alGenBufers用于建立對象內(nèi)存并把他們存儲在我們定義的變量中。然后判斷
數(shù)據(jù)是否存儲。
ALUT庫為我們打開文件,提供我們建立內(nèi)存所需的信息,并且在我們歸屬所有
數(shù)據(jù)到內(nèi)存后,她將處理這些數(shù)據(jù)。
// 捆綁源
alGenSources(1, &Source);
if (alGetError() != AL_NO_ERROR)
return AL_FALSE;
alSourcei (Source, AL_BUFFER, Buffer );
alSourcef (Source, AL_PITCH, 1.0f );
alSourcef (Source, AL_GAIN, 1.0f );
alSourcefv(Source, AL_POSITION, SourcePos);
alSourcefv(Source, AL_VELOCITY, SourceVel);
alSourcei (Source, AL_LOOPING, loop );
我們用建立內(nèi)存對象的方法建立了源對象。然后,我們定義源屬性用于錄放。
最重要的屬性是她用的內(nèi)存。這告訴源用于錄放。因此,我們只有捆綁她。同時,
我們也告訴她我們定義的源位置和速度。
// 做錯誤檢測并返回
if (alGetError() == AL_NO_ERROR)
return AL_TRUE;
return AL_FALSE;
在函數(shù)的結(jié)尾,我們將做更多的檢測,以確定她的正確。
void SetListenervalues()
{
alListenerfv(AL_POSITION, ListenerPos);
alListenerfv(AL_VELOCITY, ListenerVel);
alListenerfv(AL_ORIENTATION, ListenerOri);
}
我們建立一個函數(shù)用于更新聽者速度。
void KillALData()
{
alDeleteBuffers(1, &Buffer);
alDeleteSources(1, &Source);
alutExit();
}
這是一個關(guān)閉函數(shù),用于釋放內(nèi)存和音頻設(shè)備。
int main(int argc, char *argv[])
{
// 初始OPENAL并清錯誤字節(jié)
alutInit(&argc, argv);
alGetError();
函數(shù)alutInit將安裝ALC需要的東西。ALUT通過ALC并設(shè)置她為當(dāng)前建立OPENAL
環(huán)境描述。在WINDOWS平臺上初始DIRECTSOUND。然后用‘GLGETERROR’檢測錯誤。
// 載入WAV數(shù)據(jù)
if (LoadALData() == AL_FALSE)
return -1;
SetListenervalu
在函數(shù)的結(jié)尾,我們將做更多的檢測,以確定她的正確。 void SetListenervalues(){ alListenerfv(AL_POSITION, ListenerPos); alListenerfv(AL_VELOCITY, ListenerVel); alListenerfv(AL_ORIENTATION, ListenerOri);}我們建立一個函數(shù)用于更新聽者速度。 void KillALData(){ alDeleteBuffers(1, &Buffer); alDeleteSources(1, &Source); alutExit();}這是一個關(guān)閉函數(shù),用于釋放內(nèi)存和音頻設(shè)備。 int main(int argc, char *argv[]){ // 初始OPENAL并清錯誤字節(jié) alutInit(&argc, argv); alGetError(); 函數(shù)alutInit將安裝ALC需要的東西。ALUT通過ALC并設(shè)置她為當(dāng)前建立OPENAL環(huán)境描述。在WINDOWS平臺上初始DIRECTSOUND。然后用‘GLGETERROR’檢測錯誤。 // 載入WAV數(shù)據(jù) if (LoadALData() == AL_FALSE) return -1; SetListenervalues(); // 設(shè)置退出函數(shù) atexit(KillALData); 我們將檢測WAV文件是否正確載入。如果沒有退出程序。 正確后,更新聽者參數(shù),最后退出。 ALubyte c = ' '; while (c != 'q') { c = getche(); switch (c) { // Pressing 'p' will begin playing the sample. case 'p': alSourcePlay(Source); break; // Pressing 's' will stop the sample from playing. case 's': alSourceStop(Source); break; // Pressing 'h' will pause (hold) the sample. case 'h': alSourcePause(Source); break; }; } return 0;}
es();
// 設(shè)置退出函數(shù)
atexit(KillALData);
我們將檢測WAV文件是否正確載入。如果沒有退出程序。
正確后,更新聽者參數(shù),最后退出。
ALubyte c = ' ';
while (c != 'q')
{
c = getche();
switch (c)
{
// Pressing 'p' will begin playing the sample.
case 'p': alSourcePlay(Source); break;
// Pressing 's' will stop the sample from playing.
case 's': alSourceStop(Source); break;
// Pressing 'h' will pause (hold) the sample.
case 'h': alSourcePause(Source); break;
};
}
return 0;
}
四、OpenAL音效程序是什么,有什么用
游戲音效,沒有這個塵埃、使命召喚這些都沒得游戲聲音
以上就是關(guān)于openal干什么用的相關(guān)問題的回答。希望能幫到你,如有更多相關(guān)問題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會為您講解更多精彩的知識和內(nèi)容。
推薦閱讀:
獨(dú)立站shopify官網(wǎng)(獨(dú)立站shopify需要費(fèi)用嗎)