我正在调试一些以uLaw或aLaw格式处理RTP语音流的代码。我想捕获通过我的代码并将它们存储到文件中的样本。 那很容易。我的问题是:是否有一种文件格式,我可以轻松地封装原始数据,以便它可以由一些常见的播放器软件播放?
我知道采样率,每秒8000次 - 电话默认。
我可以转换其16位PCM等效的每个样本并制作WAV文件,但我真的很想避免这样做。
答案 0 :(得分:3)
如果您有SoX,则可以将编码数据写入二进制文件,并使用一堆命令行选项进行回放,以告知SoX格式正确。我认为你可以这样做:
$ sox --bits 8 --channels 1 --encoding mu-law --rate 8000 file.raw --default-device
总是需要我几次尝试才能正确选择,但它是处理音频数据的有用工具。操作系统的命令行应该相同。如果--default-device
选项无法正常工作,则可以指定输出WAV(或其他)文件。
请注意文件的扩展名很重要。 SoX将use the extension尝试预测某些通道/ bitwdith /采样率参数。 sox -h
将显示已识别文件类型的完整列表。
答案 1 :(得分:2)
常见的Microsoft WAV和Apple AIFF格式都可以存储aLaw和uLaw数据。在WAV中,aLaw是格式ID 0x0006而uLaw是0x0007。对于AIFF,相关的编解码器FourCC是'alaw'和'ulaw'。
MS WAV似乎是阻力最小的路径。编写基本的WAVEFORMATEX非常简单。根据程序的架构方式,最棘手的部分可能是在知道文件中实际有多少样本后,回到标题部分并填写长度字段。