gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 22:28:57 32 4
gpt4 key购买 nike

我是 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/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com