日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

微信小程序

更新時(shí)間:

本文介紹如何使用智能語(yǔ)音交互一句話識(shí)別的微信小程序SDK,包括SDK的安裝方法及SDK代碼示例等。

前提條件

  • 在使用SDK前,請(qǐng)先閱讀接口說(shuō)明,詳情請(qǐng)參見(jiàn)接口說(shuō)明

  • 微信基礎(chǔ)庫(kù)要求2.4.4及以上版本。

  • 請(qǐng)確認(rèn)已經(jīng)安裝微信小程序開發(fā)環(huán)境,并完成基本配置。具體可參見(jiàn)微信開發(fā)者工具

  • 需要提前將如下URL添加到微信小程序后臺(tái)服務(wù)器域名中:

    • request合法域名:https://nls-meta.cn-shanghai.aliyuncs.com

    • socket合法域名:wss://nls-gateway-cn-shanghai.aliyuncs.com

下載安裝

  1. 下載并安裝SDK。

    通過(guò)Github下載對(duì)應(yīng)SDK代碼,或直接下載alibabacloud-nls-wx-sdk-master.zip

  2. 導(dǎo)入SDK。

    您可將下載好的代碼放入工程合適目錄下,然后根據(jù)目錄位置通過(guò)require進(jìn)行導(dǎo)入。

獲取Token

getToken

獲取Token并以AKID(AccessKey ID)和AKKEY(AccessKey Secret)為key緩存對(duì)應(yīng)Token,如果緩存的Token過(guò)期則自動(dòng)刷新并獲取。緩存機(jī)制請(qǐng)參見(jiàn)微信小程序文檔的數(shù)據(jù)緩存部分。

  • 參數(shù)說(shuō)明:無(wú)。

  • 返回值:String類型的Token。

getTokenInner

直接獲取Token,不帶任何緩存機(jī)制,適用于用戶自定義緩存方式。

  • 參數(shù)說(shuō)明:無(wú)。

  • 返回值:String類型的Token。

重要

頻繁調(diào)用該接口會(huì)被服務(wù)端拒絕訪問(wèn)。

一句話識(shí)別

Class: SpeechRecognition

SpeechRecognition類用于進(jìn)行一句話識(shí)別。

  • 構(gòu)造函數(shù)參數(shù)說(shuō)明:

    參數(shù)

    類型

    參數(shù)說(shuō)明

    config

    Object

    連接配置對(duì)象。

  • config object說(shuō)明:

    參數(shù)

    類型

    參數(shù)說(shuō)明

    url

    String

    服務(wù)URL地址。

    token

    String

    訪問(wèn)Token,詳情可參見(jiàn)獲取Token概述

    appkey

    String

    對(duì)應(yīng)項(xiàng)目Appkey。獲取Appkey請(qǐng)前往控制臺(tái)

defaultStartParams()

返回一個(gè)默認(rèn)的推薦參數(shù),其中Format為PCM,采樣率為16000 Hz,中間結(jié)果、標(biāo)點(diǎn)預(yù)測(cè)和ITN均為打開狀態(tài)。您在拿到默認(rèn)對(duì)象后可以根據(jù)自身需求,結(jié)合接口說(shuō)明中的參數(shù)列表來(lái)添加和修改參數(shù)。

  • 參數(shù)說(shuō)明:無(wú)。

  • 返回值:

    object類型對(duì)象,字段如下:

    {
        "format": "pcm",
        "sample_rate": 16000,
        "enable_intermediate_result": true,
        "enable_punctuation_prediction": true,
        "enable_inverse_text_normalization": true
    }

on(which, handler)

設(shè)置事件回調(diào)。

  • 參數(shù)說(shuō)明:

    參數(shù)

    類型

    參數(shù)說(shuō)明

    which

    String

    事件名稱。

    handler

    Function

    回調(diào)函數(shù)。

    支持的回調(diào)事件如下:

    事件名稱

    事件說(shuō)明

    回調(diào)函數(shù)參數(shù)個(gè)數(shù)

    回調(diào)函數(shù)參數(shù)說(shuō)明

    started

    一句話識(shí)別開始。

    1

    String類型,開始信息。

    changed

    一句話識(shí)別中間結(jié)果。

    1

    String類型,中間結(jié)果信息。

    completed

    一句話識(shí)別完成。

    1

    String類型,完成信息。

    closed

    連接關(guān)閉。

    0

    無(wú)。

    failed

    錯(cuò)誤。

    1

    String類型,錯(cuò)誤信息。

  • 返回值:無(wú)。

async start(param)

根據(jù)param發(fā)起一次一句話識(shí)別,param可以參考defaultStartParams方法的返回,具體參數(shù)見(jiàn)接口說(shuō)明

  • 參數(shù)說(shuō)明:

    參數(shù)

    類型

    參數(shù)說(shuō)明

    param

    Object

    一句話識(shí)別參數(shù)。

  • 返回值: Promise對(duì)象,當(dāng)started事件發(fā)生后觸發(fā)resolve,并攜帶started信息;當(dāng)任何錯(cuò)誤發(fā)生后觸發(fā)reject,并攜帶異常信息。

async close(param)

停止一句話識(shí)別。

  • 參數(shù)說(shuō)明:

    參數(shù)

    類型

    參數(shù)說(shuō)明

    param

    Object

    一句話識(shí)別結(jié)束參數(shù)。

  • 返回值:

    Promise對(duì)象,當(dāng)completed事件發(fā)生后觸發(fā)resolve,并攜帶completed信息;當(dāng)任何錯(cuò)誤發(fā)生后觸發(fā)reject,并攜帶異常信息。

shutdown()

強(qiáng)制斷開連接。

  • 參數(shù)說(shuō)明:無(wú)。

  • 返回值:無(wú)。

sendAudio(data)

發(fā)送音頻,音頻格式必須和參數(shù)中一致。

  • 參數(shù)說(shuō)明:

    參數(shù)

    類型

    參數(shù)說(shuō)明

    data

    ArrayBuffer

    二進(jìn)制音頻數(shù)據(jù)。

  • 返回值:無(wú)。

代碼示例

以下代碼示例僅供參考,代碼中使用微信小程序自帶錄音功能,實(shí)際使用時(shí),需要考慮微信小程序的限制,以及前端頁(yè)面設(shè)計(jì)和具體業(yè)務(wù)功能。

// pages/sr/sr.js

const app = getApp()

const AKID = "Your AKID"
const AKKEY = "Your AKKEY"
const getToken = require("../../utils/token").getToken
const SpeechRecognition = require("../../utils/sr")
const sleep = require("../../utils/util").sleep

Page({
    /**
     * 頁(yè)面的初始數(shù)據(jù)
     */
    data: {
        srStart : false,
        srResult : "未開始識(shí)別"
    },

    /**
     * 生命周期函數(shù)--監(jiān)聽頁(yè)面加載
     */
    onLoad: async function (options) {
        wx.getRecorderManager().onFrameRecorded((res)=>{
            if (res.isLastFrame) {
                console.log("record done")
            }
            if (this.data.sr && this.data.srStart) {
                console.log("send " + res.frameBuffer.byteLength)
                this.data.sr.sendAudio(res.frameBuffer)
            }
        })
        wx.getRecorderManager().onStart(()=>{
            console.log("start recording...")
        })
        wx.getRecorderManager().onStop((res) => {
            console.log("stop recording...")
            if (res.tempFilePath) {
                wx.removeSavedFile({
                    filePath:res.tempFilePath
                })
            }
        })
        wx.getRecorderManager().onError((res) => {
            console.log("recording failed:" + res)
        })

        try {
            this.data.token = await getToken(AKID, AKKEY)
        } catch (e) {
            console.log("error on get token:", JSON.stringify(e))
            return
        }
        let sr = new SpeechRecognition({
            url : app.globalData.URL,
            appkey: app.globalData.APPKEY,
            token: this.data.token
        })

        sr.on("started", (msg)=> {
            console.log("Client recv started")
            this.setData({
                srResult : msg
            })
        })

        sr.on("changed", (msg)=>{
            console.log("Client recv changed:", msg)
            this.setData({
                srResult : msg
            })
        })
      
        sr.on("completed", (msg)=>{
            console.log("Client recv completed:", msg)
            this.setData({
                srResult : msg
            })
        })
    
        sr.on("closed", () => {
            console.log("Client recv closed")
        })
    
        sr.on("failed", (msg)=>{
            console.log("Client recv failed:", msg)
            this.setData({
                srResult : msg
            })
        })

        this.data.sr = sr
    },

    /**
     * 生命周期函數(shù)--監(jiān)聽頁(yè)面初次渲染完成
     */
    onReady: function () {

    },

    /**
     * 生命周期函數(shù)--監(jiān)聽頁(yè)面顯示
     */
    onShow: function () {

    },

    /**
     * 生命周期函數(shù)--監(jiān)聽頁(yè)面隱藏
     */
    onHide: function () {

    },

    /**
     * 生命周期函數(shù)--監(jiān)聽頁(yè)面卸載
     */
    onUnload: function () {
        console.log("sr onUnload")
        this.data.srStart = false
        wx.getRecorderManager().stop()
        if (this.data.sr) {
            this.data.sr.shutdown()
        } else {
            console.log("sr is null")
        }
    },

    /**
     * 頁(yè)面相關(guān)事件處理函數(shù)--監(jiān)聽用戶下拉動(dòng)作
     */
    onPullDownRefresh: function () {

    },

    /**
     * 頁(yè)面上拉觸底事件的處理函數(shù)
     */
    onReachBottom: function () {

    },

    /**
     * 用戶點(diǎn)擊右上角分享
     */
    onShareAppMessage: function () {

    },

    onSrStart: async function() {
        if (!this.data.sr) {
            console.log("sr is null")
            return
        }

        if (this.data.srStart) {
            console.log("sr is started!")
            return
        }
        let sr = this.data.sr
        try {
            await sr.start(sr.defaultStartParams())
            this.data.srStart = true
        } catch (e) {
            console.log("start failed:" + e)
            return
        }

        wx.getRecorderManager().start({
            duration: 600000,
            numberOfChannels: 1,
            sampleRate : 16000,
            format: "PCM",
            frameSize: 4
        })
    },

    onSrStop: async function() {
        wx.getRecorderManager().stop()
        await sleep(500)
        if (this.data.srStart && this.data.sr) {
            try {
                console.log("prepare close sr")
                await this.data.sr.close()
                this.data.srStart = false
            } catch(e) {
                console.log("close sr failed:" + e)
            }
        }
    }
})