使用脚本将 RAW 音频数据转换为 WAV

Posted

技术标签:

【中文标题】使用脚本将 RAW 音频数据转换为 WAV【英文标题】:Converting RAW audio data to WAV with scripting 【发布时间】:2010-01-13 17:57:23 【问题描述】:

我有大量 .RAW 音频文件(无字节序的无符号 8 位 PCM),我想将其转换为 .WAV 文件。我可以使用什么命令行工具(windows 或 linux)来快速转换它们?

【问题讨论】:

【参考方案1】:

我被一个朋友指向SoX,成功了。使用的语法是 sox -r 44100 -e unsigned -b 8 -c 1 <RAW_FILE> <TARGET_FILE>

【讨论】:

SoX 太棒了。它是一个命令行工具,因此编写脚本非常简单,尽管一开始选项的数量可能有点多。 看来“原始”文件必须以 .raw 结尾。【参考方案2】:

我发现 sox 非常快速和可靠。我将它用于与 Asterisk 放在一起的听写解决方案。但是,如果您使用的是 sox,请注意您应该知道源编码是什么。我发现 this 是我最初对我所做的项目的挂断

对于我的实现,我使用这个:

sox -t auto -w -s -r 8000 -c 1 input_file  output_file

【讨论】:

【参考方案3】:

audioconvert 很标准(我认为)

mencoder 在完全免费的 Linux 发行版中不具备标准功能,但可以转换成任何东西

【讨论】:

【参考方案4】:

MPlayer 应该能够转换您的音频;

$ mplayer \
  -quiet \
  -vo null \
  -vc dummy \
  -af volume=0,resample=44100:0:1 \
  -ao pcm:waveheader:file="file.wav" "file.raw"

它在大多数 linux 发行版包管理器中都可用。

【讨论】:

【参考方案5】:

如果你有一个包含所有原始音频文件名的文件名.txt,那么你可以使用 python 将一批原始文件转换为一批 wav。

from subprocess import call
file = "name.txt"
with open(file,'rU') as f:
     for name in f:
        name = name[:len(name)-4]
        name1 = './'+name+'raw' #input 
        name2 = './'+name+'wav' #output
        call(["sox","-r","48000", "-t", "sw", "-e", "signed", "-c", "1", "-b", "16", name1, name2])

采样率 48K,单通道,精度 16 位。

【讨论】:

小而致命的错字,你少了一个“。”在“原始”和“wav”之前。还要小心,因为有时文件的扩展名是“.RAW”(我专门指的是 Radio Music SD 卡)和 AFAIK,sox 的参数区分大小写【参考方案6】:

你可以使用 node-lame

 var Lame = require("node-lame").Lame;

 const decoder = new Lame(
        output: "./new.wav",
        raw: true,
        bitwidth:16,
        sfreq:48,
        mode: "m"
    ).setFile("./a.pcm");
    decoder.decode().then(() => 
            console.log("decoded successfully.");
        ).catch(error => 
            console.log("Error: "+error);
        );

https://www.npmjs.com/package/node-lame

或使用“sox”CLI 工具

sox -r 48000 -t sw -e signed -c 1 -b 16 a.pcm new.wav

【讨论】:

【参考方案7】:

让我们使用 Sox,它几乎无处不在。

在 Mac 上:

brew install sox

在 Ubuntu 上(测试 18.04):

sudo apt update && sudo apt install sox -y

我倾向于使用 16k SR、16 位精度和 16 位有符号整数 PCM 编码,因此将使用这些默认值。我的文件是 .raw 但也可能是 .pcm 等。

# assume you're in the directory with the raw wavs - we'll make a new wavs directory to put the converted ones
mkdir -p wavs

# 1-liner
for f in *.raw; do sox -r 16000 -e signed -b 16 -c 1 "$f" wavs/"$f%.*.wav"; done

要检查 wav 文件是否有标题,请使用 soxi:

rob@tp:~/wavs$ soxi test.wav 

Input File     : 'test.wav'
Channels       : 1
Sample Rate    : 16000
Precision      : 16-bit
Duration       : 00:00:12.62 = 201984 samples ~ 946.8 CDDA sectors
File Size      : 404k
Bit Rate       : 256k

【讨论】:

以上是关于使用脚本将 RAW 音频数据转换为 WAV的主要内容,如果未能解决你的问题,请参考以下文章

如何将wav音频文件格式为pcm转化为ima adpcm格式

在将数据输入 FFT 用于音频频谱分析仪之前,使用 python 将 wav 文件转换为 csv 文件 [关闭]

将原始PCM数据转换为RIFF WAV

使用 NAudio 将 g722 音频转换为 WAV

如何使用 javascript 将 wav blob 转换为其他音频类型?

存储来自自定义工作集的 Web 音频处理数据以转换为 wav 文件