百度語(yǔ)音合成vue

官方文檔:https://ai.baidu.com/ai-doc/SPEECH/mlciskuqn

1.根據(jù)文檔調(diào)用接口(vue2)
<audio :src="this.audioSrc"  v-if="this.audioSrc" controls  >您的瀏覽器不支持音頻播放。 </audio>


// 1.獲取AccessToken
    async handleGetAccessToken() {
      try {
        const option = {
          grant_type: "client_credentials",//client_id:必須參數(shù),應(yīng)用的 API Key
          client_id: '1QO8v5TmrWuHzjzfMKIqyQfn',//client_id:必須參數(shù)仲墨,應(yīng)用的 API Key
          client_secret: 'zPwFVrPqFMS8xqoTbA9KgSYUbVumvYyb',//client_secret:必須參數(shù),應(yīng)用的 Secret Key;
        };
        const res = await axios.post("https://openapi.baidu.com/oauth/2.0/token", qs.stringify(option));
        if (res.status !== 200) {
          return openMsg(res.statusText, "warning");
        }
        openMsg("獲取token成功", "success");
        localStorage.setItem("access_token", res.data.access_token);
        client_id.value = "";
        client_secret.value = "";
        this.handleTextToAudio()
      } catch (error) {
        console.log(error);
      }
    },

    // 2.語(yǔ)音合成接口調(diào)用
    async textToAudio() {
      this.audioStatus = true
      const option = {
        tex: this.form.name + '小朋友押搪,孔雀杯歡迎你',
        tok: '24.f4aa84ffd4ed412bd234fc4e1617464b.2592000.1724404285.282335-98216382',
        cuid: `${Math.floor(Math.random() * 1000000)}`,
        ctp: "1",
        lan: "zh",
        per: '0',
        vol: '15'
      };
      const res = await axios({
        method: 'post',
        url: 'https://tsn.baidu.com/text2audio',
        responseType: 'blob',
        headers: { "Content-Type": "application/x-www-form-urlencoded" },
        data: qs.stringify(option)
      })
      if (res.status != 200) {
        return this.$message.error(res.statusText, "warning");
      }
      this.audioSrc = URL.createObjectURL(res.data);
      console.log('this.audioSrc', this.audioSrc);
      clearInterval(this.intervalId);
    },

/oauth/2.0/token接口會(huì)跨域,先手動(dòng)獲取一個(gè)

image.png

語(yǔ)音合成接口參數(shù)解釋:
tex:合成的文本,使用UTF-8編碼臀晃。小于512個(gè)中文字或者英文數(shù)字窗轩。(文本在百度服務(wù)器內(nèi)轉(zhuǎn)換為GBK后夯秃,長(zhǎng)度必須小于1024字節(jié))
tok:開(kāi)放平臺(tái)獲取到的開(kāi)發(fā)者access_token
cuid:用戶唯一標(biāo)識(shí),用來(lái)區(qū)分用戶痢艺,計(jì)算UV值仓洼。建議填寫(xiě)能區(qū)分用戶的機(jī)器 MAC 地址或 IMEI 碼,長(zhǎng)度為60字符以內(nèi)
ctp:客戶端類型選擇堤舒,web端填寫(xiě)固定值1
lan:固定值z(mì)h色建。語(yǔ)言選擇,目前只有中英文混合模式,填寫(xiě)固定值z(mì)h
spd:語(yǔ)速舌缤,取值0-9箕戳,默認(rèn)為5中語(yǔ)速
pit:音調(diào)某残,取值0-9,默認(rèn)為5中語(yǔ)調(diào)
vol:音量陵吸,取值0-15玻墅,默認(rèn)為5中音量
per:發(fā)音人選擇, 0為普通女聲,1為普通男生壮虫,3為情感合成-度逍遙澳厢,4為情感合成-度丫丫,默認(rèn)為普通女聲

2.text2audio接口返回Open api characters limit reached

image.png

登錄百度只智能云 - 控制臺(tái) - 語(yǔ)音技術(shù) - 服務(wù)列表 - 語(yǔ)音合成囚似,根據(jù)提示剩拢,開(kāi)通領(lǐng)取資源。

image.png
Vue3

手動(dòng)輸入?yún)?shù)

<template>
  <div class="app">
    <div class="get_token">
      <h1>1.請(qǐng)輸入你的client_id和client_secret獲取access_token</h1>
      <el-row :gutter="50">
        <el-col :span="8">
          <el-input v-model.trim="client_id" placeholder="請(qǐng)輸入你的client_id(應(yīng)用的API Key)" />
        </el-col>
        <el-col :span="8">
          <el-input v-model.trim="client_secret" placeholder="請(qǐng)輸入你的client_secret(應(yīng)用的Secret Key)" />
        </el-col>
        <el-col :span="8"><el-button @click="handleGetAccessToken">獲取AccessToken</el-button></el-col>
      </el-row>
    </div>

    <hr>

    <div class="text2audio">
      <h1>2.語(yǔ)音合成</h1>
      <h4>免費(fèi)的只能使用前4種語(yǔ)音</h4>
      <el-radio-group v-model="per">
        <el-radio-button label="1">度小宇</el-radio-button>
        <el-radio-button label="0">度小美</el-radio-button>
        <el-radio-button label="3">度逍遙(基礎(chǔ))</el-radio-button>
        <el-radio-button label="4">度丫丫</el-radio-button>
        <el-radio-button label="5003">度逍遙(精品)</el-radio-button>
        <el-radio-button label="5118">度小鹿</el-radio-button>
        <el-radio-button label="106">度博文</el-radio-button>
        <el-radio-button label="110">度小童</el-radio-button>
        <el-radio-button label="111">度小萌</el-radio-button>
        <el-radio-button label="103">度米朵</el-radio-button>
        <el-radio-button label="5">度小嬌</el-radio-button>
      </el-radio-group>
      <el-row :gutter="50">
        <el-col :span="8">
          <el-input v-model.trim="inputText" placeholder="請(qǐng)輸入你要轉(zhuǎn)化的文本" />
        </el-col>
        <el-col :span="2"><el-button @click="handleTextToAudio">語(yǔ)音合成</el-button></el-col>
        <el-col :span="8">
          <audio :src="audioSrc" v-if="audioSrc" controls>
            您的瀏覽器不支持音頻播放饶唤。
          </audio>
        </el-col>
      </el-row>
    </div>

  </div>
</template>

<script setup>
import { ref } from "vue";
import axios from "axios";
import qs from "qs";
import { ElMessage } from "element-plus";

// client_id是你創(chuàng)建的應(yīng)用的API Key
const client_id = ref("");
// client_secret是你創(chuàng)建應(yīng)用的Secret Key
const client_secret = ref("");
// 配音角色
const per = ref("1");
const inputText = ref("");
const audioSrc = ref("");

// 提示
const openMsg = (message, type) => {
  ElMessage({
    message,
    type,
  });
};

// 1.獲取AccessToken
async function  handleGetAccessToken() {
  try {
    const option = {
      grant_type: "client_credentials",
      client_id: client_id.value,
      client_secret: client_secret.value,
    };
    const res = await axios.post("http://tsn.baidu.com/text2audio", qs.stringify(option));
    if (res.status !== 200) {
      return openMsg(res.statusText, "warning");
    }
    openMsg("獲取token成功", "success");
    localStorage.setItem("access_token", res.data.access_token);
    client_id.value = "";
    client_secret.value = "";
  } catch (error) {
    console.log(error);
  }
};

// 2.語(yǔ)音合成接口調(diào)用
async function  handleTextToAudio ()  {
  const token = localStorage.getItem("access_token");
  if (!token) {
    return openMsg("請(qǐng)先獲取token徐伐!", "warning");
  }
  textToAudio(token);
};
async function  textToAudio (token) {
  const option = {
    tex: inputText.value,
    tok: token,
    cuid: `${Math.floor(Math.random() * 1000000)}`,
    ctp: "1",
    lan: "zh",
    per: per.value,
  };
  const res = await axios.post("http://tsn.baidu.com/text2audio", qs.stringify(option), {
    headers: { "Content-Type": "application/x-www-form-urlencoded" },
    responseType: "blob",
  });
  if (res.status !== 200) {
    return openMsg(res.statusText, "warning");
  }
  openMsg("語(yǔ)音合成成功", "success");
  audioSrc.value = URL.createObjectURL(res.data);
};
</script>

<style scoped>
.app {
  width: 80%;
  height: 100%;
  margin: auto;
}

:deep(.el-radio-group) {
  margin-bottom: 30px;
}
</style>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市募狂,隨后出現(xiàn)的幾起案子办素,更是在濱河造成了極大的恐慌,老刑警劉巖熬尺,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件摸屠,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡粱哼,警方通過(guò)查閱死者的電腦和手機(jī)季二,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)揭措,“玉大人胯舷,你說(shuō)我怎么就攤上這事“砗” “怎么了桑嘶?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)躬充。 經(jīng)常有香客問(wèn)我逃顶,道長(zhǎng),這世上最難降的妖魔是什么充甚? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任以政,我火速辦了婚禮,結(jié)果婚禮上伴找,老公的妹妹穿的比我還像新娘盈蛮。我一直安慰自己,他們只是感情好技矮,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布抖誉。 她就那樣靜靜地躺著殊轴,像睡著了一般。 火紅的嫁衣襯著肌膚如雪袒炉。 梳的紋絲不亂的頭發(fā)上旁理,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天,我揣著相機(jī)與錄音我磁,去河邊找鬼韧拒。 笑死,一個(gè)胖子當(dāng)著我的面吹牛十性,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播塑悼,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼劲适,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了厢蒜?” 一聲冷哼從身側(cè)響起霞势,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎斑鸦,沒(méi)想到半個(gè)月后愕贡,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡巷屿,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年固以,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片嘱巾。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡憨琳,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出旬昭,到底是詐尸還是另有隱情篙螟,我是刑警寧澤,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布问拘,位于F島的核電站遍略,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏骤坐。R本人自食惡果不足惜绪杏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望或油。 院中可真熱鬧寞忿,春花似錦、人聲如沸顶岸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至霹抛,卻和暖如春搓逾,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背杯拐。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工霞篡, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人端逼。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓朗兵,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親顶滩。 傳聞我的和親對(duì)象是個(gè)殘疾皇子余掖,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容