Spring-ai-alibaba音频
文章目录Spring AI Alibaba 语音模型实战TTS STT版本一、依赖引入二、yml 配置三、代码案例TTS文字 → 音频四、代码案例STT音频 → 文字1. 公网 URL 同步 call()录音文件识别2. 本地上传用 stream()Spring AI Alibaba 语音模型实战TTS STT用 Spring AI Alibaba 接入百炼文字转语音TTS与语音转文字STT。版本Spring Boot3.4.5spring-ai-alibaba-starter-dashscope1.1.2.1修复call()只返回部分音频的问题Java17Spring-ai更新速度快,请以官方为准可参考网址:Spring-ai官网Spring-ai阿里巴巴阿里百炼模型广场开发者指南(API/SDK)一、依赖引入dependencygroupIdorg.springframework.boot/groupIdartifactIdspring-boot-starter-web/artifactId/dependencydependencygroupIdcom.alibaba.cloud.ai/groupIdartifactIdspring-ai-alibaba-starter-dashscope/artifactId!-- 1.1.2.1TTS call() 能拿完整音频 --version1.1.2.1/version/dependencydependencygroupIdcom.alibaba/groupIdartifactIddashscope-sdk-java/artifactIdversion2.22.18/version/dependency二、yml 配置spring:application:name:spring-audio-demoai:dashscope:api-key:${DASHSCOPE_API_KEY}audio:synthesis:options:# 默认音色配置接口里也可按需覆盖 model / voicemodel:cosyvoice-v1voice:longhua说明CosyVoice 的model 与 voice 必须成套。例如代码里用cosyvoice-v3-flash时音色要用longdaiyu_v3这类 v3 音色否则可能 418。三、代码案例TTS文字 → 音频RestControllerRequestMapping(/ai/tts)publicclassTTSAudioController{/** 相对运行目录的 audio/IDE 从父工程启动时可能落在 spring-ai-second/audio */privatestaticfinalPathAUDIO_DIRPaths.get(audio);privatestaticfinalStringDEFAULT_TEXT哟,我来的不巧了,早知她来,我就不来了.;/** 注入 DashScope 语音合成模型Bean 名dashScopeSpeechSynthesisModel */privatefinalTextToSpeechModeltextToSpeechModel;publicTTSAudioController(Qualifier(dashScopeSpeechSynthesisModel)TextToSpeechModeltextToSpeechModel){this.textToSpeechModeltextToSpeechModel;}/** * GET /ai/tts/speak?text你好 * 流程拼 Options → Prompt → call() → 落盘 → 返回 mp3 字节 */GetMapping(value/speak,producesaudio/mpeg)publicbyte[]speak(RequestParam(defaultValueDEFAULT_TEXT)Stringtext){// 1合成参数模型、音色、格式、采样率等DashScopeAudioSpeechOptionsoptionsDashScopeAudioSpeechOptions.builder().model(cosyvoice-v3-flash)// 合成模型.voice(longdaiyu_v3)// 必须与模型版本匹配.responseFormat(DashScopeAudioSpeechApi.ResponseFormat.MP3).sampleRate(22050)// 采样率.volume(50)// 音量 0~100.speed(1.0)// 语速.build();// 2文本 参数 → PromptTextToSpeechPromptpromptnewTextToSpeechPrompt(text,options);// 3同步合成拿到音频字节TextToSpeechResponseresponsetextToSpeechModel.call(prompt);byte[]audioresponse.getResult().getOutput();// 4先存本地再读回学习「生成 → 落盘 → 再读」Stringfilenametts-UUID.randomUUID().mp3;saveToFolder(audio,filename);returnreadFromFolder(filename);}privatevoidsaveToFolder(byte[]data,Stringfilename){try{Files.createDirectories(AUDIO_DIR);Files.write(AUDIO_DIR.resolve(filename),data);}catch(IOExceptione){e.printStackTrace();}}privatebyte[]readFromFolder(Stringfilename){try{returnFiles.readAllBytes(AUDIO_DIR.resolve(filename));}catch(IOExceptione){e.printStackTrace();returnnewbyte[0];}}}浏览器直接访问/ai/tts/speak即可播放返回的 MP3。四、代码案例STT音频 → 文字1. 公网 URL 同步call()录音文件识别RestControllerRequestMapping(/ai/stt)publicclassController{/** * call() 走「录音文件识别」云端自己下载音频所以必须是公网 URL。 * 本地文件 / MultipartFile 对云端不可见要用 stream()见下方 upload。 */privatestaticfinalStringDEMO_AUDIO_URLhttps://dashscope.oss-cn-beijing.aliyuncs.com/samples/audio/paraformer/hello_world_female2.wav;privatefinalDashScopeAudioTranscriptionModeltranscriptionModel;publicController(DashScopeAudioTranscriptionModeltranscriptionModel){this.transcriptionModeltranscriptionModel;}/** * GET /ai/stt/basic * 流程Options → UrlResource → Prompt → call() → 文本 */GetMapping(value/basic,producestext/html;charsetUTF-8)publicStringbasic(RequestParam(defaultValueDEMO_AUDIO_URL)Stringurl)throwsMalformedURLException{DashScopeAudioTranscriptionOptionsoptionsDashScopeAudioTranscriptionOptions.builder()// 录音文件识别模型非实时.model(DashScopeModel.AudioModel.PARAFORMER_V2.getValue()).languageHints(List.of(zh,en)).build();// 告诉框架音频在这个网络地址UrlResourceaudioResourcenewUrlResource(url);AudioTranscriptionPromptpromptnewAudioTranscriptionPrompt(audioResource,options);// 同步调用提交任务并等待内部会轮询日志里出现 pending 属正常AudioTranscriptionResponseresponsetranscriptionModel.call(prompt);Stringtextresponse.getResult().getOutput();return识别结果: text;}}2. 本地上传用stream()上传文件时云端拿不到你本机路径应走实时流/** * POST /ai/stt/upload form-data 字段名 file * sampleRate 必须与文件真实采样率一致本项目 TTS 的 mp3 常用 22050 */PostMapping(value/upload,producestext/html;charsetUTF-8)publicStringupload(RequestParam(file)MultipartFilefile,RequestParam(defaultValue22050)IntegersampleRate)throwsIOException{DashScopeAudioTranscriptionOptionsoptionsDashScopeAudioTranscriptionOptions.builder().model(DashScopeModel.AudioModel.PARAFORMER_REALTIME_V2.getValue()).sampleRate(sampleRate).format(DashScopeAudioTranscriptionApi.AudioFormat.MP3)// 按实际后缀选择.languageHints(List.of(zh,en)).build();ResourceaudioResourcenewByteArrayResource(file.getBytes()){OverridepublicStringgetFilename(){returnfile.getOriginalFilename();}};AudioTranscriptionPromptpromptnewAudioTranscriptionPrompt(audioResource,options);// 实时流每帧常是「整句修订版」取最后一帧即可不要把所有帧 join 起来StringtexttranscriptionModel.stream(prompt).map(r-r.getResult()null?:r.getResult().getOutput()).filter(t-t!null!t.isBlank()).last().block();return识别结果: text;}

相关新闻

从 PHP 到 AI + Golang,程序员自救转型手记(四十八):菜单规则管理实现

从 PHP 到 AI + Golang,程序员自救转型手记(四十八):菜单规则管理实现

这是一个系列 Blog,作者将以一个 PHP 全栈工程师的身份,利用 AI 工具(claude code、codex、deepseek、豆包等):从零开始学习 golang 语言,并最终完成 ai-go-admin(github | gitee)开…

2026/10/13 22:01:45 阅读更多 →
SQL Server日期时间函数全解析:从基础概念到高阶应用与性能优化

SQL Server日期时间函数全解析:从基础概念到高阶应用与性能优化

1. 项目概述:为什么你需要一份“最全”的日期时间函数指南干了这么多年数据库开发,我发现一个挺有意思的现象:无论是新手还是老手,但凡涉及到SQL Server里的日期时间处理,总免不了要去翻文档或者搜一下某个函数的具体用…

2026/10/13 10:49:10 阅读更多 →
B站视频下载终极指南:三步解锁大会员4K高清视频

B站视频下载终极指南:三步解锁大会员4K高清视频

B站视频下载终极指南:三步解锁大会员4K高清视频 【免费下载链接】bilibili-downloader B站视频下载,支持下载大会员清晰度4K,持续更新中 项目地址: https://gitcode.com/gh_mirrors/bil/bilibili-downloader 还在为B站上的精彩视频无法…

2026/10/6 12:43:06 阅读更多 →

最新新闻

同花顺日线文件解析:从二进制乱码到可回测的OHLCV表

同花顺日线文件解析:从二进制乱码到可回测的OHLCV表

简介:这份资源面向金融数据分析初学者与量化爱好者,聚焦同花顺日线二进制文件(.day)的解析问题。压缩包仅4KB,内含2个文件:一个以600000为代码的日线样本文件,以及一份约20行的Python解析脚本&a…

2026/10/13 22:02:46 阅读更多 →
Axure RP 9 高效原型设计:动态面板、事件配置与母版管理实战指南

Axure RP 9 高效原型设计:动态面板、事件配置与母版管理实战指南

简介:《Axure RP 9 使用详解》docx文档面向产品经理、交互设计师及原型初学者,系统讲解从基础页面布局到动态面板、内联框架、函数等进阶交互功能,尤其针对项目投标时原型演示拿不出手的痛点,帮助读者做出专业、可演示的高保真原型…

2026/10/13 22:02:46 阅读更多 →
粒子群无功优化MATLAB实现:基于IEEE30节点的完整代码解析

粒子群无功优化MATLAB实现:基于IEEE30节点的完整代码解析

简介:针对电力系统网损偏高、电压质量不佳等运行优化需求,该资源提供基于粒子群算法的无功优化实现代码,采用IEEE30节点标准测试系统作为算例,适合电力专业研究生、科研人员与算法爱好者参考学习。代码完整覆盖粒子群寻优流程&…

2026/10/13 22:02:46 阅读更多 →
Spring Boot入门:自动配置与配置文件实战解析

Spring Boot入门:自动配置与配置文件实战解析

我最初接触 Spring Boot 时,最直观的感受就是"懒人福音"。这是 Spring 生态里少数能让我这种被 XML 配置折磨过的人,第一次体会到"开箱即用"的框架。如果你之前用传统 Spring 搭过项目,一定记得那些繁琐的配置&#xff1…

2026/10/13 22:02:46 阅读更多 →
FreeCAD中文翻译教程避坑指南:从参数化建模到动态数据驱动

FreeCAD中文翻译教程避坑指南:从参数化建模到动态数据驱动

简介:面向FreeCAD初学者的中文翻译版操作手册,它将官方英文文档wiki整理成更循序渐进的中文读本,帮助零基础用户快速理解参数化建模思路并掌握软件操作。FreeCAD是免费开源的跨平台3D建模软件,本手册涵盖安装、界面导航、3D视图、…

2026/10/13 22:02:46 阅读更多 →
基于SpringBoot的北京民宿推荐系统:内容算法与首都特色实践

基于SpringBoot的北京民宿推荐系统:内容算法与首都特色实践

1. 内容整体设计与思路拆解1.1 为什么是民宿推荐系统,而不是酒店预订系统先说个现象。很多人在做毕业设计时,一提到旅游住宿类系统,第一反应就是"酒店管理系统""民宿预订平台",但这类题目在答辩时很容易被打低…

2026/10/13 22:01:45 阅读更多 →

日新闻

物联网系统集成避坑指南:从选型到验收的关键要点

物联网系统集成避坑指南:从选型到验收的关键要点

做了这么多年物联网系统集成的项目,我最大的感受是,大部分坑不是出在技术前沿,而是出在一些看起来很平常的地方。设备选了便宜的、协议没问清楚、现场没摸透、验收标准写得含糊——这些细枝末节,最后都会变成延期、超支和扯皮的大…

2026/10/13 0:00:57 阅读更多 →
ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

ESP32舵机控制全攻略:从PWM原理到高级玩法与常见故障排查

如果你玩ESP32有一阵子了,很难不碰到舵机控制这道坎。做智能小车要转方向,做机械臂要抬关节,做云台要偏航俯仰,背后都是同一个东西在干活:舵机。而我见过太多人卡在“代码能编译、舵机就是不听话”这个阶段&#xff0c…

2026/10/13 0:00:57 阅读更多 →
CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

CAN总线原理与STM32实战:抗干扰、仲裁、错误处理全解析

1. 为什么CAN总线至今仍是工业现场的“硬通货”?——从汽车底盘到智能温室的真实需求你有没有拆过一辆老款燃油车的中控台?或者调试过某高校实验室里那台跑着Modbus协议却频频丢帧的PLC控制柜?又或者,在某个农业物联网项目里&…

2026/10/13 0:00:57 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →