当前位置: 首页 > 工具软件 > OpenAL > 使用案例 >

openal alut vs2019编译

长孙鸿振
2023-12-01

1,下载 VS2019 社区版(community),这是微软提供的开源免费版本,针对个人用户。离线安装参考微软的说明。

2,下载 openal-soft-1.20.1.tar.bz2 : https://www.openal-soft.org/openal-releases/openal-soft-1.20.1.tar.bz2

3,下载 freealut-last-upstream-commit.zip : https://github.com/vancegroup/freealut/archive/last-upstream-commit.zip

4,下载cmake : cmake-3.18.0-win64-x64.msi : https://github.com/Kitware/CMake/releases/download/v3.18.0/cmake-3.18.0-win64-x64.msi

安装:

1,安装cmake

2,安装VS2019

3,解压 openal-soft ,进入源码目录,建立 build 目录(如果没有),进入 build 目录,执行 cmake .. ,生成vs2019工程文件 OpenAl.sln,用vs2019打开工程文件,编译64位目标文件。

4,解压 freealut ,进入源码目录,建立 build 目录(如果没有),进入 build 目录,执行 cmake .. ,生成vs2019工程文件 Alut.sln,用vs2019打开工程文件,编译64位目标文件。需要指定 openal-soft 的 include 及 include\AL 目录。如果cmake时总是头文件找不到,需要修改一下CMakeLists.txt,添加OPENAL_INCLUDE_DIR变量目录,注释掉出错的提示行IF(NOT AL_HEADERS)

测试代码:

建立新工程,终端控制台工程,使用下列源码:

// ==============================================================

#include <al.h>   
#include <alc.h>   
#include <alut.h>   
      
#include <iostream>   
#include <stdlib.h>   
#include <stdio.h>   
 
// 存储声音数据.
ALuint Buffer;
 
// 用于播放声音.
ALuint Source;
 
// 源声音的位置.
ALfloat SourcePos[] = { 0.0, 0.0, 0.0 };
 
// 源声音的速度.
ALfloat SourceVel[] = { 0.0, 0.0, 0.1 };
 
// 听者的位置.
ALfloat ListenerPos[] = { 0.0, 0.0, 0.0 };
 
// 听者的速度
ALfloat ListenerVel[] = { 0.0, 0.0, 0.0 };
 
// 听者的方向 (first 3 elements are "at", second 3 are "up")
ALfloat ListenerOri[] = { 0.0, 0.0, -1.0, 0.0, 1.0, 0.0 };
//这一章与上一章唯一的不同是源速度的改变,他的‘Z’现在是0.1.
 
ALboolean LoadALData()
{
    // 载入变量
    ALenum format;
    ALsizei size;
    ALvoid* data;
    ALsizei freq;
    ALboolean loop;
 
    // 载入WAV数据.
 
    alGenBuffers(1, &Buffer);
 
    if (alGetError() != AL_NO_ERROR)
        return AL_FALSE;
 
    alutLoadWAVFile((ALbyte *)"1.wav", &format, &data, &size, &freq, &loop);
    alBufferData(Buffer, format, data, size, freq);
    alutUnloadWAV(format, data, size, freq);
 
    // 捆绑源
 
    alGenSources(1, &Source);
 
    if (alGetError() != AL_NO_ERROR)
        return AL_FALSE;
 
    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, AL_TRUE );
 
    // 做错误检测并返回
 
    if (alGetError() != AL_NO_ERROR)
        return AL_FALSE;
 
    return AL_TRUE;
}
 
//在这一节中有两处改变,首先是导入“FOOTSTES。WAV”,设置源‘AL_LOOPING’
//为‘AL_TRUE’。这意味着源播放直到停止时结束。他将不断的循环播放。
void SetListenervalues()
{
    alListenerfv(AL_POSITION, ListenerPos);
    alListenerfv(AL_VELOCITY, ListenerVel);
    alListenerfv(AL_ORIENTATION, ListenerOri);
}
 
void KillALData()
{
    alDeleteBuffers(1, &Buffer);
    alDeleteSources(1, &Source);
    alutExit();
}
//这里没有改变。
int main(int argc, char *argv[])
{
    // 初始OPENAL并清错误字节
    alutInit(NULL,0);
    alGetError();
 
    // 载入WAV数据.
    if (LoadALData() == AL_FALSE)
        return 0;
 
    SetListenervalues();
 
    // 设置退出函数.
    atexit(KillALData);
 
    // 开始源的播放.
    alSourcePlay(Source);
 
    //循环
    ALint time = 0;
    ALint elapse = 0;
 
    while (1)
    {
        elapse += clock() - time;
        time += elapse;
 
        if (elapse > 50)
        {
            elapse = 0;
 
            SourcePos[0] += SourceVel[0];
            SourcePos[1] += SourceVel[1];
            SourcePos[2] += SourceVel[2];
 
            alSourcefv(Source, AL_POSITION, SourcePos);
        }
    }
 
 
    return 0;
}
 
//这里唯一的改变是增加了一个循环。他将代替播放和停止按钮。

// ==============================================================

构建64位目标

设置工程 include 目录,包含 openal-soft 的include及include\AL目录,包含 alut 的include及include\AL目录

设置工程 lib 目录,包含 openal-soft 的build\debug目录,包含 alut 的build\debug目录

加入库文件 OpenAL32.lib 及 alut.lib

如果报错:ALUT_ATTRIBUTE_DEPRECATED ,去掉 alut.h 中的这个声明好了。

把alut.dll, OpenAL32.dll 复制到生成的exe目录,执行。

 

 类似资料: