sph音频转换为其他格式,结合sox工具转为合适的wav音频 ——简记
SPHERE转换工具:用于将 sph 音频文件转换为其他格式的程序
-
工具介绍:
sph2pipe can: -
run on UNIX systems (should also work on MacOS X, via its unix
shell/command-line interface, using the “Terminal” utility) -
provide SPHERE-formatted output as well as RIFF, AU, AIFF and raw
-
handle raw sample data as input, using a SPHERE header stored in a
separate file. -
trim off the beginning and/or end of the input data, to output just
a user-specified segment based on either time or sample offsets
(sph_convert always outputs the entire file) -
write the output data to stdout, for redirection to any named file,
or to a pipeline process (sph_convert always writes the data to a
new file, with a name derived automatically from the input file) -
support input and output of A-law speech data
Hello my friends !
- 1
- 安装:
下载好对应的源码,解压,里面是 3个 *.c files, and 3个 *.h
files ,编译生成可执行文件 sph2pipe
编译需要标准的gcc环境即可,原文如下,均摘自readme文件
-- then:
cd sph2pipe_v2.4
gcc -o sph2pipe *.c -lm ## on unix
or
gcc -o sph2pipe.exe *.c -lm ## on wintel, using the djgpp compiler
That's it -- no configuration scripts, makefiles or special libraries
are needed (the source code consists of just 3 *.c files, and 3 *.h
files; the standard math library is needed for compilation). Put the
resulting "sph2pipe" executable in your path and start using it. If you
don't have gcc, try whatever C compiler you do have; you might need to
change a few details in sph_convert.h, but we hope the code is generic
enough (POSIX compliant) to work anywhere.
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 将生成的可执行文件sph2pipe 加入当前用户的环境变量,使任意位置都可以使用该命令
vim .bashrc
添加路径即可:
export PATH=/home/zql/soft/pythonsoft/sph2pipe_v2.5:$PATH
然后 source 命令使命令立即生效
source .bashrc
- 1
- 2
- 3
- 4
- 5
- 输入sph2pipe命令显示命令格式如下:
sph2pipe
Usage: sph2pipe [-h hdr] [-t|-s b:e] [-c 1|2] [-p|-u|-a] [-f typ] infile [outfile]
default conditions (for 'sph2pipe infile'):
* input file contains sphere header
* output full duration of input file
* output all channels from input file
* output same sample coding as input file
* output format is WAV on Wintel machines, SPH elsewhere
* output is written to stdout
optional controls (items bracketed separately above can be combined):
-h hdr -- treat infile as headerless, get sphere info from file 'hdr'
-t b:e -- output portion between b and e sec (floating point)
-s b:e -- output portion between b and e samples (integer)
-c 1 -- only output first channel
-c 2 -- only output second channel
-p -- force conversion to 16-bit linear pcm
-u -- force conversion to 8-bit ulaw
-a -- force conversion to 8-bit alaw
-f typ -- select alternate output header format 'typ'
five types: sph, raw, au, rif(wav), aif(mac)
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
我使用的命令总结如下(对着上面的命令格式,自行组合即可,下面的命令适用于我的这批数据):
- 直接转换失败,虽然我们的输出后缀wav,但是默认它的输出还是个sph,原因如下 :
- output format is WAV on Wintel machines, SPH elsewhere
sph2pipe test.sph 1.wav
然后使用 sox 工具查看wav 头信息,发现sox 不支持该 alaw 编码格式的sph
soxi 1.wav
soxi FAIL formats: can't open input file `1.wav': sph: unsupported coding `alaw'
- 1
- 2
- 3
- 4
- -f typ – select alternate output header format ‘typ’
five types: sph, raw, au, rif(wav), aif(mac)
sph2pipe -f rif test.sph 2.wav
soxi 2.wav
Input File : '2.wav'
Channels : 2
Sample Rate : 8000
Precision : 13-bit
Duration : 00:09:59.48 = 4795872 samples ~ 44961.3 CDDA sectors
File Size : 9.59M
Bit Rate : 128k
Sample Encoding: 8-bit A-law
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- -p – force conversion to 16-bit linear pcm
sph2pipe -p -f rif test.sph 3.wav
soxi 3.wav
Input File : '3.wav'
Channels : 2
Sample Rate : 8000
Precision : 16-bit
Duration : 00:09:59.48 = 4795872 samples ~ 44961.3 CDDA sectors
File Size : 19.2M
Bit Rate : 256k
Sample Encoding: 16-bit Signed Integer PCM
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- -c 1 – only output first channel
- -c 2 – only output second channel
sph2pipe 的 指定 channel 则输出基本 只有 first channel 的声音 ,因此 这种方式 的wav ,并非我想要的
sph2pipe -c 1 -f rif test.sph c1.wav
sph2pipe -c 2 -f rif test.sph c2.wav
sph2pipe -c 1 -p -f rif test.sph c1_16k.wav
sph2pipe -c 2 -p -f rif test.sph c2_16k.wav
- 1
- 2
- 3
- 4
- 5
- 6
我需要的音频格式为:单通道 16k/8k 16/8 bit
- 因此先使用sph2pipe 转为 16bit 的 双通道 的wav ,其默认为 A-law的压缩格式,量化精度 不符合要求,默认采样率为8k;
- 再使用wav工具将其转为 单通道 8k 的wav或者转为单通道16k的wav 三个命令如下:
sph2pipe -p -f rif test.sph 3.wav
sox 3.wav -c 1 3-1.wav
sox 3.wav -r 16000 -c 1 3-1_16k.wav
- 1
- 2
- 3
批量转换音频遍历脚本如下:
第一步:sph2pipe 把 sph 音频 转为双通道 8k 16 bit PCM 格式的 wav
#
# Run example: ./c1_16bit_16k.sh /home/zql/project/data/myTestdata/test1 /home/zql/project/data/myTestdata/test2
#
#!/bin/bash
sph(){
echo "first arg is $1"
echo "second arg is $2"
for file in $1/*.sph
do
echo $file
filename=$(basename $file .sph)
#echo ${filename}
sph2pipe -p -f rif $file $2/${filename}.wav
done
}
sph $1 $2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
第二步:双通道 8k 16 bit 转为 单通道 8k 16 bit
#
# cmd example: ./sox_channel_1.sh /home/zql/project/data/myTestdata/c2_16bit_8k /home/zql/project/data/myTestdata/c1_16bit_8k
#
#!/bin/bash
sox_precision(){
echo "first arg is $1"
echo "second arg is $2"
for file in $1/*.wav
do
echo $file
filename=${file##*/}
echo $filename
sox $file -c 1 $2/$filename
done
}
sox_precision $1 $2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
第三步:双通道 8k 16 bit 转为 单通道 16k 16 bit
#
# cmd example: ./sox_channel_1_16k.sh /home/data/myTestdata/c2_16bit_8k /home/data/myTestdata/c1_16bit_16k
#
#!/bin/bash
sox_precision(){
echo "first arg is $1"
echo "second arg is $2"
for file in $1/*.wav
do
echo $file
filename=${file##*/}
echo $filename
sox $file -r 16000 -c 1 $2/$filename
done
}
sox_precision $1 $2
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
sox 工具 链接
sox官网
我总结的sox使用方法
本想试下sox是否可以把sph转为wav,但是 我的 这个音频使用sox命令报错如下,不支持这种alaw压缩的音频编码,可能这批数据为alaw 压缩格式的音频,所以不适合吧
sox test.sph 1.wav
sox FAIL formats: can't open input file `test.sph': sph: unsupported coding `alaw'
- 1
- 2
文章来源: positive.blog.csdn.net,作者:墨理学AI,版权归原作者所有,如需转载,请联系作者。
原文链接:positive.blog.csdn.net/article/details/87893652
- 点赞
- 收藏
- 关注作者
评论(0)