【问题标题】:Convert WAV file to TXT file将 WAV 文件转换为 TXT 文件
【发布时间】:2016-10-02 19:41:36
【问题描述】:

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

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

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

尽管这个问题可能有点奇怪(我需要该文件用于某种艺术项目),但我将不胜感激!

【问题讨论】:

    标签: file audio file-conversion sox audacity


    【解决方案1】:

    首先是一个示例文件:

    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 实用程序发送 if 以将数据转换为更易读的形式:

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

    据我所知(我昨天才知道hexdump,所以不要把我的话当成福音):-v 确保所有输出都明确写入(否则重复用星号表示),@ 987654330@ 让您可以创建自己的格式字符串(单引号内的内容):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
    

    要删除零填充,只需从 hexdumpcommand 中删除“03”即可。

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

    【讨论】:

    • 谢谢,我想这正是我需要的!
    • 我也想做同样的事情,但我的 .wav 文件有 32 位有符号整数样本,我想要每行一个值(不像你的那样用空格分隔),所以我使用了 @ 987654338@ 作为我的hexdump 格式字符串。
    猜你喜欢
    • 1970-01-01
    • 2020-09-22
    • 1970-01-01
    • 2011-06-19
    • 2020-04-22
    • 1970-01-01
    • 1970-01-01
    • 2016-06-19
    • 2019-08-29
    相关资源
    最近更新 更多