原始(无头)音频文件的编码是什么以及如何编码?

原始(无头)音频文件的编码是什么以及如何编码?

我已经这样做了:

me@riverbrain:~/sgf$ echo "test" | text2wave -otype raw -F 16000 >> test.raw

它产生了一个无头音频文件。该文件的奇妙之处在于它可以cat与另一个原始音频文件连接(使用 ,如文本)。

当然,我有一个问题。问题是我还不能玩。

me@riverbrain:~/sgf$ play test.raw 

play FAIL formats: bad input format for file `test.raw': sampling rate was not specified

而且,当指定采样率时

me@riverbrain:~/sgf$ play -r 16000 test.raw 
play FAIL formats: bad input format for file `test.raw': data encoding was not specified

当我查找一些“编码”信息时,我感觉它与您的处理器架构有很大关系,但也许我错了。无论如何,我找不到任何有关如何“询问”计算机原始音频文件的数据编码是什么的文档。我也知道采样率是多少,因为我自己设置了它,但这是我所能得到的。

答案1

它可能会有所不同,但至少对我来说,text2wave 生成​​ 1 通道、16 位、有符号整数 PCM。这些都是相当正常的——当你正确使用它们时就会非常清楚(例如,如果你错误地使用了无符号整数,你会得到极度扭曲的声音)

玩起来,看起来像:

play -r 16000 -b 16 -c 1 -e signed-integer /tmp/foo.raw
play -r 16000 -2 -s -c 1 /tmp/foo.raw # obsolete way for older versions of Sox

我怀疑这些参数是在 Festival 的某个地方配置的。其中一些也可能是硬编码的。

您可能遇到的唯一与体系结构相关的事情是大端与小端;在我的小端机器上 Festival 正在写入小端;如果我将该文件移动到大端机器上,我可能需要添加-L.如果text2wav在大端机器上运行,我不确定它是否会写入大端数据或小端数据。

答案2

使用aplay而不是play播放原始文件,这样您可以通过 -t 开关指定它是原始音频:

aplay -q -c 2 -t raw -f s16 test.raw

答案3

您也许可以创建自己的 RIFF 标头。稍微敲击一下就可以了……然后将标题放到你的其他部分上……

此链接显示标题布局:Canonical WAVE 文件格式

SO上还有一个相关链接:使用脚本将 RAW 音频数据转换为 WAV,但 mplayer/mencoder 答案的标记计数为零。然而,似乎索克斯作品。

索克斯在上述两个链接中都有提及,并且可以在 Ubuntu 的存储库中找到;我想其他人也是如此。

PS...我刚刚尝试使用play(不知道它存在)并发现它是 SoX! ...SO 链接给出了一个示例,复制到此处:sox -r 44100 -e unsigned -b 8 -c 1 <RAW_FILE> <TARGET_FILE>

如果你不能让它工作袜队,也许 mplayer/mencoder 或 RIFF 标头会为您提供帮助。

相关内容