何时使用 Wave 可扩展格式?

Posted

技术标签:

【中文标题】何时使用 Wave 可扩展格式?【英文标题】:When to use Wave Extensible Format? 【发布时间】:2015-07-31 06:06:46 【问题描述】:

我正在编写一个包含读取和写入波形文件的音频库,并且我了解三种可能的波形文件格式之间的区别,但在处理单声道或立体声 PCM 数据时,尚不清楚何时使用可扩展格式。我一直使用this 作为我的主要参考,它清除了何时使用可扩展格式的明显情况。但是,该链接提到如果 PCM 数据大于 16 位,则应使用可扩展格式,但是当我尝试使用 Audacity 导出 24 或 32 位音频时,它们没有使用可扩展格式。

我没有发现规范中提到在这种情况下应该优先使用可扩展格式,或者是否所有文件都应该使用可扩展格式。现代图书馆甚至会支持旧格式吗?我应该将文件写入简化为在所有情况下都使用可扩展格式吗?

更新:

我从 Microsoft 找到了有关格式块的 this resource。据我了解,PCM 数据可以使用可扩展格式或 18 字节格式,但旧的 16 字节格式已过时。有谁知道您是否可以在 Windows 机器上播放带有 16 字节标头的 WAVE PCM 文件?带有 16 字节标头的 24 位 PCM 怎么样?那是我在网上找到的另一个极端案例。我没有 Windows 映像,所以我无法自己检查。

【问题讨论】:

【参考方案1】:

它在 MSDN 上,但已移动或消失,现在是 trace remained is:

根据 MSDN 文档“任何 PCM 格式超过 2 通道,每个样本超过 16 位,或超过 44,100 个样本 每秒必须用WAVEFORMATEXTENSIBLE"描述

【讨论】:

我要补充一点,上面的意思是如果你生成/采购音频,你可能必须使用WAVEFORMATEXTENSIBLE。但是,如果您使用音频,它可能会使用WAVEFORMATEXTENSIBLE,即使它可以使用WAVEFORMATEX 指定,所以您应该编写代码来处理这两种情况。【参考方案2】:

根据http://www-mmsp.ece.mcgill.ca/Documents/AudioFormats/WAVE/WAVE.html

 "The WAVE_FORMAT_EXTENSIBLE format should be used whenever:
    1) PCM data has more than 16 bits/sample.
    2) The number of channels is more than 2.
    3) The actual number of bits/sample is not equal to the container size.
    4) The mapping from channels to speakers needs to be specified."

【讨论】:

【参考方案3】:

您可以在正常的 wav 格式中指定 24 位或 32 位 - 正如 Audacity 所展示的那样。可扩展格式更多地用于处理多个(超过 2 个)通道。以我的经验,WAV 格式比可扩展版本得到更广泛的支持。鉴于您正在处理单声道和立体声,我建议您坚持使用 WAV。

【讨论】:

【参考方案4】:

我会使用 16 位 PCM,然后将采样率更改为 48000 Hz、little-endian 和 2 声道立体声以获得最干净的结果,因为大多数 CD 是 44100 Hz,更改为 48000 Hz 可能会有一点用处用于消费质量音频(商业音频)以外的其他用途的更高质量。这将是最干净的选择。

【讨论】:

你误解了这个问题。他并不是在问哪种位深度/采样率提供了“最干净”的保存音频的方法(事实上,上采样会引入不必要的伪影并且不会导致额外的“干净”)。他基本上是在问什么时候使用可扩展格式合适(或最好)。

以上是关于何时使用 Wave 可扩展格式?的主要内容,如果未能解决你的问题,请参考以下文章

xml XLST模板,使用可扩展样式表语言转换格式化

底行的可扩展 tableView 单元格可见问题?

如何为 ReSharper 扩展找到正确版本的“Wave”?

XML可扩展标记语言

在格式良好的可扩展div列表中打印大数组

如何修复可访问性的空按钮?