ThinkPHP如何接入科大讯飞语音_语音合成与听写接口【详解】

梦杰姑娘_8841

梦杰姑娘_8841

2026-05-19

867人浏览

原创

thinkphp 接入科大讯飞语音需前后端分工:前端录音,后端处理音频、签名鉴权并调用 api;asr 要求 raw pcm 格式(16bit/16khz/单声道),base64 编码传输;tts 推荐 websocket 流式调用,动态生成带签名的 url;需配置白名单、匹配服务类型 key、预装 ffmpeg,并统一封装为 xunfeiservice 服务。

thinkphp如何接入科大讯飞语音_语音合成与听写接口【详解】

ThinkPHP 本身不提供语音能力,接入科大讯飞语音服务需分两步走:前端完成录音与音频准备,后端(ThinkPHP)负责接收、格式处理、签名认证并调用讯飞 API。语音合成(TTS)和语音听写(ASR)流程不同,但共用核心鉴权逻辑和音频规范。

语音听写(ASR)接入要点

听写是把用户语音转成文字,关键在音频格式、签名生成和接口调用方式:

  • 音频必须为 raw PCM 格式:16bit、单声道、16kHz;WAV 文件需剥离头信息,MP3/AMR 等必须用 ffmpeg 先转码,例如:
    ffmpeg -i input.wav -f s16le -ar 16000 -ac 1 -acodec pcm_s16le output.pcm
  • 讯飞 WebAPI 不接受文件上传,需将 PCM 内容 base64 编码后放入 JSON body 的 audio 字段,Content-Type 设为 application/x-www-form-urlencoded
  • 签名(X-CheckSum)由 APP_KEY + X-CurTime + X-Param 拼接后 MD5 得到;X-Param 是 engine_type 和 aue 字段的 base64 编码 JSON,如:{"engine_type":"sms16k","aue":"raw"}
  • ThinkPHP 接收音频建议用 $request->file('audio'),再读取临时路径,避免绕过框架校验;识别结果返回 JSON,需解析 data['result'] 或遍历 ws 数组拼接文字

语音合成(TTS)接入要点

合成是把文字转成语音流,讯飞推荐使用 WebSocket 流式接口,更稳定、支持长文本:

btpanel phpsite 宝塔面板PHP网站
btpanel phpsite 宝塔面板PHP网站

宝塔面板 PHP 网站管理:站点创建、删除、启停、PHP 版本切换、域名管理、SSL证书管理、伪静态管理、数据库管理

下载
  • 需建立 WebSocket 连接,URL 由 APPID、APIKey、APISecret 动态生成,含时间戳和签名(HMAC-SHA256)
  • 首次发送的消息体包含 appid、text、voice_name(如 xiaoyan)、speed、volume 等参数;后续接收的是分片音频 base64 数据,需持续解码并追加写入文件(如 .mp3)
  • 状态字段 status === 2 表示合成结束;中途任一响应 code !== 0 需中止并记录错误码(如 10105 表示鉴权失败)
  • ThinkPHP 中可用 ext-websocket 扩展或原生 stream_socket_client 实现,注意设置超时和 SSL 上下文

ThinkPHP 项目配置与避坑提示

实际部署中常见问题多源于配置疏漏或格式偏差:

  • 讯飞控制台需添加服务器出口 IP 到白名单,5–10 分钟生效;未加白名单会返回 10203 或 10210 错误
  • APPID、APIKey、APISecret 必须与创建应用时的服务类型匹配——语音听写和语音合成的 KEY 是分开申请的,不可混用
  • 开发调试阶段建议先用讯飞开放平台的「在线调试工具」验证参数组合,再迁移到 ThinkPHP;避免直接改代码盲试
  • 音频上传大小限制默认 64MB,但讯飞听写接口建议单次请求 ≤ 60 秒语音(约 1.8MB raw PCM),超时或过大易触发 504 或 10407

简单封装建议

可在 ThinkPHP 的 service 层统一管理讯飞能力,例如:

  • 新建 XunFeiService 类,封装签名生成、PCM 转码、WebSocket 连接、错误映射等通用逻辑
  • 听写方法接收 UploadedFile 对象,自动判断扩展名并调用 ffmpeg 转码(需服务器预装)
  • 合成方法支持传入文字、语速、音色,并返回生成的音频 URL 或本地路径,便于前端播放
  • 所有外部请求统一走 GuzzleHttp 客户端,设置默认 timeout=15、verify=true,避免 SSL 报错

php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!

相关文章

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

php thinkphp

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
php文件怎么打开
php文件怎么打开

打开php文件步骤:1、选择文本编辑器;2、在选择的文本编辑器中,创建一个新的文件,并将其保存为.php文件;3、在创建的PHP文件中,编写PHP代码;4、要在本地计算机上运行PHP文件,需要设置一个服务器环境;5、安装服务器环境后,需要将PHP文件放入服务器目录中;6、一旦将PHP文件放入服务器目录中,就可以通过浏览器来运行它。

2023.09.01

9564

6

php怎么取出数组的前几个元素
php怎么取出数组的前几个元素

取出php数组的前几个元素的方法有使用array_slice()函数、使用array_splice()函数、使用循环遍历、使用array_slice()函数和array_values()函数等。本专题为大家提供php数组相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

5761

5

php反序列化失败怎么办
php反序列化失败怎么办

php反序列化失败的解决办法检查序列化数据。检查类定义、检查错误日志、更新PHP版本和应用安全措施等。本专题为大家提供php反序列化相关的文章、下载、课程内容,供大家免费下载体验。

2023.10.11

2055

5

php怎么连接mssql数据库
php怎么连接mssql数据库

连接方法:1、通过mssql_系列函数;2、通过sqlsrv_系列函数;3、通过odbc方式连接;4、通过PDO方式;5、通过COM方式连接。想了解php怎么连接mssql数据库的详细内容,可以访问下面的文章。

2023.10.23

3588

4

php连接mssql数据库的方法
php连接mssql数据库的方法

php连接mssql数据库的方法有使用PHP的MSSQL扩展、使用PDO等。想了解更多php连接mssql数据库相关内容,可以阅读本专题下面的文章。

2023.10.23

4274

6

html怎么上传
html怎么上传

html通过使用HTML表单、JavaScript和PHP上传。更多关于html的问题详细请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.03

3351

9

PHP出现乱码怎么解决
PHP出现乱码怎么解决

PHP出现乱码可以通过修改PHP文件头部的字符编码设置、检查PHP文件的编码格式、检查数据库连接设置和检查HTML页面的字符编码设置来解决。更多关于php乱码的问题详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.09

4757

8

php文件怎么在手机上打开
php文件怎么在手机上打开

php文件在手机上打开需要在手机上搭建一个能够运行php的服务器环境,并将php文件上传到服务器上。再在手机上的浏览器中输入服务器的IP地址或域名,加上php文件的路径,即可打开php文件并查看其内容。更多关于php相关问题,详情请看本专题下面的文章。php中文网欢迎大家前来学习。

2023.11.13

3722

8

sprintf函数用法详解
sprintf函数用法详解

sprintf函数的用法:1、格式化字符串;2、指定输出宽度和精度;3、返回值。更多关于sprintf函数用法详解的内容,大家可以阅读下面的文章。

2023.11.27

11742

4

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
墨刀帮助中心
墨刀帮助中心

共0课时 | 0人学习

MyEclipse学习中心
MyEclipse学习中心

共0课时 | 0人学习

Apache Subversion 官方手册
Apache Subversion 官方手册

共0课时 | 0人学习