一、初步认识OpenAL官方库 OpenAL: Cross Platform 3D Audio

1.0 介绍

OpenAL(Open Audio Library)是一个跨平台的3D音频API(应用程序编程接口),用于在计算机程序中创建高品质的音频效果。它由开放式的标准实现,并支持各种操作系统,如Windows、macOS、Linux、iOS和Android等。OpenAL提供了一种标准的方式,用于访问计算机音频设备,并使用3D音频技术来模拟音频在三维空间中的传播。

OpenAL支持多种音频格式,包括WAV、MP3和OGG等,同时还可以使用DSP(数字信号处理)效果和音频过滤器来改善音频质量和效果。此外,OpenAL还提供了一个简单的接口来创建、操纵和播放音频源,使得开发人员可以轻松地创建各种音频效果,如回声、延迟和混响等。

2.0 官网下载

3.0 SDk理解

SDK代表“Software Development Kit”,是一组用于开发特定软件或应用程序的软件工具集。SDK通常包括编译器、调试器、库、API文档、示例代码和其他有助于开发人员创建软件的工具和资源。使用SDK可以简化软件开发过程,使开发人员能够更轻松地创建和测试他们的软件,并为其他开发人员提供一种简单的方法来集成和扩展该软件。SDK通常是针对特定的平台、操作系统或开发语言而设计的,例如Android SDK、iOS SDK、Windows SDK、Java SDK等等。

4.0 zip区别

OpenAL 1.1 Windows Installer (zip) OpenAL 1.1 Core SDK (zip) 区别

  • OpenAL 1.1 Windows Installer (zip) 是一个包含Windows安装程序的压缩文件,它提供了一个易于安装和使用的OpenAL库,可以直接在Windows系统上运行。

  • OpenAL 1.1 Core SDK (zip) 是一个包含OpenAL源代码和相关文件的压缩文件,它包括了用于构建OpenAL库的工具和示例代码,以及其他开发者所需的文件。该SDK可以用于构建自定义版本的OpenAL库,或者为其他平台或应用程序定制OpenAL库。

5.0扩展库:

libsndfile

6.0 OpenAL 1.1 Windows Installer 和 libsndfile-1.0.28-w32-setup.exe 区别

OpenAL 1.1 Windows Installer是安装OpenAL的Windows安装程序。OpenAL是一种用于3D音频渲染的跨平台API,允许应用程序在游戏、虚拟现实和其他音频相关应用中创建具有空间感的声音。安装程序将在Windows系统中安装OpenAL库,以便应用程序可以调用其中的功能。

libsndfile-1.0.28-w32-setup.exe是安装libsndfile的Windows安装程序。libsndfile是一个用于读取和写入许多不同音频格式的库。它提供了一组API,允许应用程序读取和写入各种音频文件格式,例如WAV,AIFF和MP3等。

这两个安装程序提供的库功能不同,而且可以在应用程序中一起使用。如果你需要在你的应用程序中使用OpenAL,则需要安装OpenAL 1.1 Windows Installer。如果你需要在你的应用程序中读取或写入不同的音频文件格式,则需要安装libsndfile-1.0.28-w32-setup.exe。

7.0 OpenAL 1.1 Windows Installer 和 OpenAL Soft 区别

OpenAL 1.1 Windows Installer是一个由Creative Labs开发的OpenAL实现。它是一个用于多媒体应用程序的开放式跨平台3D音频API。它是用于Windows平台的OpenAL实现的一个可执行文件,包含用于安装和配置OpenAL库的程序。它支持多个平台,并且与各种音频硬件和软件兼容。

OpenAL Soft是一个替代的、开源的OpenAL实现。它与Creative Labs的OpenAL实现兼容,并提供更多的功能和灵活性。OpenAL Soft支持许多平台,包括Windows、Linux、Mac OS X等,并且能够运行在多个处理器架构上。它的优点包括更好的可移植性、更好的性能、更好的音频品质和更好的灵活性。它还支持许多额外的功能,例如HRTF(头部相关转移函数)和EAX(环境音效)扩展。

因此,OpenAL 1.1 Windows Installer是由Creative Labs开发的官方实现,而OpenAL Soft是一个替代的开源实现。如果您只需要基本的OpenAL功能,那么OpenAL 1.1 Windows Installer就足够了。但是,如果您需要更多的功能和灵活性,或者需要在不同平台之间移植,那么OpenAL Soft可能更适合您的需求。

soft库:

https://openal-soft.org/openal-binaries/openal-soft-1.23.1-bin.zip

二、编译 (OpenAL 1.1 Core SDK (zip) 和soft库)

1.0 OpenAL 1.1 Core SDK (zip) 配置

2.0 打开立体声

#include <al.h>
#include <alc.h>
#include <iostream>
​
int main() {// 初始化OpenAL设备ALCdevice* device = alcOpenDevice(nullptr);if (!device) {std::cerr << "Failed to open audio device." << std::endl;return -1;}
​// 创建上下文ALCcontext* context = alcCreateContext(device, nullptr);if (!context) {std::cerr << "Failed to create audio context." << std::endl;alcCloseDevice(device);return -1;}
​// 设置上下文alcMakeContextCurrent(context);
​// 创建源ALuint source;alGenSources(1, &source);
​// 设置源属性alSourcef(source, AL_PITCH, 1.0f);                   //设置声音的播放速度。默认值为1.0,表示正常速度。alSourcef(source, AL_GAIN, 1.0f);                   //设置声音的增益或者说音量。默认值为1.0,表示最大音量。alSource3f(source, AL_POSITION, -1.0f, 0.0f, 0.0f); //设置源在3D空间中的位置。这里将源放在了(-1, 0, 0)的位置。alSource3f(source, AL_VELOCITY, -1.0f, 0.0f, 0.0f); //设置源在3D空间中的速度。这里设置源的速度为(-1, 0, 0)。alSourcei(source, AL_LOOPING, AL_TRUE);             //设置源是否循环播放。这里将源的循环属性设置为AL_TRUE,表示循环播放。
​// 创建缓冲区ALuint buffer;alGenBuffers(1, &buffer);
​// 加载音频文件const char* filename = "ds_china.wav";FILE* fp = nullptr;fopen_s(&fp, filename, "rb");if (!fp) {std::cerr << "Failed to open audio file." << std::endl;return -1;}
​// 读取音频数据fseek(fp, 0, SEEK_END);long file_size = ftell(fp);fseek(fp, 0, SEEK_SET);char* file_data = new char[file_size];fread(file_data, 1, file_size, fp);fclose(fp);
​// 将音频数据存入缓冲区 alBufferData(buffer, AL_FORMAT_STEREO16, file_data, file_size, 44100);
​// 将缓冲区连接到源alSourcei(source, AL_BUFFER, buffer);
​// 播放音频alSourcePlay(source);
​// 等待音频播放完毕ALint state;do {alGetSourcei(source, AL_SOURCE_STATE, &state);} while (state == AL_PLAYING);
​// 删除资源alDeleteSources(1, &source);alDeleteBuffers(1, &buffer);alcMakeContextCurrent(nullptr);alcDestroyContext(context);alcCloseDevice(device);
​// 释放内存delete[] file_data;
​return 0;
}

3.0 soft扩展库 和 libsndfile-1 库 配置

4.0 soft 案例

#include <iostream>
#include <cstring>
#include <sndfile.h>
#include <AL/al.h>
#include <AL/alc.h>
#include <vector>
​
using namespace std;
​
int main() {const char* filename = "sample.wav"; // 将路径替换为您的 WAV 文件路径SF_INFO sfinfo;memset(&sfinfo, 0, sizeof(sfinfo));
​//使用SF_INFO结构体获取音频文件的信息,例如通道数、采样率和帧数等等SNDFILE* sndfile = sf_open(filename, SFM_READ, &sfinfo);if (!sndfile) {cerr << "Error: Failed to open file " << filename << endl;return 1;}
​cout << "File: " << filename << endl;cout << "Channels: " << sfinfo.channels << endl;cout << "Sample Rate: " << sfinfo.samplerate << endl;cout << "Frames: " << sfinfo.frames << endl;
​vector<ALshort> data(sfinfo.frames * sfinfo.channels);if (sf_read_short(sndfile, data.data(), data.size()) < 1) {cerr << "Error: Failed to read file " << filename << endl;return 1;}
​sf_close(sndfile);
​//打开设备ALCdevice* device = alcOpenDevice(nullptr);if (!device) {cerr << "Error: Failed to open OpenAL device" << endl;return 1;}//创建OpenAL上下文ALCcontext* context = alcCreateContext(device, nullptr);if (!context) {cerr << "Error: Failed to create OpenAL context" << endl;alcCloseDevice(device);return 1;}
​alcMakeContextCurrent(context);
​ALuint buffer = 0;alGenBuffers(1, &buffer);//将音频数据填充到缓冲区中alBufferData(buffer, sfinfo.channels == 1 ? AL_FORMAT_MONO16 : AL_FORMAT_STEREO16, data.data(), data.size() * sizeof(ALshort), sfinfo.samplerate);
​//使用alGenSources()函数生成一个音频源,并使用alSourcei()函数将音频缓冲区绑定到音频源上ALuint source = 0;alGenSources(1, &source);alSourcei(source, AL_BUFFER, buffer);
​alSourcePlay(source);
​ALint state;do {alGetSourcei(source, AL_SOURCE_STATE, &state);} while (state == AL_PLAYING);
​alDeleteSources(1, &source);alDeleteBuffers(1, &buffer);
​alcMakeContextCurrent(nullptr);alcDestroyContext(context);alcCloseDevice(device);
​return 0;
}

三、soft源码Cmake编译

1.感兴趣可以搜下Cmake 编译

2.库替换自己编译的,附加到进程可以调试源码,感兴趣可以搜下如何附加到进程

3.wav资源, 在day01 SDL 下载的源码里面

4.测试案例涉及到wav资源的查看,现在用的是VLC,学习音视频必备,官网下载一下

day03 OpenAL 编译及案例(windows)相关推荐

  1. Mesalink v1.0.0 发布,正式支持 TLS 1.3 和 IPv6,支持CMake编译,支持Windows,实现生产环境可用...

    百度智能云 云生态狂欢季 热门云产品1折起>>>   MesaLink TLS是百度安全实验室研发的下一代传输层安全(Transport Layer Security, TLS)库. ...

  2. bat小工具_小程序反编译工具在windows系统下的调用脚本

    点击上方蓝字可以订阅哦 之前的文章中介绍了小程序的反编译工具,工具在 Linux 系统下使用时执行bingo.sh [xxx.wxapkg]就可以. 有小伙伴不知道在windows系统下如何使用,这里 ...

  3. 【错误记录】Windows 控制台程序编译报错 ( WINDOWS.H already included. MFC apps must not #include <Windows.h> )

    文章目录 一.报错信息 二.解决方案 一.报错信息 Windows 控制台程序编译报错 : 已启动生成- 1>------ 已启动生成: 项目: hacktool, 配置: Debug Win3 ...

  4. AICompiler动态shape编译框架案例和效果数据

    简介:欢迎走进走进阿里云机器学习PAI AICompiler编译器系列.近期,阿里云机器学习PAI团队全新上线一套Dynamic Shape Compiler框架,不仅作为AICompiler技术栈中 ...

  5. windows下写代码在linux下编译,如何在Windows中编译Linux Unix的代码(采用cygwin)?...

    很多经典算法往往是用C++在linux下实现的,对长期从事windows开发的辛苦大众来说,想看这些算法的运行效果不得不费一点小功夫.今天捣鼓了一晚上才搞定这事,写出实现方法和大家共享. 第一步:下载 ...

  6. 6 redis 编译失败_Redis6 Windows 版本编译

    编译工具 Cygwin3 步骤 选择安装路径,这个是之cygwin命令窗口的路径.这个路径就是cygwin模拟linux环境的根路径/,再这个路径之下会有home/的文件夹,相当于windows环境中 ...

  7. 【我的渲染技术进阶之旅】如何编译Filament的windows版本程序?

    一.Filament简介 Filament 是一个基于物理的实时渲染引擎,适用于 Android.iOS.Windows.Linux.macOS 和 WebGL2.它被设计为在 Android 上尽可 ...

  8. VSCODE配置OPENCV编译环境(windows)

    参考文章: https://www.cnblogs.com/kensporger/archive/2020/02/19/12320622.html 1. 安装MinGW-64 和 CMake,这两个一 ...

  9. 可视化工具VisIt源码编译教程(Windows,图文讲解)

    我新建了一个VisIt软件的交流qq群:1169585995,欢迎大家加入一起交流,一起学习! 所用软件及其版本 用于源码编译的软件及版本如下: Windows版本:win10 VisIt版本:vis ...

最新文章

  1. 电脑文件加密_电脑文件加密软件哪个好?企业加密软件排行榜
  2. django--favicon.ico
  3. java状态模式例子答案_[转载]java设计模式_状态模式(带例子)
  4. 关于保存到session里的信息
  5. ie下的透明度,用滤镜filter:alpha
  6. kafka使用_Kafka介绍与使用
  7. 数据治理项目失败,90%都是被这29条骚操作搞垮的
  8. 最全的“大数据”学习资源
  9. linux设置ntp开机同步时间同步,linux ntp时间同步
  10. 12月中国区块链经理人指数:环比出现大幅下跌 企业融资不理想
  11. SQL卸载重装实例名重复问题
  12. 实体店如何做好门店引流
  13. html设置控件位置大小,下面那个代码段设置myButton控件显示在HTML页左上角100px的位置 - 问答库...
  14. 4 angular 重构 项目_再遇angular(angular4项目实战指南)
  15. 剑指 Offer JZ35 复杂链表的复制
  16. (引用)Python 元素、元组、列表、字典的区别
  17. 单片机跑马灯12种c语言程序设计,基于单片机多模式带音乐跑马灯设计附完整程序代码.doc...
  18. python3根据图片链接下载图片
  19. 高级计算机程序员实操题,国家计算机软考高级程序员历年真题1990.doc
  20. PL.SQL.Developer.v9.0.1.1613下载地址

热门文章

  1. 配置linux使用mail发送邮件到163邮箱
  2. nodejs和npm的关系
  3. 电商大数据平台运维案例
  4. Docker部署 Harbor
  5. Charle抓包测试-基础配置+实战
  6. Charle工具详解之实战演练问题分析、https抓包、流量设置、断点配置
  7. 服务器和普通的PC机的区别有哪些
  8. 最优化——凸优化概述
  9. android怎样生成固定的aes密钥,关于android:如何更改AES 128的密钥数量
  10. 哈希表:线性探测法和链地址法求查找成功与不成功的平均查找长度