Tts.vue 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  1. <template>
  2. <div>
  3. <div class="model-viewer" ref="modelViewer"></div>
  4. <button @click="playTTS">播放语音</button>
  5. </div>
  6. </template>
  7. <script setup>
  8. import { ref } from "vue";
  9. import axios from "axios";
  10. const modelViewer = ref(null);
  11. const playTTS = async () => {
  12. const ttsMessage =
  13. "替换为你想要播报的文本"; // 替换为你想要播报的文本
  14. try {
  15. const wgToken = `C1qziFGlIv3tnCQxcFaStrLuZOO2ZZXjN7FB_G0WlrOLjclfObbSaXAKzl4RWwQBf_0Zhsm0CoVvdVsYMD18iM_LJrxtn7LHJJQuF9UoUuF3fvqOwrG4EF6Z4GahtxtQ2oeaPQBBNKlgVW1xUW7tkhEdXWqzDHPA_I_91Lczk0PI4guhx1c88Hst4-HI8pdMbiUdEJzj3d3a2W06Fa0XA9Q0taAwaRd1k9jUrDVyj9GfS84_SIgJF4SPjWVfsraV79ieb_StgRcUwZjbscGPMlifnJD6F00wwNbxG7AuCHbl3EtMfSed1vuVx3AsizIckwzIVSVRpOGw72cdAMui-I6es9Ozj2ITzSa5KgyXEpX4qCHF1VcCM1wlHLQ_5hLnJIi4r8NsnJPsxMYrTw`;
  16. const res = await axios.post(
  17. `https://fls-ai-stg-sit.pingan.com.cn/openapi/ai/voice/tts/v2?channelId=ASP-TEST&sceneId=ASP-TEST&token=${wgToken}`,
  18. { sessionId: "N7FB_G0WlrOLjc", text: ttsMessage },
  19. {
  20. responseType: "arraybuffer",
  21. headers: {
  22. "X-Ai-TTS-Appid": "2b1317fb5b284b308dc90a6fdeae6c4e",
  23. },
  24. }
  25. );
  26. console.log(res.data);
  27. // 播放获取到的音频
  28. playAudio(res.data);
  29. } catch (error) {
  30. console.error("Error calling TTS API:", error);
  31. }
  32. };
  33. const playAudio = (audioData) => {
  34. const blob = new Blob([audioData], { type: "audio/wav" });
  35. const url = URL.createObjectURL(blob);
  36. const audio = new Audio(url);
  37. audio.onended = () => URL.revokeObjectURL(url);
  38. audio.onerror = (error) => console.error("Audio playback error:", error);
  39. audio
  40. .play()
  41. .then(() => console.log("Audio playing"))
  42. .catch((error) => console.error("Error playing audio:", error));
  43. };
  44. </script>
  45. <style scoped>
  46. .model-viewer {
  47. width: 100%;
  48. height: 400px;
  49. }
  50. </style>