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

ixt*_*lix 9 audio sox

我已经这样做了:

me@riverbrain:~/sgf$ echo "test" | text2wave -otype raw -F 16000 >> test.raw
Run Code Online (Sandbox Code Playgroud)

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

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

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

play FAIL formats: bad input format for file `test.raw': sampling rate was not specified
Run Code Online (Sandbox Code Playgroud)

而且,在指定采样率时

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

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

der*_*ert 8

它可以变化——但至少对我来说,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
Run Code Online (Sandbox Code Playgroud)

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

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