最便宜的网站空间,青岛响应式网站设计,免费php网站模板下载,wordpress去掉分类目录前缀项目中有相关的功能#xff0c;就简单研究了一下。
说明
FreeTTS 是一个基于 Java 的开源文本转语音#xff08;TTS#xff09;引擎#xff0c;旨在将文字内容转换为自然语音输出。 FreeTTS 适合对 英文语音质量要求低、预算有限且需要离线运行 的场景#xff0c;但若需…项目中有相关的功能就简单研究了一下。
说明
FreeTTS 是一个基于 Java 的开源文本转语音TTS引擎旨在将文字内容转换为自然语音输出。 FreeTTS 适合对 英文语音质量要求低、预算有限且需要离线运行 的场景但若需中文支持或高质量语音建议选择其他方案如商业 API 或 eSpeak。
实现方式
Java 库依赖 freetts.jar 和语音库文件。
优缺点 具体实现
gradle添加依赖没成功
我在build.gradle文件中添加以下依赖然后重新构建发现报错。于是乎就换了种方式添加依赖手动引入jar包。
dependencies {implementation com.sun.speech.freetts:freetts:1.2.2
}1、 下载FreeTTS 的 JAR 包
访问 FreeTTS 官网 下载最新版本例如 freetts-1.2.2.zip。 下载地址https://sourceforge.net/projects/freetts/files/latest/download 解压后的文件目录如下 将以下文件复制到项目的 libs 目录需手动创建与build.gradle放在同级目录 1freetts.jar位于解压后的 lib 目录 2语音包例如 cmu_time_awb.jar, cmu_us_kal.jar位于 lib 目录 保险起见我将jar包全部放到libs目录下了
2、配置依赖
build.gradle 文件中添加对本地 JAR 的依赖并重新构建
dependencies {// 引入 libs 目录下的所有 JAR 文件implementation fileTree(dir: libs, include: [*.jar])
}3、代码实现
最终测试发现只读英文不读中文。
import com.sun.speech.freetts.Voice;
import com.sun.speech.freetts.VoiceManager;
import com.sun.speech.freetts.audio.AudioPlayer;
import com.sun.speech.freetts.audio.SingleFileAudioPlayer;/*** 文字转语音** param text*/public static void freeTTSToSpeak(String text) {try {VoiceManager voiceManager VoiceManager.getInstance();System.out.println(可用语音列表);for (Voice voice : voiceManager.getVoices()) {System.out.println( - voice.getName());}Voice voice voiceManager.getVoice(kevin16);if (voice null) {System.err.println(未找到指定语音请检查语音包是否已添加。);return;}voice.allocate();voice.speak(text);voice.deallocate();} catch (Exception ex) {ex.printStackTrace();}}/*** 使用FreeTTS实现文本转音频* 只支持英文** param text*/public static void freeTTSToSpeakFile(String text) {VoiceManager voiceManager VoiceManager.getInstance();System.out.println(可用语音列表);for (Voice voice : voiceManager.getVoices()) {System.out.println( - voice.getName());}Voice voice voiceManager.getVoice(kevin16);if (voice null) {System.err.println(未找到指定语音请检查语音包是否已添加。);return;}try {// 创建音频播放器指定输出路径和格式WAV 或 AU//文件默认保存在项目根目录或根据 IDE 配置的当前工作目录。//AudioPlayer audioPlayer new SingleFileAudioPlayer(output, javax.sound.sampled.AudioFileFormat.Type.WAVE);//文件生成路径可自定义路径需存在且可写AudioPlayer audioPlayer new SingleFileAudioPlayer(D:/tts_output/output, javax.sound.sampled.AudioFileFormat.Type.WAVE);// 分配语音资源并绑定音频播放器voice.setAudioPlayer(audioPlayer);voice.allocate();// 语音播放voice.speak(text);// 关闭资源并保存文件voice.deallocate();audioPlayer.close();// 确保文件写入完成System.out.println(音频文件已保存为: output.wav);} catch (Exception e) {e.printStackTrace();} }测试文件
可查看绑定的资源文件
注意事项
生成音频文时默认保存在项目根目录如果要自定义文件生成目录的时候文件夹要存在。比如代码中的tts_output文件夹要提前创建好。支持的音频格式WAV 格式、AU 格式不直接支持生成MP3格式文件。但是可以转换具体怎么转换我没研究(#.#)无法合成中文语音尝试保存中文文本会无声音输出多次运行代码会覆盖同名文件可通过时间戳生成唯一文件名。
String fileName output_ System.currentTimeMillis();
AudioPlayer audioPlayer new SingleFileAudioPlayer(fileName, AudioFileFormat.Type.WAVE);