html5移动端调用语音功能




<form class="container js-ajax-form" role="form" method="post" id="msg_form" οnsubmit="return false;">
  <input type="hidden" name="doctor_id" value="1" />
    <div class="fill-text">
      <dl>
          <dt>详细病情<span>(支持语音输入识别)</span></dt>
          <dd>
              <textarea name="msg" id="msg" placeholder="请输入详细病情,语音输入仅支持一次性输入,再次输入将覆盖之前内容。"></textarea>
              <div class="tape">
                  <span class="hear" id="hear" οnclick="play()" ><input readonly type="hidden" name="localId"><b></b>'s<i></i></span>
                  <span class="say" id="talk_btn"></span>
              </div>
          </dd>
      </dl>
    </div>
    <div class="fill-button"><input type="submit" id="submit" value="发送留言"/></div>
</form>
<!-- 语音识别 start -->
<div class="sound-recording">
    <dl>
        <dt><i></i></dt>
        <dd>
            <span></span>
            <span></span>
            <span></span>
            <span></span>
            <span></span>
            <span></span>
        </dd>
    </dl>
    <p>2秒内找到合适医生</p>
</div>
<script src="http://res.wx.qq.com/open/js/jweixin-1.0.0.js"></script>

wx.ready(function(){});
var START = null;   //开始时间
var END = null; //最后时间
var timeout = undefined;    //定时器  
var state = 0;  //状态
function showRecording() {
    $(".sound-recording").show();//显示录音
    //span的width随机变化
    setInterval(function (){
        $(".sound-recording dd span").each(function (){
            $(this).width(48*Math.random() + 'px');
        });
    },200)
    clearTimeout(timeout);
    state = 0;  
    timeout = setTimeout(function() {  
        state = 1;  
    }, 1000);
}
function stopRecording() {
    $(".sound-recording").hide();//关闭录音
    clearTimeout(timeout);  
    state = 0;  
}
$("#talk_btn").on("touchstart", function (event) {  
    event.preventDefault();
    START = new Date().getTime();
    wx.startRecord({
        success: function(){
            recordTimer = setTimeout(function(){
                var longTime = new Date().getTime();
                if(longTime - START > 100){
                    showRecording();
                }
                wx.startRecord({
                    success: function(){
                        localStorage.rainAllowRecord = 'true';
                    }
                });
            },300);
        },
        cancel: function () {
            stopRecording();
            alert('用户拒绝授权录音');
        }
    });
});
//取消触摸
$('#talk_btn').on('touchcancel', function(event){
    stopRecording();
    wx.stopRecord({
        success: function (res) {
            clearTimeout(recordTimer);
        },
        fail: function (res) {
        }
    });
})      
$("#talk_btn").on("touchend", function (event) { 
    stopRecording();
    event.preventDefault();
    END = new Date().getTime();
    wx.stopRecord({
        success: function (res) {
            if((END - START) < 300){
                END = 0;
                START = 0;
                //小于300ms,不录音
                clearTimeout(recordTimer);
                return;
            }else{
                $("#hear").css("display","inline-block");
            }
            // play(res.localId);
            translateVoice(res.localId);
            var timeLength = ((END-START)/1000).toFixed(1);  //时间差
            $("#hear input").val(res.localId);
            $("#hear b").text(timeLength);
        },
        fail: function (res) {                                                                                        
            alert(JSON.stringify(res));
        }
    });
}); 
//播放语音
function play() {
    var localId = $("#hear input").val();
    $(".hear").addClass("cur");
    wx.playVoice({
        localId: localId
    })
    //语音播放结束的回调
    wx.onVoicePlayEnd({
        success: function (res) {
            $(".hear").removeClass("cur");
            //var localId = res.localId; // 返回音频的本地ID
        }
    });
}
function translateVoice(localId) {
    wx.translateVoice({
        localId: localId, // 需要识别的音频的本地Id,由录音相关接口获得
        isShowProgressTips: 1, // 默认为1,显示进度提示
        success: function (res) {
            $('textarea[name=msg]').val(res.translateResult); // 语音识别的结果
        }
    });
}
function uploadVoice() {
    var serverId = '';
    var localId = $("#hear input").val();
    if (localId != '') {
        wx.uploadVoice({
            localId: localId, // 需要上传的音频的本地ID,由stopRecord接口获得
            isShowProgressTips: 1, // 默认为1,显示进度提示
                success: function (res) {
                serverId = res.serverId; // 返回音频的服务器端ID
            }
        });
    }
    return serverId;
}
$("#hear i").on("click", function (){
    $("#hear input").val('');
    $(this).parent().hide();
})



  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曲线人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值