前端中的一颗绊脚石 2024-04-16 16:48 采纳率: 0%
浏览 38

您好 我问一下 您那个语音合成返回的base64 是如何处理 并拼接到一起播放出来 而且还不卡顿的

您好 我问一下 您那个语音合成返回的base64 是如何处理 并拼接到一起播放出来 而且还不卡顿的

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-16 16:48
    关注

    引自免费微信小程序:皆我百晓生

    在 UniApp 中,处理语音合成返回的 Base64 数据并流畅播放,可以遵循以下步骤:

    1. 首先,你需要安装一个支持 Base64 播放的音频库。这里推荐使用 uni-player,它是一个轻量级的音频播放组件,可以在 UniApp 中很好地工作。

    2. 安装 uni-player: 在项目根目录运行以下命令来安装:

      uni add plugin @dcloudio/uni-player
      
    3. 引入组件: 在需要使用音频播放功能的页面中引入组件:

      <template>
        <!-- ... -->
        <player ref="player"></player>
      </template>
      
      <script>
      import { Player } from '@dcloudio/uni-player'
      export default {
        components: {
          Player,
        },
        // ...
      }
      </script>
      
    4. 创建一个函数来处理 Base64 数据,并将其转换为 Blob 对象,然后设置给 Player 组件:

      async function playBase64(base64Data) {
        const arrayBuffer = await convertBase64ToAudioBuffer(base64Data);
        const blob = new Blob([arrayBuffer], { type: 'audio/mp3' });
        this.$refs.player.src = URL.createObjectURL(blob);
        this.$refs.player.play();
      }
      
      function convertBase64ToAudioBuffer(base64Data) {
        return new Promise((resolve, reject) => {
          const base64String = base64Data.split(',')[1];
          const binaryString = window.atob(base64String);
          const length = binaryString.length;
          const audioData = new Uint8Array(length);
      
          for (let i = 0; i < length; i++) {
            audioData[i] = binaryString.charCodeAt(i);
          }
      
          resolve(audioData.buffer);
        });
      }
      
    5. 当收到语音合成的 Base64 返回数据后,调用 playBase64 函数进行播放:

      // 假设你有一个名为 getVoice 的函数,用于获取语音合成的 Base64 数据
      getVoice().then((voiceBase64) => {
        playBase64(voiceBase64);
      });
      

    通过以上步骤,你应该能够在 UniApp 中流畅地播放从语音合成服务返回的 Base64 数据了。注意,为了防止音频间的延迟,你可以考虑在上一个音频结束时开始加载下一个音频,或者使用流式播放技术。这可能需要更复杂的实现,例如使用 MediaSource Extensions (MSE),但这已经超出了本问题的范围。如果你对流式播放感兴趣,可以查阅相关文档和教程进行深入学习。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月16日

悬赏问题

  • ¥50 python批量提取发票的信息
  • ¥15 mysql安装,初始化数据库失败
  • ¥15 虚幻五引擎内容如何上传至网盘?
  • ¥15 使用mmpose库时出现了问题
  • ¥15 IRI2016模型matlab运行报错
  • ¥50 bat怎么设置电脑后台自动点击网页指定词运行脚本,输入指定网页链接,指定点击词,指定间隔时间,指定网页出现的词,指定网页出现词出现后后点击锁定,放在后台运行不影响前台鼠标工作
  • ¥20 20CrMnMo的高温变形抗力
  • ¥15 RTX3.6 5565驱动中断报错
  • ¥50 带防重放token(Antireplay-Token)的网站怎么用Python发送请求
  • ¥15 visa版本没问题,串口调试助手调试串口正常使用,但是labview刷新不出来