当前位置:首页 » 《关于电脑》 » 正文

Java语音转文字及文字转语音教学 (离线版)

8 人参与  2024年05月11日 10:07  分类 : 《关于电脑》  评论

点击全文阅读


1. 语音转文字

        1.1 maven导入以下包

<!-- 获取音频信息 --><dependency> <groupId>org</groupId> <artifactId>jaudiotagger</artifactId> <version>2.0.3</version></dependency><!-- 语音识别 --><dependency> <groupId>net.java.dev.jna</groupId> <artifactId>jna</artifactId> <version>5.7.0</version></dependency><dependency> <groupId>com.alphacephei</groupId> <artifactId>vosk</artifactId> <version>0.3.32</version></dependency>

        1.2 编写代码

import java.io.FileInputStream;import java.io.BufferedInputStream;import java.io.IOException;import java.io.InputStream;import javax.sound.sampled.AudioSystem;import javax.sound.sampled.UnsupportedAudioFileException;import org.vosk.LogLevel;import org.vosk.Recognizer;import org.vosk.LibVosk;import org.vosk.Model;public class DecoderDemo {    public static void main(String[] argv) throws IOException, UnsupportedAudioFileException {        LibVosk.setLogLevel(LogLevel.DEBUG);        try (Model model = new Model("D:\\model\\vosk-model-small-cn-0.22");                    InputStream ais = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream("D:\\File\\badao.wav")));                    Recognizer recognizer = new Recognizer(model, 16000)) {            int bytes;            byte[] b = new byte[4096];            while ((bytes = ais.read(b)) >= 0) {                recognizer.acceptWaveForm(b, bytes);            }            System.out.println(recognizer.getFinalResult() + System.lineSeparator());        }    }}

注意new Model("模型路径")是你下载的模型解压后的地址

InputStream ais = AudioSystem.getAudioInputStream(new BufferedInputStream(new FileInputStream("音频路径"))); 这个是你要识别的音频地址,我用的音频格式是 wav 其他格式还没试。

没有模型可以去网址: https://alphacephei.com/vosk/models 下载

选择 Chinese 下载这两个模型 (建议都下载 small模型识别快一点)

下载后记得解压在使用

2. 文字转语音

        2.1 Maven导入以下包

<!-- 文字转语音 --><dependency> <groupId>com.hynnet</groupId> <artifactId>jacob</artifactId> <version>1.18</version></dependency>

        2.2 编写代码

import com.jacob.activeX.ActiveXComponent;import com.jacob.com.Dispatch;import com.jacob.com.Variant;public class TxtToSoundUtils {    public static void main(String[] args) {        textToSpeech("打开卧室灯泡");        System.out.println("生成成功!");    }    /**     * 语音转文字并播放     *     * @param text     */    public static void textToSpeech(String text) {        ActiveXComponent ax;        try {            ax = new ActiveXComponent("Sapi.SpVoice");            // 运行时输出语音内容            Dispatch spVoice = ax.getObject();            // 音量 0-100            ax.setProperty("Volume", new Variant(100));            // 语音朗读速度 -10 到 +10            ax.setProperty("Rate", new Variant(-2));            // 执行朗读            Dispatch.call(spVoice, "Speak", new Variant(text));            // 下面是构建文件流把生成语音文件            ax = new ActiveXComponent("Sapi.SpFileStream");            Dispatch spFileStream = ax.getObject();            ax = new ActiveXComponent("Sapi.SpAudioFormat");            Dispatch spAudioFormat = ax.getObject();            // 设置音频流格式            Dispatch.put(spAudioFormat, "Type", new Variant(22));            // 设置文件输出流格式            Dispatch.putRef(spFileStream, "Format", spAudioFormat);            // 调用输出 文件流打开方法,创建一个.wav文件            Dispatch.call(spFileStream, "Open", new Variant("D:\\File\\TestFile.wav"), new Variant(3), new Variant(true));            // 设置声音对象的音频输出流为输出文件对象            Dispatch.putRef(spVoice, "AudioOutputStream", spFileStream);            // 设置音量 0到100            Dispatch.put(spVoice, "Volume", new Variant(100));            // 设置朗读速度            Dispatch.put(spVoice, "Rate", new Variant(-2));            // 开始朗读            Dispatch.call(spVoice, "Speak", new Variant(text));            // 关闭输出文件            Dispatch.call(spFileStream, "Close");            Dispatch.putRef(spVoice, "AudioOutputStream", null);            spAudioFormat.safeRelease();            spFileStream.safeRelease();            spVoice.safeRelease();            ax.safeRelease();        } catch (Exception e) {            e.printStackTrace();        }    }}

到此就完成了 语音转文字 文字转语音的功能了,希望能帮到你。有疑问评论


点击全文阅读


本文链接:http://m.zhangshiyu.com/post/106782.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 京圈佛子破戒后,我改嫁京圈纨绔(沈墨渊,白晶晶)
  • 前世被闺蜜害死,重生后我让她从太子妃变疯女苏婉儿,清歌完本_前世被闺蜜害死,重生后我让她从太子妃变疯女(苏婉儿,清歌)
  • 全书浏览七零军嫂太彪悍,带三宝上军区离婚(沈清落,陈桂花,陆有为)_七零军嫂太彪悍,带三宝上军区离婚(沈清落,陈桂花,陆有为)全书结局
  • 今天也没变成昨天(周扬陈默)全书免费_(周扬陈默)今天也没变成昨天后续(周扬陈默)
  • 重生后,秦总非要父以子贵(许沐晴,秦越泽)全书浏览_重生后,秦总非要父以子贵全书浏览
  • 他嫌弃我喝两块钱豆浆上不了台面,我结婚后他又哭又闹全书万照,白青青在线
  • 昭然若梦前尘烬列表_昭然若梦前尘烬(温昭然方池雲)
  • 导师借我股票账号,我倒欠五十万(孟潇潇,宁薇)_导师借我股票账号,我倒欠五十万孟潇潇,宁薇
  • 拒绝把外卖券给舍友,竹马送我到迪拜捡垃圾(周钰泽,蒋清清,思源)全书浏览_拒绝把外卖券给舍友,竹马送我到迪拜捡垃圾全书浏览
  • 我的人生,你已出局(程森凌古楚文)_我的人生,你已出局程森凌古楚文
  • 穿书成病娇女配,睁眼就签下离婚协议书(朱楼)_穿书成病娇女配,睁眼就签下离婚协议书
  • 老婆逼我给白月光捐肾,我死后她悔疯了(宋逸晨沈墨白)全书浏览_老婆逼我给白月光捐肾,我死后她悔疯了全书浏览

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1