大多数(如果不是全部)音频端点是 PCM 吗?

Posted

技术标签:

【中文标题】大多数(如果不是全部)音频端点是 PCM 吗?【英文标题】:Are most (if not all) audio endpoints PCM? 【发布时间】:2014-04-23 19:33:00 【问题描述】:

我正在使用 WASAPI 编写专业音频应用程序。我机器上的所有设备都具有 16 位或 24 位 PCM 的引擎格式。考虑到这一点,我想知道假设所有音频端点都将 PCM 作为其原生格式是否安全。

有吗?如果没有,哪些设备没有?

【问题讨论】:

绝大多数专业音频应用程序仍在使用 ASIO,尽管 Microsoft 尝试引入不那么糟糕的音频 API。 @marko Fair,但我并不是专门为真正知道如何操作 ASIO 的制作人制作东西。 WASAPI 是我最好的选择,因为它开箱即用并且可以做同样的事情。就我而言,它实际上并不糟糕(除非我还不知道明显缺乏支持),除了整个 COM 头痛之外,它很容易掌握。我还希望选择同步处理音频,这是 ASIO 没有给你的(因此得名)。 微软在 Vista 中或多或少地做到了这一点——尽管即使在那时,多声道音频更多地是支持 5:1 环绕而不是专业应用程序。 ASIO 对许多软件作者的吸引力在于它是跨平台的。在 Windows 上,它是裸机并且专门接管音频接口。有趣的是,在 MacOSX 上,它位于 CoreAudio 之上,完全有可能让两个 DAW 包与 CoreAudio 共享一个多通道接口,甚至将它们的输出混合在一起。 【参考方案1】:

假设所有设备都是 16 位或 24 位 PCM 绝对不安全。我知道选择正确的格式是一件非常棘手的事情。但它也可能是 32 位的 IeeeFloat。但是,作为用户,您只能设置 16 位或 24 位 -> 大多数情况下是 16 位或 24 位。反正。您也可以使用独占模式。在独占模式下,您可以自己指定格式。但请记住:您必须被允许使用独占模式并且在独占模式下,整个系统上的所有其他播放都将停止。 -> 我不建议使用独占模式。只需检查最重要的格式,如 16 位和 24 位 PCM、32 位 IeeeFloat,其余的都是不支持的。

【讨论】:

赞成,但在我知道之前我不能接受这个作为答案 - 什么样的端点使用浮点?某种花哨的声卡? 这取决于将所有应用程序的所有流混合在一起的 Windows 混合器(而不是声卡)。问题是没有规范告诉您只有 16 位和 24 位 pcm 是可能的。因此,任何新的 Windows 版本都可能使用 ieeefloat 32bit(使用浮点样本的趋势肯定在这里)。所以我建议你支持IeeeFloat。自 Windows XP 以来内置了一个不错的 Dmo-Resampler,您可以使用它来转换为特定格式。 cscore.codeplex.com/SourceControl/latest#CSCore/SoundOut/… (SetupWaveFormat)

以上是关于大多数(如果不是全部)音频端点是 PCM 吗?的主要内容,如果未能解决你的问题,请参考以下文章

最简单的基于FFMPEG的音频编码器(PCM编码为AAC)

交错立体声 PCM 线性 Int16 大端音频是啥样的?

如何在 Windows 中从任何格式转换为 PCM

wav_pcm 的 FFmpeg 奇怪的编解码器 ID

基于AudioTrack、AudioRecord获取分贝值、录制时长、PCM解码与编码

如何将wav音频文件格式为pcm转化为ima adpcm格式