C/C++声音操作系统API
C/C++ Sound OS API
我有一个关于声音的问题。我以前在我的项目中使用过像OpenAL这样的声音库。我需要的是深入了解这些库使用的底层操作系统API。即使每个库都提供了操作输入文件的简单方法根据格式,非常基本的"原始字节到字节,发送到驱动程序"函数必须存在。
我的意思是,肯定必须有一个默认的api(一个用于windows,另一个用于Linux)这些库使用的。我不认为他们直接使用每个声音卡的驱动程序,所以操作系统必须以某种方式发挥魔力。我说得对吗?
现在,我知道DirectX支持声音(虽然我从未使用过),但是DirectX默认不会安装在windows上,所以我想它不算在内,我不知道Linux上会发生什么,我想了解两者。
我知道不使用专用图书馆可能不切实际,我也不这么认为真的不打算,但我对这个话题很好奇。所以请原谅我。
所以,对于基本图形来说,它是OpenGL和DirectX。。。但声音呢?
提前谢谢。
每个主要平台都有许多允许您使用声音的API。在Windows和Mac上,操作系统默认使用Native sound API,以及其他非标准或不推荐使用的API。
看看这里的图表,它对主要平台上的许多主要声音API进行了有用的分解。
除了每个平台都有原生声音API之外,还有许多跨平台的API,它们封装了每个原生API的工作方式,以允许您编写便携式音频软件。
例如:PortAudio,这是一个众所周知的C语言API还有RtAudio,它是一个用于声音的C++API,但在我看来,它有点像旧的C++风格(没有利用C++11后的功能)。
我目前正在开发我自己的更现代的C++11音频API,可以在这里找到。目前,我的API是PortAudio的一个薄包装,它允许您以更现代的C++方式处理音频。
请记住,你选择的库也将取决于你打算做什么样的音频工作。我上面列出的所有库都处理实时音频处理,而不处理音频文件。如果你正在尝试使用音频文件,你可以使用libsndfile,这是一种流行的开源声音文件操作API。
从你问题的背景来看,听起来你主要是在与游戏开发人员相关的背景下处理声音。值得一提的是,与简单地调用一个函数来播放声音文件相比,在我迄今为止建议的大多数库的级别上使用声音的级别要低得多。
试图回答OpenAl如何与操作系统交互的问题是阅读OpenAl文档的最佳答案。
我还建议研究基本的数字音频理论以及数字信号处理。网上有许多关于这两个主题的免费资源。
编辑:
关于音频API的工作方式。。。平均的音频api是由程序员和声卡之间的几个抽象层组成的。通常给程序员一个音频数据的缓冲区,该缓冲区存储为值的数组。程序员将要求系统用于回放的一组特定参数(采样率、缓冲区大小、通道数量)。程序员将处理音频数据,并将输出缓冲区交给api,api最终将缓冲区数据交给专门为安装的声卡编写的设备驱动程序。该声卡的驱动程序将基于驱动程序所针对的平台指定的接口来实现。这就是为什么当你在机器上安装新的声卡时,你可能需要为它安装驱动程序,通过安装驱动程序你可以为操作系统级api提供一种与设备通信的方式。
- 用于访问容器<T>数据成员的正确 API
- 如何使用Luacneneneba API正确读取字符串和表参数
- C++MySQL C api用户输入行
- 如何使用 AWS Transcribe C++ API 中的'StartTranscriptionJobRequest'?
- 将std::string传递给WriteConsole API
- EvtExportLogneneneba API正在将远程计算机的事件日志保存到远程PC本身.如何将其保存到主机
- 在gtest.中使用fff.h模拟系统API
- 有没有任务栏API可以立即应用注册表更改
- C++win32 API创建多个类似视口的窗口
- 使用libcurl提交批量url的正确BING Api POST url是什么
- 如何将真正的字符串从python c-api转换为python脚本
- 在C++中设置基于操作系统的文件路径
- 使用Qt框架在c ++类中创建API调用
- Libreoffice API (UNO):需要更改用户的 xTextField 文本
- 当PSO细粒度策略对使用AdsGetObject MSDN API的Windows操作系统生效时,如何获取用户密码到期日
- 如何构建与操作系统隔离的节点插件api
- C/C++声音操作系统API
- 用于windows操作系统的strerror_r的替代api
- API连接Symbian操作系统设备
- 是否有 API 来获取操作系统中定义的原始变量值