91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

uniapp如何調用百度語音實現錄音轉文字功能

發布時間:2021-12-26 15:11:13 來源:億速云 閱讀:493 作者:小新 欄目:開發技術

這篇文章給大家分享的是有關uniapp如何調用百度語音實現錄音轉文字功能的內容。小編覺得挺實用的,因此分享給大家做個參考,一起跟隨小編過來看看吧。

經歷三天時間各種遇到困難 之后終于實現了這個功能,參照網上了許多文章 才找到一個能正常實現的方法,網上能找到的例子都不起作用,相信很多人困惑在這,為了避免別人出現這種情況,我分享我的代碼,絕對可用,包括 uniapp前端使用了recorderManager和java端調用百度語音轉文字,我相信很多人都很需要我寫的東西,我只試驗了安卓手機,html5 + 里面

plus.speech這個方式就不要用了,不好用,調用百度的語音識別時在百度的管理控制臺會看到dev_id這個參數沒傳的錯誤也沒找到添加這個參數的地方,所以在hbuildx里面當前項目的app模塊配置這個地方不需要選

1.非常重要的一個步驟 manifest.json里面添加android.permission.RECORD_AUDIO這個權限,無論是想真機調試,由其是使用了自定義基座一定要在線打個包,讓基座包含這個權限然后在手機系統 里面應用管理當前這個app的權限管理里面必須要看到有錄音權限這一項

2.為了能夠在使用recorderManager在進入要使用錄音功能的頁面會詢問是否允許錄音這樣的權限,必須要使用recorderManager之前要調用一次硬件權限申請。這個在插件市場里面有一個https://ext.dcloud.net.cn/plugin?id=594 這個地址 App權限判斷和提示這樣的js,用于判斷或申請某個硬件權限使用的是native.js的功能。這個插件引入項目之后會在當前項目目錄的js_sdk這樣一個文件夾。在里面會出現wa-permission文件 夾下面會有一個permission.js,

3.相關代碼

uniapp端代碼 

  <view class="popup-content" >  
                    <view>{{msg}}</view>  
                    <view>你在說{{voicetext}}</view>  
                    <button class="uni-btn"  type="warn" @touchstart="startvoice" @touchend="endvoice">按說語話松開停止</button>  
                    <button class="uni-btn"  type="warn" @tap="playvoice" >播放錄音</button>  
    </view>  
<script>  
import permision from "@/js_sdk/wa-permission/permission.js"  
    const recorderManager = uni.getRecorderManager();  
    const innerAudioContext = uni.createInnerAudioContext();  
export default {  
     data() {  
    return {  
            voicetext:"",  
        msg:"",  
        voicepath:""  
       }  
   },  
  onLoad() {  
      this.initaudio()  
 
   },  
methods: {  
   async initaudio(){  
                           //注意此處必須為 await 因為會觸發異步事件,手機上會彈出權限申請對話框處理完才能走下一步錄音  
                 let recordauth =  await permision.requestAndroidPermission("android.permission.RECORD_AUDIO")  
                 console.log("判斷有沒有錄音權限>>>>>>"+recordauth)  
                  if(recordauth==1){  
                               recorderManager.onStart((res)=>{  
                                        console.log("開始 錄音>>>>>>>>>...")  
                                    });  
                               recorderManager.onStop((res)=>{  
                                    console.log("recorderstop....res.tempFilePath>>>"+res.tempFilePath)  
                                    this.voicepath = res.tempFilePath  
                                    this.uploadvoicefile()  
                                    // 使用uni.uploadFile上傳到服務器上,此時是mp3格式  
                                });  
 
                                recorderManager.onError( (res)=> {  
 
                                 console.log('onError'+JSON.stringify(res));  
                                });  
                  }   
            }, //initaudio 方法結束  
          startvoice(){  
                console.log("開始錄音")  
                recorderManager.start({  
                    format:"mp3",  
                    sampleRate: 16000 // 必須設置是后臺設置的參數,不然百度語音識別不了  
                });  
         },  
        endvoice(){  
 
              console.log("結束錄音")  
              //注意為了避免說話時間太短導致這個api出現bug要加一些延時  
             setTimeout(()=>{  
                recorderManager.stop()  
             },1000)  
 
            },  
            playvoice(){  
                console.log("點擊playvoice")  
                if (this.voicepath) {  
                    console.log("播放聲音")  
                    innerAudioContext.src = this.voicepath;  
                    innerAudioContext.play();  
                }  
            },  
            uploadvoicefile(){  
                // this.msg = "調用java端服務文件路徑"+this.voicepath  
                 uni.uploadFile({  
                url: 'http://ip:端口/uploadFile(java端接收文件接口名)',   
                filePath: this.voicepath,//錄音結束后返回的臨時路徑,  
                name: 'file',  
                formData: {  
                   dev_id:1537 //中文帶標點  
                 },  
                success: (uploadFileRes) => {  
                    let word = uploadFileRes.data  
                    console.log("上傳音頻成功"+word);  
                },  
                fail: (res) => {  
 
                    console.log("上傳音頻失敗"+JSON.stringify(res));  
                }  
                });  
            }  
    }  
}  
</script> ```   
 //注意uploadFile 的url屬性 這個地方ip不能是localhost或127,如果自已電腦啟動java服務必須 是本機的真實ip如192.xxx這種,或者域名什么的,并且java端接口一定要支持跨域,很多人卡到這個ip上,我也是網上很難找到解決問題的貼子  
注意filePath這個路徑就是recorderManager的onStop事件就得到的_doc這種開頭的路徑,不需要加什么file:不是像網上某些人說的加這種東西

Java端

pom里面需要引用兩個包  

<dependency>  
            <groupId>com.baidu.aip</groupId>  
            <artifactId>java-sdk</artifactId>  
            <version>4.16.3</version>  
        </dependency>  
 
        <dependency>  
            <groupId>com.googlecode.soundlibs</groupId>  
            <artifactId>mp3spi</artifactId>  
            <version>1.9.5.4</version>  
        </dependency>  
 
 ``` import com.baidu.aip.speech.AipSpeech;  
import javazoom.spi.mpeg.sampled.file.MpegAudioFileReader;  
import org.apache.commons.io.IOUtils;  
import org.json.JSONArray;  
import org.json.JSONObject;  
 
import org.springframework.web.bind.annotation.*;  
import org.springframework.web.multipart.MultipartFile;  
 
import javax.sound.sampled.AudioFormat;  
import javax.sound.sampled.AudioInputStream;  
import javax.sound.sampled.AudioSystem;  
import java.io.IOException;  
import java.io.InputStream;  
import java.util.HashMap;  
 
@RestController  
@CrossOrigin(origins = "*")  
public class BaiduSpeech {  
    //設置APPID/AK/SK  
    public static final String APP_ID = ""; //去百度語音服務申請  
    public static final String API_KEY = "";//去百度語音服務申請  
    public static final String SECRET_KEY = "";//去百度語音服務申請  
 
    @RequestMapping(value = "/uploadFile")  
    public String uploadFile( @RequestParam("dev_id") int dev_id, @RequestParam("file") MultipartFile file) throws Exception {  
        byte[] pcmbytedata = mp3Convert2pcm(file.getInputStream());  
        HashMap<String,Object> options = new HashMap<String,Object>();  
        options.put("dev_pid",dev_id);//  
        JSONObject jsonfrombaidu =  basicBydata(pcmbytedata,"pcm",options);  
        JSONArray jsonArray =  jsonfrombaidu.getJSONArray("result");  
        String result =  jsonArray.getString(0);  
        System.out.println(result); //解析完的結果   
        return result;  
    }  
    // 獲取AipSpeech對象,建議單例使用  
    public static AipSpeech getClient() {  
        AipSpeech client = new AipSpeech(APP_ID, API_KEY, SECRET_KEY);  
        // 可選:設置網絡連接參數  
        client.setConnectionTimeoutInMillis(2000);  
        client.setSocketTimeoutInMillis(60000);  
        return client;  
    }  
 
    // 語音識別(來自文件)  
    public static JSONObject basicBydata(byte[] voicedata, String fileType,HashMap<String,Object> options) {  
        AipSpeech client = getClient();  
 
        return client.asr(voicedata, fileType, 16000, options);  
    }  
    /**  
     * MP3轉換PCM  
     * @param inputStream MP3輸入流  
     * @throws Exception  
     */  
    public static byte[] mp3Convert2pcm(InputStream inputStream) throws Exception {  
        //轉換PCM audioInputStream 數據  
        AudioInputStream audioInputStream = getPcmAudioInputStream(inputStream);  
        byte[] pcmBytes = IOUtils.toByteArray(audioInputStream);  
        return pcmBytes;  
    }  
 
    /**  
     * 獲取PCM AudioInputStream 數據  
     * @param inputStream MP3輸入流  
     * @return AudioInputStream PCM輸入流  
     */  
    private static AudioInputStream getPcmAudioInputStream(InputStream inputStream) {  
        AudioInputStream audioInputStream = null;  
        AudioFormat targetFormat = null;  
        try {  
            AudioInputStream in = null;  
            MpegAudioFileReader mp = new MpegAudioFileReader();  
            in = mp.getAudioInputStream(inputStream);  
            AudioFormat baseFormat = in.getFormat();  
            targetFormat = new AudioFormat(AudioFormat.Encoding.PCM_SIGNED, baseFormat.getSampleRate(), 16,  
                    baseFormat.getChannels(), baseFormat.getChannels() * 2, baseFormat.getSampleRate(), false);  
            audioInputStream = AudioSystem.getAudioInputStream(targetFormat, in);  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
        return audioInputStream;  
    }  
 
} ```

感謝各位的閱讀!關于“uniapp如何調用百度語音實現錄音轉文字功能”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,讓大家可以學到更多知識,如果覺得文章不錯,可以把它分享出去讓更多的人看到吧!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

崇信县| 微博| 应城市| 汉阴县| 泗洪县| 杂多县| 东乡族自治县| 彭州市| 黄大仙区| 四会市| 玉门市| 冕宁县| 施甸县| 宁南县| 建水县| 武义县| 四子王旗| 巨鹿县| 泊头市| 安康市| 江城| 新晃| 垦利县| SHOW| 南汇区| 白城市| 根河市| 南康市| 若尔盖县| 元朗区| 禄丰县| 辉县市| 泰州市| 巴中市| 沙河市| 济宁市| 普兰店市| 郓城县| 隆子县| 太保市| 赣州市|