2***@qq.com
2***@qq.com
  • 发布:2024-01-17 16:42
  • 更新:2024-01-18 15:01
  • 阅读:1539

uniapp怎么播放语音合成的二进制文件流

分类:uni-app

最近在做app和支付宝小程序接入阿里语音合成的功能,目的是将文本转换为语音并播放。

调用阿里的语音合成接口(tts) ,但返回的是一个二进制文件流, 并不是一个直接可供播放的音频地址;

问题:我该怎么在app中或者支付宝小程序中进行播放呢?

返回结果如图:

2024-01-17 16:42 负责人:无 分享
已邀请:
爱豆豆

爱豆豆 - 办法总比困难多

看你用的阿里云 你应该是直接请求了阿里云的语音合成接口 然后拿到了二进制文件 才问的怎么播放二进制文件
其实你并不需要再单独请求这个二进制文件 这个接口实际上已经提供了音频文件
你可以将这个接口(它本质上就是一个文件路径)拼接到你的音频标签的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();
  • 爱豆豆

    你用的是那个接口呢

    我用的这个: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

爱豆豆

爱豆豆 - 办法总比困难多

renderjs 中使用decodeAudioData
注意:需要将 buffer 连接到目标扬声器 destination source.connect(audioCtx.destination);
试试这个方法

  • 2***@qq.com (作者)

    renderjs 是什么呀 ,我先了解一下,在支付宝小程序也适用吗

    2024-01-17 17:10

  • LGG233

    到处看到你在各个问题的评论区回答问题,但是你回答的问题能不能有质量一点,你上面的回答要是提问者懂的(能力强)就不会在这里提问了,一般都是初级开发者偏多,你虽然经常给人回答,但是你的答案能不能让人看懂,有没有用是个问题,最好分享一个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

  • b***@163.com

    回复 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>  
k***@126.com

k***@126.com

你可以先保存到本地,生成本地地址再播放啊

  • 2***@qq.com (作者)

    h5页面可以, 但是app端不能使用 window.URL.createObjectURL(url); 这种方法呀

    2024-01-17 17:33

  • k***@126.com

    回复 2***@qq.com: 那就再找一个可以支持app的方法,没有特别好的办法

    2024-01-17 17:40

  • k***@126.com

    回复 2***@qq.com: plus.io试试

    2024-01-17 17:43

  • 2***@qq.com (作者)

    回复 k***@126.com: 好

    2024-01-17 17:51

  • 2***@qq.com (作者)

    回复 2***@qq.com: 还有一个问题 uniapp运行的支付宝小程序好像播放不了webm格式的视频文件,有什么其他的方法吗

    2024-01-17 17:54

要回复问题请先登录注册