2

我正在调试一些处理 uLaw 或 aLaw 格式的 RTP 语音流的代码。我想捕获通过我的代码的样本并将它们存储到一个文件中。很容易。我的问题是:是否有一种文件格式可以让我轻松封装原始数据,以便可以由一些常见的播放器软件播放?

我知道采样率,它是每秒 8000 次——电话默认。

我可以将每个样本转换为等效的 16 位 PCM 并制作一个 WAV 文件,但我真的很想避免这样做。

4

2 回答 2

3

如果你有SoX,你可以将你的编码数据写入一个二进制文件,并使用一堆命令行选项来播放它,告诉 SoX 正确的格式。我认为你可以这样做:

$ sox --bits 8 --channels 1 --encoding mu-law --rate 8000 file.raw --default-device

我总是需要几次尝试才能获得正确的选项,但它是处理音频数据的有用实用程序。不同操作系统的命令行应该相同。如果该--default-device选项不适合您,您可以指定一个输出 WAV(或其他)文件。

注意文件的扩展名很重要。SoX 将使用扩展来尝试和预测一些通道/bitwdith/采样率参数。sox -h将向您显示已识别文件类型的完整列表。

于 2013-04-05T01:49:05.297 回答
2

常见的 Microsoft WAV 和 Apple AIFF 格式都可以存储 aLaw 和 uLaw 数据。在 WAV 中,aLaw 的格式 ID 为 0x0006,而 uLaw 的格式 ID 为 0x0007。对于 AIFF,相关的编解码器 FourCC 是“alaw”和“ulaw”。

MS WAV 似乎是阻力最小的路径。编写基本的 WAVEFORMATEX 非常简单。也许最棘手的部分,取决于您的程序的架构方式,是在您知道文件中实际有多少样本后,返回到标题部分并填写长度字段。

于 2013-04-05T01:34:01.020 回答