最近在做app和支付宝小程序接入阿里语音合成的功能,目的是将文本转换为语音并播放。
调用阿里的语音合成接口(tts) ,但返回的是一个二进制文件流, 并不是一个直接可供播放的音频地址;
问题:我该怎么在app中或者支付宝小程序中进行播放呢?
返回结果如图:
爱豆豆 - 办法总比困难多
看你用的阿里云 你应该是直接请求了阿里云的语音合成接口 然后拿到了二进制文件 才问的怎么播放二进制文件
其实你并不需要再单独请求这个二进制文件 这个接口实际上已经提供了音频文件
你可以将这个接口(它本质上就是一个文件路径)拼接到你的音频标签的src属性上 然后放到你的Audio标签上 或者 使用 uni.createInnerAudioContext() 来播放这段音频
参考下示例接口 使用 uni.createInnerAudioContext() 来播放语音合成的文件
app和支付宝小程序都可以用
const innerAudioContext = uni.createInnerAudioContext();
// 语音合成接口
// text文本:"今天是周一,天气挺好的。"
innerAudioContext.src =
"https://nls-gateway-cn-shanghai.aliyuncs.com/stream/v1/tts?appkey=你的项目Appkey&token=你的Access Token&text=%E4%BB%8A%E5%A4%A9%E6%98%AF%E5%91%A8%E4%B8%80%EF%BC%8C%E5%A4%A9%E6%B0%94%E6%8C%BA%E5%A5%BD%E7%9A%84%E3%80%82&format=wav&sample_rate=16000";
innerAudioContext.stop();
// 播放
innerAudioContext.play();
爱豆豆 - 办法总比困难多
在 renderjs 中使用decodeAudioData
注意:需要将 buffer 连接到目标扬声器 destination source.connect(audioCtx.destination);
试试这个方法
到处看到你在各个问题的评论区回答问题,但是你回答的问题能不能有质量一点,你上面的回答要是提问者懂的(能力强)就不会在这里提问了,一般都是初级开发者偏多,你虽然经常给人回答,但是你的答案能不能让人看懂,有没有用是个问题,最好分享一个demo、或者具体的代码实现案例。
2024-01-18 11:53
回复 3***@qq.com: 非常感谢您的反馈 我会尽力提供准确和有用的答案,但是我的回答可能对于一些初学者来说可能有些难以理解。 我以后会改进我的回答 尽量更便于理解 我会尽量提供代码示例或demo,让初级开发者更好地理解问题的解决方案。
对于这个问题的回答 我只是提供了这个功能的实现方向 因为没有太多时间 就没提供demo或代码片段
2024-01-18 12:11
回复 3***@qq.com: 社区本身就是相互帮助解决问题的 有质量和无质量 最终都要提问者去一一实践 然后找到最适合自己的解决方案 而且每个人对于“质量”的标准也不一样
上面这个回答 我觉得并没问题 提问者问怎么播放二进制文件流 我回答 在 renderjs 中使用decodeAudioData
这两个都标上了文档地址 只要去仔细看看文档 基本都能看懂 decodeAudioData 文档中也有很详细的代码使用示例
2024-01-18 15:21
回复 3***@qq.com: 都是打工人,主打的就是一个态度,总不能说uniapp有问题吧,毕竟《DCloud产品不会有明显的bug,所以你遇到的问题大都是在特定环境下才能重现的问题,请仔细描述你的环境和重现方式,否则DCloud很难排查解决你的问题》uniapp主打的就是一个灵活多变,缺啥补啥,做安卓就得去研究native,然后plus.android.importClass( String classname )去研究安卓原生。做ios就得去研究native,然后plus.ios.importClass( String classname );去研究ios原生。作为一个成功的商业产品,千万愣头青的选中,不知道uniappx会是怎么样的
2024-01-22 18:32
爱豆豆 - 办法总比困难多
在 renderjs 中使用decodeAudioData 播放示例
<template>
<view>
<button @tap="test.start">播放合成语音</button>
</view>
</template>
<script module="test" lang="renderjs">
export default {
methods: {
start() {
let audioCtx = new(window.AudioContext || window.webkitAudioContext)();
let source
source = audioCtx.createBufferSource();
let request = new XMLHttpRequest();
request.open("GET", "你的语音合成接口路径", true);
request.responseType = "arraybuffer";
request.onload = function() {
let audioData = request.response;
audioCtx.decodeAudioData(
audioData,
function(buffer) {
source.buffer = buffer;
source.connect(audioCtx.destination);
source.loop = true;
//播放合成语音
source.start(0);
}
);
};
request.send();
}
}
}
</script>
爱豆豆
你用的是那个接口呢
我用的这个:https://help.aliyun.com/document_detail/94737.html?spm=a2c4g.94737.0.0.748f622dzevkiW#section-w6l-ovz-18n
2024-01-18 14:34
2***@qq.com (作者)
回复 爱豆豆: 非常感谢,用这个方法解决了,我没想到src可以直接使用一个get请求,我自己用post请求搞了好几天(Ծ‸Ծ)
2024-01-18 17:45
8***@qq.com
回复 爱豆豆: 我根据你上面说的方法播放,在开发工具上确实没问题,但是在真机调试就报错了,该怎么解决呢?
2024-11-02 17:02
2***@qq.com
你好 麻烦问一下有没有百度文字转语音后为二进制的播放方法,在uniapp里面播放
文件数据也是在这样:
ÿóÄÿóÄ:lËÒÜö!©Ñâ±è^QBw5M4Î$1¾úH
£BLØ#ÀÄuÄ4[ útéJHRåfF¨
#¦G,59Í:R#S;;ùnÉ&³~åk+|h«Q0êvvUXu´z66)iØ*¦VTöKZf$S1¤hRCNFêDÏ2kO¶Î·§ÎDUz$+¦EâLfw'3$rV/ÆxÒòä0I4{$í3\Ñ-æÁ£mú×"ÈàÉ
I!ä-Âß «-wg~ÅOÙÅÎÊZ0WLcøJµÆ4èdÒ'ÄÆ$Å^Ñ«ô)ÝT²W~CÿóÄ);¼Zxmª°ÁP¨Õ¬ZCäµJ©VÂîâÂS¯½å°óC[Ê"<,«
¤¸(YØÞOmðsK«Yý£GT±aîô¾¬ÆÊʬW>O-ã½}=O í7LÊ©»6<p£è1"v)o
Åô
+$hkµïl.â³6Á´MÀs
ÂßoÛ[è8S#çõÔ»ã
Ò4øhW¾w<O-¥ºf÷mï¹AzÛhÚ«ÜFæ8yØÀÐe@F¨ÂDI.G7Rsz@"85
·7ò¶<ìÈ«ÃçhqprÇúµÊ)ÞÀIØkå4SÏÀsÜ¢lÿóÄMLä ÐÒÑí§ÊåùUZ~NÓç iâYº7-ß+jܶWM ±nX¿Àäj jWå4»¹.µ0êaRô^ÍB@x8
#01l³µª¾¯Ê¾¢Ö±ÆíÅ%.Úªq%¯¬i¨´Ý<ò«.¨éõÙu[7±ÃñáܳÒXÆ ·Éb^¶BÇÝG,»æQÇÞÍʲie[{½;ÍçM[ìÞÆWzÓ[ì;ÿvȤAØRjb1O?.êërÕ½c:¥ðg¥
U© ¿¨[Þ\uÐÒ?÷ûÙc¤Vþ»B8$AêÈ©]D ö\pY£yÐä¹Z3"ÿóÄ,HtÖ_É,8M}F×Ã(d ¯xÓÂ\Dej5×Z(ÌÔ¾TÝÙ¢óú֫ׯI?`Ð-ÌÏÃn»§óxÇhàÔL,âj"qÑN¥«²Pì@ö)]iÊû¤µ²ÿ¥z@O^#[Þ·Üø3þïýù-ªt8EbôËäR$inÓü§¢2ü×òu¸]lP¸?>k¿8ú59§â_OèÆ37VGnÏëðþsØ¢ûc?×5úû·©/ÓrÎð¿?9j1¹üiâpþíÒNsµ)3ö7O9b1f·ß×5ÿÍ÷|û÷3þe}~5#JT°àÃÏHf'RT¨aTxÂál¨ÿóÄC,!ÜÈ>à Á¢²ÞaÇÚASúµªú~,s°Ì,æVOÌ÷Eô±Ù´×%ò ¡>¼2Áh$(&yÇZH¦äkþ7ibºçLªªÈ%$JøPÂÂQ8(:U éI¾{º[dÃ3¨o(d 9
º×uË:,I0ŬuçQÙ²§wâ3íkÙe·Sxg«¶ÿUëNsÿyÞþ?_ÿüÿÿýwÿÿÿÿ÷C¼0üé þ÷«þ í}Þö¾³ÃSüîkÕËܤ·ß×pæX}L;Þï+"ãòÇ'dÂa3ûÉFÆ^xI0¨¥ÈhOøÿóÄ#Dlæ2ÜÚ=Ýßo×G÷<%°ÚÂq½z7oùv7'ïêR>òÔÃÒzÍ%ì¤z4È "fÝÅH!LÖx¹Ëi¤¥Hæ !0Ä ßX0HeÊPrúZðÀqÉÔZØY@ÉOag`Pq$_U3X¢Æ¥geÛL4û.¢SªPäAlÜ{åÿ9w>g|ü·OoÏ
ÿu¼³Ëÿÿÿÿÿÿùýÿÿþëzïï=ÚÖñïÏë÷.ëóíýït÷õ.JçïåwíØ·Ú[]»sgzÅ«Ý˵-Ùí¼~ý)+U7r@ÁÆi
2](³N®L.ê2àÐYÁÈÿóÄ$C¼@æ&ÝÿË¡Ç"-³1ÒCÓÑbJîÛÊ饶jÛût¹ã®jWKó²«2
Id®.õÀrúH^Í f³ZB[кÀÆèÞH[2èÆÒf0¦ ªª.\â
6èù¨r@ê,¼.p<ZÔº68 µÀ¼Bé&^É'T.` ,-¨ ¤$
L 8±$âÇæÉÌÜû¹²lÉ-n+]zoWÿJ§Z(ºNb£A²ÕÐt]E@ØÅÖV¼ÌJMl¶fE¬aשG6uªû!áì+Jf¡bÞø¥WÿóÄ(6Z¦ÄÛÞ¸îjfõ9Ö[x/a¿òõΣAÜñ 7Ö3mà¾#þÊÞÒ¥ß0ÙG:´)q8 ¨RßÂdÝ'CôM©.bÆ b@EhM(â_D B ä´qà:B¨½0È "H)x B2CAÂf(Ë<ÓF¼¢vtB¥d¦/ØúÎ1âßûÂøôοëÇÏ8UÕG%þΩÔH2" C|
|Uu
获取的api:ttp://tsn.baidu.com/text2audio
2025-03-17 17:43