OpenAl 프로 그래 밍 입문: 오디 오 재생
다음은 매우 간단 한 예제 입 니 다. 우 리 는 사인 오디 오 를 재생 할 것 입 니 다.
int main(int argc, char *argv[])
{
InitOpenAL(); // openal
LoadData(); // WAV
Play(); //
UnloadData(); // WAV
ShutdownOpenAL(); // openal
return 0;
}
좋 습 니 다. 이상 코드 는 OPENAL 의 것 과 관련 이 없습니다.나 는 단지 먼저 OPENAL 의 사용 절 차 를 주 고 싶 을 뿐이다. 대부분의 SDK 와 마찬가지 로 Init \ Working \ Shutdown 의 3 단계 곡 일 뿐이다.다음 에 우 리 는 상기 열거 한 다섯 개의 함 수 를 실현 한다.1. 전역 데이터
ALuint Source;//
ALuint Buffer;//
2. InitOpenAL & ShutdownOpenAL 아래 는 설명 을 많이 하지 않 고 조작 이 간단 합 니 다.
bool InitOpenAL()
{
ALCdevice * pDevice = alcOpenDevice(NULL); //
ALCcontext * pContext = alcCreateContext(pDevice, NULL);
alcMakeContextCurrent(pContext);
return true;
// : ,
}
void ShutdownOpenAL()
{
ALCcontext *pContext;
ALCdevice *pDevice;
pContext = alcGetCurrentContext();
pDevice = alcGetContextsDevice(pContext);
alcMakeContextCurrent(NULL);
alcDestroyContext(pContext);
alcCloseDevice(pDevice);
}
2. LoadData & UnloadData 여기 서 우 리 는 cosf 를 사용 하여 사인 파 를 오디 오 데이터 로 생 성 합 니 다.
bool LoadData()
{
// .
const ALsizei size = 800;
ALsizei freq = 8000;
ALboolean loop = 1; //
//
short data[800];
alGenBuffers(1, &Buffer);
float max = SHRT_MAX / 4;
float rad = 0;
for(short & e : data)
{
e = (short)(max * cosf(rad));
rad += 1.f;
}
// WAV
alBufferData(Buffer, AL_FORMAT_MONO16, data, size, freq);
alGenSources(1, &Source);
//
ALfloat SourcePos[] = { 0.0, 0.0, 0.0 };
//
ALfloat SourceVel[] = { 0.0, 0.0, 0.0 };
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 );
return true;
}
void UnloadData()
{
alDeleteBuffers(1, &Buffer);
alDeleteSources(1, &Source);
}
3. 방송
여기 서 자 유 롭 게 발휘 할 수 있 습 니 다. alSourcePlay / alSourceStop / alSourcePause 는 각각 재생, 정지, 정지 입 니 다.
void Play()
{
//
alSourcePlay(Source);
printf("Press Enter To Stop Sound
");
getchar();
alSourceStop(Source);
}
4. 마지막 으로 헤더 파일 추가 하 는 것 을 잊 지 마 세 요.
#include // for printf
#include // for cosf
#include "al.h" // for glXzzz
#include "alc.h" // for glcXzzz
이후 두 파일 은 OPENAL SDK 의 include 디 렉 터 리 를 프로젝트 포함 경로 에 추가 해 야 합 니 다.
다음으로 전송:https://www.cnblogs.com/leaving/p/openal_begin.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.