学Linux - 上红联!
Linux系统教程_红联Linux门户
Linux帮助

linux下用sox批量将pcm文件加wav头及批量修改采样率

时间:2017-09-14来源:linux网站 作者:lucky_ricky
linux下用sox可以给pcm文件加头
例如:test.pcm是不带wav头的pcm文件
$ sox -t raw -c 1 -e signed-integer -b 16 -r 16000 test.pcm test.wav
 
要查看音频文件的格式可以用soxi
$ soxi test.wav 
Input File     : 'test.wav'
Channels       : 1
Sample Rate    : 16000
Precision      : 16-bit
Duration       : 00:00:02.22 = 35520 samples ~ 166.5 CDDA sectors
File Size      : 71.1k
Bit Rate       : 256k
Sample Encoding: 16-bit Signed Integer PCM
 
sox也可用于修改文件差样率,如test.wav文件的采样率修改为8000HZ
$ sox   test.wav   -r   8000  test-8K.wav
 
对于批量修改可以如下操作:
法1:awk
将当前文件夹下的pcm文件批量加文件头
rename '.raw' '' *
find -name "*" >file.list
cat file.list | awk '{ cmd = "sox -t raw -c 1 -e signed-integer -b 16 -r 16000 "$0" "$0".wav";print cmd;system(cmd);}'
mkdir ../voice_wav
mv *.wav ../voice_wav/
 
法二:bash
将当前文件夹下的wav文件批量修改为16000HZ
#!/bin/bash  
for x in ./*.wav;do
b=${x##*/}  
sox $b -r 8000 tmp-$b  
rm -rf $b  
mv tmp-$b $b  
done
 
附:linux下打乱文本行序、文本分割与文本合并
一、打乱文本行序
linux下,将train.txt按行打乱,每行内容则保持不变,直接将输出写入新的文本train_rand.txt,命令:
sudo awk 'BEGIN{ 100000*srand();}{ printf "%s %s\n", rand(), $0}' train.txt |sort -k1n | awk '{gsub($1FS,""); print $0}' > train_rand.txt
srand(); rand()在awk内获取随机数
gsub替换文本
 
二、文本分割
将一个大文本拆分为几个小文本可以用命令split:
split -l n 原始文件 拆分后文件名前缀
最后一个文件的行数没有n行则以剩余行数进行分配,比如有一个名为train.txt的文件,公有210行,进行拆分:
拆分后会生成三个文本,最后一个文本仅有10行
split -l 100 train.txt train_split
 
三、文本合并
将几个文本train_1.txt
train_2.txt train_3.txt合并为一个 train.txt可以用命令:
cat train_1.txt train_2.txt train_3.txt > train.txt
 
本文永久更新地址:/linux/32600.html
------分隔线------