讯飞唤醒+VOSK语音识别+DEEPSEEK大模型+讯飞离线合成实现纯离线大模型智能语音问答。
- 游戏开发
- 2025-08-22 19:00:02

在信息爆炸的时代,智能语音问答系统正以前所未有的速度融入我们的日常生活。然而,随着数据泄露事件的频发,用户对于隐私保护的需求日益增强。想象一下,一个无需联网、即可响应你所有问题的智能助手——这就是纯离线大模型智能语音问答系统带来的革命性体验。
应用场景智能家居:在家庭环境中,用户可以通过纯离线大模型智能语音问答系统控制家电、查询天气、设置提醒等,享受便捷、智能的生活体验。
车载导航:在驾驶过程中,用户可以通过纯离线大模型智能语音问答系统进行语音导航、查询路况、播放音乐等操作,提高驾驶安全性和舒适度。
教育辅导:在教育领域,学生可以利用纯离线大模型智能语音问答系统进行学习辅导、解答疑问等,提高学习效率和成绩。
医疗咨询:在医疗领域,患者可以通过纯离线大模型智能语音问答系统咨询医生、了解病情、获取健康建议等,提高医疗服务的便捷性和可及性。
技术含量很高,既突破了离线语音听写的PC端限制,又实现了离线大模型的API调用,同时也整合了离线语音合成延迟高的问题解决方案,实现近乎完美的纯离线大模型智能问答。
// 1、唤醒调用 public static void startIvw() { Integer ret = IvwService.INSTANCE.MSPLogin(null, null, Constants.IVW_LOGIN_PARAMS); // 登录 if (ret != 0) { System.out.println("唤醒登录失败...:" + ret); } String sessionId = IvwService.INSTANCE.QIVWSessionBegin(null, Constants.IVW_SSB_PARAMS, Constants.IVW_ERROR_CODE); // 开启会话 if (Constants.IVW_ERROR_CODE.getValue() != 0) { System.out.println("开启唤醒会话失败...:" + Constants.IVW_ERROR_CODE.getValue()); } ret = IvwService.INSTANCE.QIVWRegisterNotify(sessionId, new IvwCallback(), null); // 注册唤醒回调函数 if (ret != 0) { System.out.println("注册唤醒回调函数失败...:" + ret); } try { while (true) { byte[] audioDataByteArray = new byte[Constants.IVW_FRAME_SIZE]; Constants.IVW_ASR_TARGET_DATA_LINE.open(Constants.IVW_ASR_AUDIO_FORMAT); Constants.IVW_ASR_TARGET_DATA_LINE.start(); int len = new AudioInputStream(Constants.IVW_ASR_TARGET_DATA_LINE).read(audioDataByteArray); if (len == -1) { // 调用麦克风时候,这段将不会被执行... Constants.IVW_AUDIO_STATUS = 4; ret = IvwService.INSTANCE.QIVWAudioWrite(sessionId, "".getBytes(), 0, Constants.IVW_AUDIO_STATUS); System.out.println("最后一帧返回的错误码:" + ret + ",即将执行退出..."); break; //文件读完,跳出循环 } else { // 反复调用QIVWAudioWrite写音频方法,直到音频写完为止!!!!!!!!!!!! ret = IvwService.INSTANCE.QIVWAudioWrite(sessionId, audioDataByteArray, len, Constants.IVW_AUDIO_STATUS); } Constants.IVW_AUDIO_STATUS = 2; // 中间帧 if (ret != 0) { System.err.println("唤醒音频写入失败...:" + ret); } Thread.sleep(200); // 模拟人说话时间间隙,10帧的音频200ms写入一次 } } catch (Exception e) { e.printStackTrace(); } } // 2、合成调用 public static void startTts(String ttsText) { Constants.TTS_TEXT = ttsText; Constants.TTS_BYTE_ARRAY_OUTPUT_STREAM = new ByteArrayOutputStream(); // 初始化 Constants.TTS_TOTAL_AUDIO_LENGTH = 0; Integer ret = TtsService.INSTANCE.MSPLogin(null, null, Constants.TTS_LOGIN_PARAMS); // 登录 if (ret != 0) { System.out.println("合成登录失败...:" + ret); } String session_id = TtsService.INSTANCE.QTTSSessionBegin(Constants.TTS_SESSION_BEGIN_PARAMS, Constants.TTS_ERROR_CODE); // 开启合成会话 if (Constants.TTS_ERROR_CODE.getValue() != 0) { System.out.println("合成开启会话失败...:" + Constants.TTS_ERROR_CODE.getValue()); } ret = TtsService.INSTANCE.QTTSTextPut(session_id, Constants.TTS_TEXT, Constants.TTS_TEXT.getBytes().length, null); // 正式合成 if (ret != 0) { System.out.println("合成音频失败...:" + ret); } try { //实时播放 Constants.TTS_SOURCE_DATA_LINE.open(Constants.TTS_AUDIO_FORMAT); Constants.TTS_SOURCE_DATA_LINE.start(); } catch (Exception e) { e.printStackTrace(); } while (true) { Pointer audioPointer = TtsService.INSTANCE.QTTSAudioGet(session_id, Constants.TTS_AUDIO_LEN, Constants.TTS_SYNTH_STATUS, Constants.TTS_ERROR_CODE); // 获取音频 byte[] audioDataByteArray = null; if (audioPointer != null) { audioDataByteArray = audioPointer.getByteArray(0, Constants.TTS_AUDIO_LEN.getValue()); } if (Constants.TTS_ERROR_CODE.getValue() != 0) { System.out.println("合成获取音频失败...+:" + Constants.TTS_ERROR_CODE); break; } if (audioDataByteArray != null) { try { Constants.TTS_SOURCE_DATA_LINE.write(audioDataByteArray, 0, Constants.TTS_AUDIO_LEN.getValue()); //实时写音频流 Constants.TTS_BYTE_ARRAY_OUTPUT_STREAM.write(audioDataByteArray, 0, Constants.TTS_AUDIO_LEN.getValue()); //将数据写入字节数组的输出流,用来生成音频文件 } catch (Exception e) { e.printStackTrace(); } Constants.TTS_TOTAL_AUDIO_LENGTH = Constants.TTS_TOTAL_AUDIO_LENGTH + Constants.TTS_AUDIO_LEN.getValue(); //计算总音频长度,用来生成音频文件 } if (Constants.TTS_SYNTH_STATUS.getValue() == 2) { // 说明音频已经取完,退出本次循环 try { Constants.TTS_SOURCE_DATA_LINE.drain(); Constants.TTS_SOURCE_DATA_LINE.close(); Constants.TTS_BYTE_ARRAY_OUTPUT_STREAM.flush(); Constants.TTS_BYTE_ARRAY_OUTPUT_STREAM.close(); } catch (Exception e) { e.printStackTrace(); } break; } } ret = TtsService.INSTANCE.QTTSSessionEnd(session_id, "正常退出"); //结束会话 if (ret != 0) { System.out.println("合成结束会话失败...:" + ret); } ret = TtsService.INSTANCE.MSPLogout(); // 退出 if (ret != 0) { System.out.println("合成退出失败...:" + ret); } } // 3、离线语音听写调用 // 4、离线大模型调用并获取结果讯飞唤醒+VOSK语音识别+DEEPSEEK大模型+讯飞离线合成实现纯离线大模型智能语音问答。由讯客互联游戏开发栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“讯飞唤醒+VOSK语音识别+DEEPSEEK大模型+讯飞离线合成实现纯离线大模型智能语音问答。”