say是一个将文本转换为语音的工具,可以结合脚本批量的将文字转换为语音。
1、say参数用法
man say
say [-v voice] [-r rate] [-o outfile [audio format options] | -n name:port | -a device] [-f file | string ...]
OPTIONS
string #指定要转换的文字
-f file, --input-file=file
#指定需要转换的文件,需要将待转换的文本写入文件中。
#say -f text.txt
-v voice, --voice=voice
#指定要使用的声音,默认是在“系统偏好设置-辅助-语音”中选择的语音。
#查看所有声音列表 say --voice='?'
#如使用婷婷语音 say -v Ting-Ting 北京欢迎您
-r rate, --rate=rate
#使用的语音速率,以每分钟字数为单位。
#例 say -f text.txt -r 30
-o out.aiff, --output-file=file
#将转换后的语音输出到文件,-o 指定文件的路径
#输出的文件若没有指定格式,则默认为AIFF格式的
-n name, --network-send=name
-n name:port, --network-send=name:port
-n :port, --network-send=:port
-n :, --network-send=:
#指定用于通过AUNetSend重定向语音输出的服务名称(默认为“AUNetSend”)和/或IP端口。
-a ID, --audio-device=ID
-a name, --audio-device=name
#通过ID或名称前缀指定要用于播放音频的音频设备。
#获取所有设备列表 say --audio-device='?'
--progress
#在合成过程中显示进度表。
AUDIO FORMATS
#从MacOS X 10.6开始,可以指定AIFF以外的文件格式,尽管并非所有第三方合成器最初都可以支持它们。
#在简单的情况下,可以从扩展名推断出文件格式,尽管通常需要以下某些选项才能实现更精细的控制:
--file-format=format
#要写入的文件格式(AIFF,caff,m4af,WAVE)。
#通常,为输出文件指定合适的文件扩展名会更容易。
#查看所有支持的格式 say --file-format='?'
--data-format=format
#要存储的音频数据的格式。
#say -o hi.wav --data-format=alaw 北京欢迎您
--channels=channels
#通道数。由于大多数语音合成器仅产生单声道音频,因此通常用途有限。
--bit-rate=rate
#AAC等格式的比特率。
#要获取有效比特率的列表,请指定“?” 作为速率。
#实际上,并非所有这些比特率都可用于给定格式。
--quality=quality
#音频转换器的质量级别介于0(最低)和127(最高)之间。
例子
say Hello, World
say -v Alex -o hi -f hello_world.txt
say --interactive=/green spending each day the color of the leaves
say -o hi.aac 'Hello, [[slnc 200]] World'
say -o hi.m4a --data-format=alac Hello, World.
say -o hi.caf --data-format=LEF32@8000 Hello, World
say -v '?'
say --file-format='?'
say --file-format=caff --data-format='?'
say -o hi.m4a --bit-rate='?'
say -o hi.wav --data-format=alaw 北京欢迎您
2、批量转换脚本
#!/bin/bash
# 将text.txt文件中的文字,逐行转换为语音,保存到voice目录中
# 命令示例 say -o hi.wav --data-format=alaw 北京欢迎您
text=text.txt
voice_folder=voice
[ ! -f $text ] && { echo "file $text does not exist"; exit 1; }
[ ! -d $voice_folder ] && { echo "folder $voice_folder does not exist"; exit 1; }
while read i
do
say -o ${voice_folder}/${i}.wav --data-format=alaw $i
done < $text