转换wav为采样率16000的wav

记录一个脚本,功能使用过sox来批量转换wav为采样率16000的wav,更复杂的转换能够经过ffmpeg来进行转换,固然sox也提供了不少的转换,详细的能够查阅他的documentshell

http://sox.sourceforge.net/Docs/Documentation数组

#/bin/bash
export arrayindex
export array
function  scandir() {
	local cur_dir parent_dir workdir
	workdir=$1
	cd $workdir
	if test $workdir = "/" 
	then
		cur_dir=""
	else
		cur_dir=$(pwd)
	fi
	for dirlist in $(ls $cur_dir)
	do
		if test -d $dirlist;then
			cd $dirlist
			scandir $cur_dir/$dirlist
			cd ..
		else
			# echo ${cur_dir}/${dirlist}
			#shell 数组赋值
			array[$arrayindex]=$cur_dir/$dirlist
			#注意shell索引的递增方式
			((arrayindex++))
		fi
	done
}
function GetALLDirInfo()
	{
		local dir
		dir=$1
		arrayindex=0
		if test -d $dir
		then
			scandir $dir
		elif test -f $dir
		then
			echo "you input a file not a directory"
			exit 1
		else
			echo "the dir you input $dir is not exit"
		fi
	}
read -p "please input the paths needed transform(file or dir):" LOCATION
echo "path is:$LOCATION"
read -p "please input the dir which you need to save the transform file :" SAVE_DIR
echo "path is:$SAVE_DIR"
if [ ! -d $SAVE_DIR ]
then 
	mkdir $SAVE_DIR
fi
if [[ -d $LOCATION ]]
then
    GetALLDirInfo $LOCATION
	for content in ${array[@]}
	do
		file_name=${content##*/}
		echo $file_name
		length=${#file_name}
		out_name=${file_name:0:length-4}
		echo $out_name
		echo $SAVE_DIR"/"$out_name"_16000.wav"
		sox  $content -r 16000   $SAVE_DIR"/"$out_name"_16000.wav"
		done
else
		file_name=${LOCATION##*/}
		echo $file_name
		length=${#file_name}
		out_name=${file_name:0:length-4}
		echo $out_name
		echo $SAVE_DIR"/"$out_name"_16000.wav"
		sox  $LOCATION -r 16000   $SAVE_DIR"/"$out_name"_16000.wav"
fi
echo "Transformation is completed!"
相关文章
相关标签/搜索