将WAV文件转换为TXT文件

时间:2016-06-02 21:36:37

标签: file audio file-conversion sox audacity

我有一个8位WAV文件,我想将其转换为普通的TXT文件。重要的是,生成的TXT文件只包含0到255之间的数字,表示每个样本的值。

当然-128到128之类的东西也可以,因为根据需要转换/规范化所有内容应该没什么大不了的。

我尝试使用Audacity导出到不同的无头RAW格式,但可用的编码并不是我想要的。

即使这个问题可能有点奇怪(我需要某种艺术项目的文件),我将不胜感激!

1 个答案:

答案 0 :(得分:2)

首先是一个示例文件:

sox -n -r 8k -b 8 test.wav synth 0.02 sine 400 fade t 0 0 0.02 norm

这会产生0.02秒长的400Hz正弦音,从开始到结束呈线性渐变。它存储为8位精度,8kHz采样率,单通道WAV文件。

至于将其转换为[0,255]范围内的一系列样本值,您使用原始无头格式在正确的轨道上,可以使用这样的sox生成:

sox -V test.wav -e unsigned test.raw

但是如果你在文本编辑器中打开生成的.raw文件,它看起来就像一堆废话。要解决此问题,我们可以通过hexdump实用程序将数据转换为更易读的形式:

hexdump -v -e '1/1 "%03u "' test.raw > test.txt

据我所知(我昨天才了解hexdump,所以不要把我的话当作福音):-v确保所有输出都是明确写出的(否则重复由星号),-e允许您创建自己的格式字符串(单引号内的内容):1/1命令数据为“串”,每串一个字节,"%03u "确保每个'束'表示为零填充,三位无符号十进制数。还添加了一个空白区域来分隔每个“束”。

或者,第一个命令可以直接传送到第二个命令,如下所示:

sox -V test.wav -t raw -e unsigned - | hexdump -v -e '1/1 "%03u "' > test.txt

test.txt的内容看起来像这样:

head -c 64 test.txt
# 132 169 205 233 251 255 250 230 203 167 128 090 057 030 014 009

enter image description here

要删除零填充,只需从hexdump命令中删除“03”。

我应该补充说hexdump是一个BSD程序,因此在* NIX系统上非常普遍,但我不知道它在Windows上的等价物。