2012-02-02 5 views
1

OpenAl 라이브러리를 사용하여 새로 생겼습니다. OpenAl 프로그래밍 가이드를 따르고 있지만 찾을 수 없습니다.기본 사운드를 재생하는 OpenAL 코드

이 코드는 OpenAl 프로그래밍 가이드 10 페이지에서 추출되었지만 여전히 소리가 나지 않습니다. OSX Snow Leopard를 사용합니다. OSX에는 ALUT가 정의되어 있지 않습니다.

#include <stdio.h> 
#include <sys/types.h> 
#include <sys/stat.h> 
#include <unistd.h> 
#include <stdlib.h> 

#include <OpenAL/al.h> 
#include <OpenAL/alc.h> 

using namespace std; 

#define NUM_BUFFERS 3 
#define BUFFER_SIZE 4096 

int main(int argc, char **argv) 
{ 
    ALCdevice *dev; 
    ALCcontext *ctx; 
    struct stat statbuf; 

    Aluint buffer[NUM_BUFFERS]; 
    Aluint source[NUM_SOURCES]; 

    ALsizei size, freq; 
    ALenum format; 
    ALvoid *data; 

    // Initialization 
    dev = alcOpenDevice(NULL); // select the "preferred dev" 

    if (dev) 
    { 
     ctx = alcCreateContext(dev,NULL); 
     alcMakeContextCurrent(ctx); 
    } 
    // Check for EAX 2.0 support 
    // g_bEAX = alIsExtensionPresent("EAX2.0"); 

    // Generate Buffers 
    alGetError(); // clear error code 
    alGenBuffers(NUM_BUFFERS, buffer); 
    if ((error = alGetError()) != AL_NO_ERROR) 
    { 
     DisplayALError("alGenBuffers :", error); 
     return 1; 
    } 
    // Load test.wav 
    loadWAVFile("sample.wav", &format, &data, &size, &freq, &loop); 
    if ((error = alGetError()) != AL_NO_ERROR) 
    { 
     DisplayALError("LoadWAVFile sample.wav : ", error); 
     alDeleteBuffers(NUM_BUFFERS, buffer); 
    return 1; 
    } 

    // Copy test.wav data into AL Buffer 0 
    alBufferData(buffer[0], format, data, size, freq); 
    if ((error = alGetError()) != AL_NO_ERROR) 
    { 
    DisplayALError("alBufferData buffer 0 : ", error); 
    alDeleteBuffers(NUM_BUFFERS, buffer); 
    return 1; 
    } 

    // Unload test.wav 
    unloadWAV(format, data, size, freq); 
    if ((error = alGetError()) != AL_NO_ERROR) 
    { 
     DisplayALError("UnloadWAV : ", error); 
     alDeleteBuffers(NUM_BUFFERS, buffer); 
     return 1; 
    } 
    // Generate Sources 
    alGenSources(1, source); 
    if ((error = alGetError()) != AL_NO_ERROR) 
    { 
     DisplayALError("alGenSources 1 : ", error); 
     return 1; 
    } 
    // Attach buffer 0 to source 
    alSourcei(source[0], AL_BUFFER, buffer[0]); 
    if ((error = alGetError()) != AL_NO_ERROR) 
    { 
     DisplayALError("alSourcei AL_BUFFER 0 : ", error); 
    } 

    // Exit 
    ctx = alcGetCurrentContext(); 
    dev = alcGetContextsDevice(ctx); 
    alcMakeContextCurrent(NULL); 
    alcDestroyContext(ctx); 
    alcCloseDevice(dev); 

    return 0; 
} 

이 코드의 작동을 놓친 것은 무엇입니까 ??? 내가 뭘 잘못하고 있니?

조언을 주시면 감사하겠습니다.

답변

1

재생을 시작하기 위해 alSourcePlay (source [0])를 호출하지 않았습니다.

+0

alSourcePlay()가 비동기 적으로 실행된다는 점도 명심해야합니다. 따라서 오디오 자원이 반환 된 후 즉시 정리하면 프로그램이 즉시 종료되기 전에 아무 것도들을 수 없습니다. –

관련 문제