【问题标题】:WAV compression helpWAV 压缩帮助
【发布时间】:2009-01-22 15:40:27
【问题描述】:

如何以编程方式将 WAV 文件压缩为另一种格式(PCM、11,025 KHz 采样率等)?

【问题讨论】:

  • 这是在特定的操作系统上吗?

标签: c++ audio compression format wav


【解决方案1】:

我会考虑大胆...我很确定他们没有可以执行此操作的命令行实用程序,但他们可能有一个库...

更新:

看起来他们使用的是在 LGPL 下发布的libsndfile。我是一个,可能会尝试使用它。

【讨论】:

  • 我不打算使用 Audacity。我一直在做一些研究。您对 Windows 音频压缩管理器有何看法?
【解决方案2】:

在 Linux 中使用 sox(Sound eXchange:通用声音样本翻译器): SoX 是一个命令行程序,可以将最流行的音频文件转换为大多数其他流行的音频文件格式。它可以选择 在翻译过程中更改音频样本数据类型并为文件应用一种或多种音效。

【讨论】:

    【解决方案3】:

    如果您的意思是如何将 PCM 数据压缩为不同的音频格式,那么您可以使用多种库来执行此操作,具体取决于您要支持的平台。如果你只是想改变 PCM 数据的采样率,那么你需要一个采样率转换算法,这是一个完全不同的问题。您能更具体地说明您的要求吗?

    【讨论】:

    • 我必须将 WAV 文件转换为: ID:RIFF 格式:WAVE Sub ID1:fmt 大小 1:16 音频格式:1 通道数:1 采样率:11025 字节率:11025 块对齐:每个样本 1 位:8 子 ID2:数据
    • 那是一个wav文件。您是说要将现有的 wav 文件更改为具有不同属性的 wav 文件吗?
    【解决方案4】:

    您问的是重采样,更具体地说是下采样,而不是压缩。虽然这两个过程都是有损的(意味着您将遭受信息丢失),但下采样适用于原始样本而不是频域。

    如果您对压缩感兴趣,那么您应该研究 lame 或 OGG vorbis 库;您无疑熟悉 MP3 和 OGG 技术,尽管我从您的问题中感觉您有兴趣获取较低采样率的 PCM 文件。

    在这种情况下,您需要一个重采样库,其中有几个可能性。最广为人知的是libsamplerate,老实说,我不推荐它,因为不仅在生成的音频文件中存在质量问题,而且在库本身中使用的代码的稳定性也是如此。正如其他一些人提到的那样,另一种非商业可能性是sox。根据程序的性质,您可以将 sox 作为单独的进程执行,也可以通过将其用作库从自己的代码中调用它。我个人没有尝试过这种方法,但我现在正在开发一个使用 sox 的产品(实际上是用于上采样),我们对结果非常满意。

    另一种选择是编写自己的采样率转换库,这可能是一项艰巨的任务,但是,如果您只对使用整数因子(即从 44.1kHz 到22kHz,或者从 44.1kHz 到 11kHz),那么实际上很容易,因为你只需要去除每 N 个样本。

    【讨论】:

    • 我是 libsamplerate 的作者。请通过“不仅由于生成的音频文件中的质量问题,而且由于库本身中使用的代码的稳定性问题”来解释您的主要内容。
    【解决方案5】:

    在 Windows 中,您可以使用音频压缩管理器在文件之间进行转换(acm... 函数)。您还需要 WAVEFORMAT 结构和 WAV 文件格式的工作知识。不幸的是,自己编写所有这些内容需要一些时间,这就是为什么研究其他人建议的一些开源选项可能是个好主意。

    我编写了一个我自己的开源 .NET 音频库,名为 NAudio,它可以利用您机器上安装的 ACM 编解码器将 WAV 文件从一种格式转换为另一种格式。我知道你已经用 C++ 标记了这个问题,但是如果 .NET 是可以接受的,那么这可能会为你节省一些时间。查看 NAudioDemo 项目以获取转换文件的示例。

    【讨论】:

      猜你喜欢
      • 2011-10-13
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-30
      相关资源
      最近更新 更多