macos - 播放声音的基本 OpenAL 代码

标签 macos audio 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;
}

为了让这段代码正常工作,我错过了什么??? 我做错了什么???

任何建议都可以帮助,谢谢。

最佳答案

您没有调用 alSourcePlay(source[0]) 来开始播放。

关于macos - 播放声音的基本 OpenAL 代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9111076/

相关文章:

html - .wav和.mp3文件的加载时间

linux - 使用 "read"设置变量

objective-c - 为什么取消引用 null 不会使我的程序崩溃?

mysql.server start 不会启动 mysql 服务器

java - 你如何在Java中顺序播放音频文件?

iphone - iPhone上的声音:Finch:确保声音确实播放

ios - Objective-C - 将自身的引用传递给子对象

python - 无法更改音频文件格式-python

audio - 开放音高变化

ios - OpenAL 3d 定位和平移中心