OpenAl 프로 그래 밍 입문: 오디 오 재생

OpenAl 프로 그래 밍 입문 은 OpenAl 에 대해 더 이상 소개 하지 않 겠 습 니 다. 이 두 편의 설명 은 초보 적 인 이해 에 충분 합 니 다.http://baike.baidu.com/view/1355367.htmhttp://en.wikipedia.org/wiki/OpenAL관련 개발 패 키 지 는 구 글 에서 'OPENAL SDK DOWNLOAD' 를 검색 할 수 있 습 니 다.
다음은 매우 간단 한 예제 입 니 다. 우 리 는 사인 오디 오 를 재생 할 것 입 니 다.
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

좋은 웹페이지 즐겨찾기