我已经这样做了:
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 标头会为您提供帮助。