国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Recorder 實(shí)現(xiàn)語音錄制并上傳到后端(兼容PC和移動端)

這篇具有很好參考價(jià)值的文章主要介紹了Recorder 實(shí)現(xiàn)語音錄制并上傳到后端(兼容PC和移動端)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

Recorder 首頁:https://github.com/xiangyuecn/Recorder

一、安裝

npm install recorder-core

二、代碼部分

1. HTML頁面

<template>
  <div>
    <el-input
      v-model="ttsText"
      type="textarea"
      placeholder="請輸入內(nèi)容"
    ></el-input>
    <el-button type="success" @click="recStart()">開始錄音</el-button>
    <el-button type="success" @click="recStop()">結(jié)束錄音</el-button>
    <el-button type="success" @click="recPlay()">本地試聽</el-button>
    <div style="padding-top: 5px">
      <!-- 波形繪制區(qū)域 -->
      <div
        style="
          border: 1px solid #ccc;
          display: inline-block;
          vertical-align: bottom;
        "
      >
        <div style="height: 100px; width: 300px" ref="recwave"></div>
      </div>
    </div>
  </div>
</template>

2. 引入插件

// 上傳語音文件用
import axios from "axios";
// Recorder核心文件
import Recorder from "recorder-core";
// 引入mp3格式支持文件,如果需要多個(gè)格式支持,把這些格式的編碼引擎js文件放到后面統(tǒng)統(tǒng)引入進(jìn)來即可
import "recorder-core/src/engine/mp3";
import "recorder-core/src/engine/mp3-engine";
// 錄制wav格式的用這一句就行
import "recorder-core/src/engine/wav";

// 可選的插件支持項(xiàng),這個(gè)是波形可視化插件
import "recorder-core/src/extensions/waveview";
//ts import 提示:npm包內(nèi)已自帶了.d.ts聲明文件(不過是any類型)

3. 方法

// 轉(zhuǎn)文字的內(nèi)容
var ttsText = ref("");
// 錄音Recorder對象
let rec: any;
// 錄音文件對象
let recBlob: any;
let wave: any;
const recwave = ref(null);

// 打開錄音(請求權(quán)限)
function recOpen() {
  //創(chuàng)建錄音對象
  rec = Recorder({
    type: "wav", //錄音格式,可以換成mp3等其他格式
    sampleRate: 16000, //錄音的采樣率,越大細(xì)節(jié)越豐富越細(xì)膩
    bitRate: 16, //錄音的比特率,越大音質(zhì)越好
    onProcess: (
      buffers: any,
      powerLevel: any,
      bufferDuration: any,
      bufferSampleRate: any,
      newBufferIdx: any,
      asyncEnd: any
    ) => {
      //錄音實(shí)時(shí)回調(diào),大約1秒調(diào)用12次本回調(diào)
      //可實(shí)時(shí)繪制波形,實(shí)時(shí)上傳(發(fā)送)數(shù)據(jù)
      if (wave) {
        wave.input(buffers[buffers.length - 1], powerLevel, bufferSampleRate);
      }
    },
  });
  if (!rec) {
    alert("當(dāng)前瀏覽器不支持錄音功能!");
    return;
  }
  // 打開錄音,獲得權(quán)限
  rec.open(
    () => {
      console.log("錄音已打開");
      //創(chuàng)建音頻可視化圖形繪制對象
      if (recwave.value) {
        wave = Recorder.WaveView({ elem: recwave.value });
      }
    },
    (msg: any, isUserNotAllow: any) => {
      //用戶拒絕了錄音權(quán)限,或者瀏覽器不支持錄音
      console.log((isUserNotAllow ? "UserNotAllow," : "") + "無法錄音:" + msg);
    }
  );
}
// 開始錄音
function recStart() {
  if (!rec) {
    console.error("未打開錄音");
    return;
  }
  rec.start();
  console.log("已開始錄音");
}
// 結(jié)束錄音
function recStop() {
  if (!rec) {
    console.error("未打開錄音");
    return;
  }
  rec.stop(
    (blob: any, duration: any) => {
      //blob就是我們要的錄音文件對象,可以上傳,或者本地播放
      recBlob = blob;
      //簡單利用URL生成本地文件地址,此地址只能本地使用,比如賦值給audio.src進(jìn)行播放,賦值給a.href然后a.click()進(jìn)行下載(a需提供download="xxx.mp3"屬性)
      const localUrl = (window.URL || window.webkitURL).createObjectURL(blob);
      console.log("錄音成功", blob, localUrl, "時(shí)長:" + duration + "ms");
      upload(blob); //把blob文件上傳到服務(wù)器
      //   rec.close(); //關(guān)閉錄音,釋放錄音資源,當(dāng)然可以不釋放,后面可以連續(xù)調(diào)用start,關(guān)閉的話則需要重新打開錄音
      //   rec = null;
    },
    (err: any) => {
      console.error("結(jié)束錄音出錯(cuò):" + err);
      rec.close(); //關(guān)閉錄音,釋放錄音資源,當(dāng)然可以不釋放,后面可以連續(xù)調(diào)用start
      rec = null;
    }
  );
}
// 上傳錄音
function upload(blob: any) {
  console.log("視頻上傳服務(wù)器:");
  //blob格式轉(zhuǎn)換為base64格式
  blobToDataURI(blob, function (result) {
    axios({
      method: "POST",
      url: `https://xxxxx/api/xxxxx/xxxxx`,		// 這里是后端的接口地址,我這邊后端用的是百度語音識別(百度文檔里面寫的,必須后端進(jìn)行交互,前端無法直接交互,因?yàn)榍岸藷o法訪問百度語音識別的域名)
      headers: {
        "Content-Type": "application/json",
      },
      // 在請求之前對data傳參進(jìn)行格式轉(zhuǎn)換
      transformRequest: [
        function (data) {
          data = JSON.stringify(data);
          return data;
        },
      ],
      params: {},
      // 這里是傳遞的參數(shù)
      data: {
        file: result.split(",")[1],
        format: "wav",
        len: atob(result.split(",")[1]).length,
      },
    })
      .then((res) => {
        let resp = res.data;
        if (resp.err_msg == "success.") {
          ttsText.value = resp.result[0];
          console.log("返回文字內(nèi)容:", ttsText.value);
        }
      })
      .catch((req) => {
        console.log(req);
      });
  });
}
// 本地播放錄音
function recPlay() {
  //本地播放錄音試聽,可以直接用URL把blob轉(zhuǎn)換成本地播放地址,用audio進(jìn)行播放
  const localUrl = URL.createObjectURL(recBlob);
  const audio = document.createElement("audio");
  audio.controls = true;
  document.body.appendChild(audio);
  audio.src = localUrl;
  audio.play(); //這樣就能播放了
  //注意不用了時(shí)需要revokeObjectURL,否則霸占內(nèi)存
  setTimeout(function () {
    URL.revokeObjectURL(audio.src);
  }, 5000);
}

// blob 轉(zhuǎn) base64
function blobToDataURI(blob, callback) {
  var reader = new FileReader();
  reader.readAsDataURL(blob);
  reader.onload = function (e) {
    callback(e.target.result);
  };
}
  1. 使用
onMounted(async () => {
  // 開啟麥克風(fēng)權(quán)限
  recOpen();
});
  1. 示例
    Recorder 實(shí)現(xiàn)語音錄制并上傳到后端(兼容PC和移動端),web前端,前端

備注: 如果本地開發(fā)的時(shí)候,瀏覽器提示錄音open失敗:瀏覽器禁止不安全頁面錄音。可通過開啟https解決問題

本文參考文章(做了部分修改):https://blog.csdn.net/IAIPython/article/details/134611674文章來源地址http://www.zghlxwxcb.cn/news/detail-833464.html

到了這里,關(guān)于Recorder 實(shí)現(xiàn)語音錄制并上傳到后端(兼容PC和移動端)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • java MultipartFile+vue+element 批量上傳文件、圖片,與普通數(shù)據(jù)同時(shí)提交保存才上傳到后端

    java MultipartFile+vue+element 批量上傳文件、圖片,與普通數(shù)據(jù)同時(shí)提交保存才上傳到后端

    文件上傳項(xiàng)目可參考:點(diǎn)擊預(yù)覽 1.最簡單也是最普遍的做法是form表單提交,其實(shí)前端提交到后端也是難以離開form表單提交, 一般有兩種方式來處理文件、圖片上傳: 先上傳,獲取返回路徑,再整個(gè)表單提交后端保存; 普通數(shù)據(jù)與文件圖片同時(shí)提交后端,由后端處理 優(yōu)點(diǎn)比

    2024年02月03日
    瀏覽(20)
  • vue3實(shí)現(xiàn)H5網(wǎng)頁錄音并上傳(mp3、wav)兼容Android、iOS和PC端

    使用 Recorder插件 可以在HTML5網(wǎng)頁中進(jìn)行錄音,錄音完成后得到blob文件對象,然后將blob上傳到服務(wù)器;項(xiàng)目使用的vue3.0版本(這個(gè)插件同時(shí)支持vue2.0、也支持uniapp,很強(qiáng)?。。?,錄音過程中會顯示可視化波形,同時(shí)能夠做到兼容PC端、Android、和iOS,一次編碼 到處運(yùn)行,哈哈

    2024年02月08日
    瀏覽(33)
  • uni-file-picker上傳圖片到后端服務(wù)器并存入數(shù)據(jù)庫

    最近在做一個(gè)需求,使用uniapp上傳用戶頭像。后端會有一個(gè)處理上傳圖片返回圖像鏈接的接口。在uniapp官網(wǎng)關(guān)于上傳的組件有兩個(gè): (1)uni.uploadFile(object) (2)uni-file-picker 如果使用uni.uploadFile,前端的代碼大致可以這樣寫: 這是官網(wǎng)給出的范例。對應(yīng)的HTML: 然后就是 自

    2024年02月12日
    瀏覽(33)
  • uniapp在微信小程序端調(diào)用攝像頭拍照并且把拍下的圖片上傳到后端

    需要注意的是我在代碼片段中用到 _this,因?yàn)槲遗潞瘮?shù)改變了this的指向所有我在方法的開頭就寫了 let _this = this

    2024年02月08日
    瀏覽(23)
  • 使用Jmeter自帶recorder代理服務(wù)器錄制接口腳本

    使用Jmeter自帶recorder代理服務(wù)器錄制接口腳本

    腳本錄制 配置線程組 添加代理服務(wù)器 端口 和 錄制腳本放置位置可根據(jù)需要設(shè)置 啟動錄制 點(diǎn)擊啟動后 彈出創(chuàng)建證書提示,點(diǎn)擊OK 這個(gè)證書后續(xù)需要使用到 然后可見 一個(gè)彈窗。 Recorder . 本質(zhì)是代理服務(wù)+錄制交易控制 可設(shè)置對應(yīng)數(shù)據(jù) 方便錄制腳本的查看 證書配置 Jmeter 證書

    2024年02月12日
    瀏覽(20)
  • Recorder.js:一款簡單的Web音頻錄制庫

    Recorder.js 是一個(gè)輕量級的JavaScript庫,它允許你在瀏覽器中輕松地錄制、處理和保存音頻數(shù)據(jù)。借助Recorder.js,你可以構(gòu)建各種有趣的Web應(yīng)用程序,如語音備忘錄、在線錄音室或教育工具。 使用Recorder.js,您可以實(shí)現(xiàn)以下功能: 錄音:在Web頁面上為用戶提供簡單的錄音體驗(yàn)。

    2024年04月29日
    瀏覽(15)
  • vue3 - 使用element-plus組件庫el-upload上傳超大mp4視頻分片上傳,Upload上傳大文件mp4視頻進(jìn)行切片分段上傳到后端服務(wù)器教程,vue3如何上傳很大的視頻(詳細(xì)示例代碼

    vue3 - 使用element-plus組件庫el-upload上傳超大mp4視頻分片上傳,Upload上傳大文件mp4視頻進(jìn)行切片分段上傳到后端服務(wù)器教程,vue3如何上傳很大的視頻(詳細(xì)示例代碼

    在vue3+elementPlus中,使用el-upload組件\\\"切片分段\\\"上傳mp4大視頻到服務(wù)器,支持任意大視頻、大文檔、大壓縮包等超大文件,通用方法將其拆分成多個(gè)小段進(jìn)行逐個(gè)逐條上傳到后端(支持?jǐn)帱c(diǎn)續(xù)傳、下載預(yù)覽)。 詳細(xì)大文件分片功能源碼,可只拿前端源碼或只拿springboot(Java)后

    2024年03月16日
    瀏覽(41)
  • 【P4】JMeter 原生錄制方式——HTTP代理服務(wù)器(HTTP(S) Test Script Recorder)

    【P4】JMeter 原生錄制方式——HTTP代理服務(wù)器(HTTP(S) Test Script Recorder)

    HTTP代理服務(wù)器允許JMeter在使用常規(guī)瀏覽器,瀏覽Web應(yīng)用程序時(shí)攔截并記錄操作。JMeter將創(chuàng)建測試樣本對象,并將其直接存儲到的測試計(jì)劃中。錄制腳本時(shí),最好使用無痕瀏覽模式,這可以確保瀏覽器沒有存儲的Cookie信息,并防止保存某些更改。例如:Firefox不允許永久保存證

    2024年02月11日
    瀏覽(26)
  • Unity+chatgpt+webgl實(shí)現(xiàn)聲音錄制+語音識別

    Unity+chatgpt+webgl實(shí)現(xiàn)聲音錄制+語音識別

    ? ? ? ? AI二次元女友這個(gè)項(xiàng)目持續(xù)更新,在window端的語音識別和語音合成的功能,在上一篇博文里已經(jīng)詳細(xì)說明了微軟Azure語音服務(wù)的代碼實(shí)現(xiàn)。也是為了實(shí)現(xiàn)一次代碼,多端復(fù)用這樣的訴求,所以全部的代碼實(shí)現(xiàn)都改成了web api的方式。然而在實(shí)測發(fā)布到webgl的時(shí)候,就發(fā)現(xiàn)

    2024年02月16日
    瀏覽(22)
  • post請求:前端傳遞數(shù)組到后端,后端順利接受數(shù)組

    post請求:前端傳遞數(shù)組到后端,后端順利接受數(shù)組

    ? 可能需要解釋的地方:deletePicture是一個(gè)數(shù)組。 后端采用@requestBody注解+JSONArray來接受前端數(shù)組(測試過了,確實(shí)可以接收)? ①前端采用JSON.string將對象轉(zhuǎn)化為字符串 ②后端采用@requestbody注解+JSONArray類(hutool工具類里面的一個(gè)類)來接受前端傳遞過來的數(shù)組 一些廢話:本

    2024年02月14日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包