不同音频API有什么区别?DirecSound/WaveOut/Wasapi该怎么选?

首页 好文分享 正文

经常玩HiFi音频的朋友们,为了追求听感甚至心理上的机制(强迫症),可能经常被“压缩格式、比特率、采样率”折腾,在Windows下听歌你甚至需要了解输出模式(API接口)。

比方说打开个音频软件,在输出设备里,你总能看到“DirecSound、WaveOut、Wasapi”这三种模式。他们有什么区别,我们今天就来聊聊这个话题。

▌MME

相对最早的是WaveOut,与之对应的还有WaveIn(和midi、mixer、aux),都属于MMEAPI(WinMM)当中的通用音频API(FP32样本),MME全称MutiMediaExtensions多媒体扩展技术。

它于1991年发布,从Windows 3.0开始支持应用程序和多媒体播放,目前已经属于Windows旧版音频组件了,老东西兼容性自然是最好的。

早期不支持“混和多音频流”,需要声卡驱动模拟多MME设备实现,从Win95完善到Vista。已经支持多音频流混合,最高每秒384000采样率、8通道、32个接口。

它无法直连硬件,需要通过层层接口才能访问硬件,导致延迟较高,缓冲区不够声音会断断续续,因此最小可接受延迟约120ms(其中KMixer混音器最低30ms)...也不支持硬件加速,只能软解吃CPU,如果CPU吃不消就会爆音断音。

▌DirectSound

由于1994年的Win95老API的多媒体函数响应太慢,很多程序员都偏向于在能硬件直连的DOS上编写游戏,于是1995年9年微软推出了革命性的DirectX API,其中包含目前主流的DirectSound(DS)。优势就是延迟相对更低,支持声卡硬件加速,但并非面对专业音频需求。

▌KS

期间还有个Windows Driver Module(WDM)解决对多音频流和延迟问题,作用的对象不是应用程序,而是驱动本身,能大幅降低延迟,堪比ASIO。

Direct组件中也包含了Kernel Streaming(KS)内核流式处理,于Windows 98中引入(Stream.sys),绕过KMixer混音器和Windows音量控制器,提供硬件级访问,实现更低的延迟。缺点是只有输出没有输入,用不了麦克风,纯独占下你听歌就听不到其他声音。

▌WASAPI

不过到了2006年11月,从VISTA开始,微软放弃了DS3D硬件支持(HAL),打算重写整套音频架构,提出了Universal Audio Architechture(UAA)通用音频架构,其中新增的就是WASAPI了,

全称Windows Audio Session API,可以对每组音频单独处理,避免SRC采样率转换导致的失真(早期Android设备必然遇到的重采样问题,也是“安卓音质不如苹果”的系统因素之一,因为谷歌强制48kHz)。无法修改音频数据,所以音效什么都是用不了的,可以理解为“直出”。

使用独占模式(Exclusive Mode),同期intel和微软合作,更新了芯片组上的HPET高精度时钟,代替PIT/RTC,降低总线延迟,实现更低的音频输出总延迟。

WASAPI也有共享模式(Shared Mode),比方说网易云的WASAPI就是,因此音质其实和DS没任何区别,仅仅是音量调整什么的变成软件独立控制了(变响一些)。

▌ASIO

折腾过Foobar2000的老玩家,可能还知道ASIO插件,全称Audio stream input output,由德国Steinberg公司所提出的(声卡公司,后被YAMAHA收购)。输入输出延迟最低降到10ms内,也能避开系统SRC重采样、音效、规格化(响度均衡)处理。

效果和WASAPI差不多,所以老系统不支持WASAPI的话可以自行安装ASIO驱动(ASIO4ALL)。缺点是由于需要系统和播放软件都支持才能用,兼容性一般。

▌**总结**

此外还有DirectMusic、EAX、OPENAL等诸多音频API,其实不难发现,音质的好坏和用什么播放器软件没关系,独占模式才有延迟低、避免SRC失真的优势。

正文完
本文最后更新于2022-10-4,已超过2年没有更新,如果文章内容或图片资源失效,请留言反馈,站长会及时处理,谢谢!
-- 展开阅读全文 --
Photoshop如何打开、编辑和导出Webp格式图片的方法
« 上一篇 10-04
弱电工程施工过程常见问题总结及解决方法
下一篇 » 09-29

发表评论

  • 泡泡
  • 阿呆
  • 阿鲁

天气

动态快讯

热门文章

链接

名人名言

行一棋不足以见智,弹一弦不足以
围棋赋