微信小程序--录音
var app = getApp(),
$ = require("../../utils/util.js");
const recorderManager = wx.getRecorderManager();
var interval;
Page({
data: {
listen: false,
voicePath: "",
minute: 0,
second: 0,
timeText: "00:00"
},
onLoad: function(e) {},
//计时器
timer: function() {
let second = Number(this.data.second);
let minute = Number(this.data.minute);
let timeText = this.data.timeText;
second = second + 1;
if (second >= 60) {
second = 0;
minute = minute + 1;
}
second < 10 ? second = "0" + second : second;
minute < 10 ? minute = "0" + minute : minute;
timeText = minute + ":" + second;
this.setData({
second: second,
minute: minute,
timeText: timeText
})
},
//开始录音
startluyin: function() {
let that = this;
that.setData({
start: true,
});
interval = setInterval(function() {
that.timer();
}, 1000)
const options = {
duration: 600000, //指定录音的时长,单位 ms
sampleRate: 16000, //采样率
numberOfChannels: 1, //录音通道数
encodeBitRate: 96000, //编码码率
format: 'mp3', //音频格式,有效值 aac/mp3
frameSize: 50, //指定帧大小,单位 KB
}
//开始录音
recorderManager.start(options);
recorderManager.onStart(() => {
console.log('recorder start')
});
//错误回调
recorderManager.onError((res) => {
console.log(res);
})
},
//结束录音
endluyin: function() {
this.setData({
start: false
})
recorderManager.stop();
recorderManager.onStop((res) => {
this.tempFilePath = res.tempFilePath;
console.log('停止录音', res.tempFilePath)
const {
tempFilePath
} = res;
this.setData({
audioPath: res.tempFilePath
})
})
clearInterval(interval);
},
//删除录音
deleteluyin: function() {
let that = this;
wx.showModal({
title: '提示',
content: '您确定要删除此录音吗',
success: function(res) {
if (res.confirm) {
that.setData({
timeText: "00:00",
voicePath: "",
audioPath: "" })
} else if (res.cancel) {
console.log('用户点击取消')
}
}
})
},
//播放录音
playaudio: function() {
const innerAudioContext = wx.createInnerAudioContext();
this.setData({
listen: true
})
innerAudioContext.autoplay = true
innerAudioContext.src = this.tempFilePath
innerAudioContext.onPlay(() => {
console.log('开始播放')
})
//监听是否播放完毕
innerAudioContext.onEnded(() => {
console.log('播放结束')
this.setData({
listen: false
})
})
innerAudioContext.onError((res) => {
console.log(res.errMsg)
console.log(res.errCode)
})
},
//上传录音
uploadluyin: function() {
let that = this;
$.AJAX(app.globalData.API_OSSUPLOAD + '?type=sp_twitter', "GET", {}, function(res) {
var oss = res.datas;
var audioPath = that.data.audioPath;
var voicePath = that.data.voicePath;
console.log(audioPath, "111")
if (audioPath) {
$.loading("上传中...", 10000)
oss.path = audioPath;
var imgtype = audioPath.substr(audioPath.length - 3);
var imgname = $.getrandom() + '/' + $.getrandom2() + '.' + imgtype;
oss.key = oss.key + imgname;
$.UPLOADOSS(oss.host, oss, function(res) {
voicePath = oss.host + "/" + oss.key;
that.setData({
voicePath: voicePath
})
$.hideloading();
wx.showToast({
title: '上传成功',
icon: 'success',
duration: 2000
})
wx.navigateBack({
delta: 1
})
let pages = getCurrentPages();
console.log(pages, "pages---")
let timeText = that.data.timeText;
pages[1].setData({
voice: voicePath,
audioflag: true,
timeText: timeText
})
})
} else {
wx.showModal({
title: '提示',
content: '请录音再上传',
showCancel: false,
confirmText: "知道了",
success: function(res) {
if (res.confirm) {
console.log('用户点击确定')
}
}
})
}
})
}
})
<view class="container">
<view class='topbox'>
<view class="m-loading-box" bindtap='playaudio'>
<label class="{{listen?'u-loading':'u-noloading'}}"></label>
<image class="luyin1" src="https://cdn.quansuwangluo.com/shapan/luyin1.png"></image>
</view>
<view class='time'>{{timeText}}</view>
</view>
<view class='bottombox'>
<view class='opt opt_del' bindtap='deleteluyin'>
<view class='delwrap'>
<image src="https://cdn.quansuwangluo.com/shapan/del.png"></image>
</view>
<view>删除</view>
</view>
<view class='opt opt_luyin' bindtap='startluyin' wx:if="{{!start}}">
<view class='luyinwrap'>
<image src="https://cdn.quansuwangluo.com/shapan/pause.png"></image>
</view>
<view>点击录音</view>
</view>
<view class='opt opt_luyin' bindtap='endluyin' wx:else>
<view class='luyinwrap'>
<image src="https://cdn.quansuwangluo.com/shapan/nopause.png"></image>
</view>
<view>点击录音</view>
</view>
<view class='opt opt_listen' bindtap='uploadluyin'>
<view class='listenwrap'>
<image src="https://cdn.quansuwangluo.com/shapan/upload.png"></image>
</view>
<view>上传</view>
</view>
</view>
</view>
.topbox{
background-color: #FCF6ED;
font-size: 58rpx;
text-align: center;
position: relative;
padding: 225rpx 0;
}
.topbox .u-loading{
width: 240rpx;
height: 240rpx;
display: inline-block;
vertical-align: middle;
-webkit-animation: weuiLoading 1s steps(12, end) infinite;
animation: weuiLoading 1s steps(12, end) infinite;
background: transparent url('https://cdn.quansuwangluo.com/shapan/loading.png') no-repeat;
background-size: 100%;
}
.topbox .u-noloading{
width: 240rpx;
height: 240rpx;
display: inline-block;
vertical-align: middle;
background: transparent url('https://cdn.quansuwangluo.com/shapan/loading.png') no-repeat;
background-size: 100%;
}
.luyin1{
height: 60rpx;
width: 38rpx;
position: absolute;
left: 358rpx;
top:314rpx;
}
.topbox .time{
margin-top: 35rpx;
}
.bottombox{
background-color: #FEA22C;
display: flex;
align-items: center;
height: 400rpx;
color: #fff;
font-size: 34rpx;
padding: 0 90rpx;
text-align: center;
}
.opt_del,.opt_listen{
margin-top: 20rpx;
}
.opt_del .delwrap{
width: 120rpx;
height: 120rpx;
display: flex;
justify-content: center;
align-items: center;
border: 4rpx solid #fff;
border-radius: 50%;
margin-bottom: 20rpx;
}
.opt_del image{
width: 44rpx;
height: 58rpx;
}
.opt_luyin{
padding: 0 70rpx;
}
.opt_luyin .luyinwrap{
width: 180rpx;
height: 180rpx;
display: flex;
justify-content: center;
align-items: center;
background-color: #fff;
border-radius: 50%;
margin-bottom: 20rpx;
}
.opt_luyin image{
width: 60rpx;
height: 60rpx;
}
.opt_listen image{
width: 60rpx;
height: 54rpx;
}
.opt_listen .listenwrap{
width: 120rpx;
height: 120rpx;
display: flex;
justify-content: center;
align-items: center;
border: 4rpx solid #fff;
border-radius: 50%;
margin-bottom: 20rpx;
}
微信小程序--录音的更多相关文章
- 微信小程序录音实现
最近在写一个小程序的功能,需求是需要把用户的录音记录并上传到服务器,然后调用接口来实现播放功能. 翻阅不少资料都发现小程序对wx.startRecord()接口不在维护, 注意:1.6.0 版本开始, ...
- 微信小程序语音识别服务搭建全过程解析(https api开放,支持新接口mp3录音、老接口silk录音)
silk v3(或新录音接口mp3)录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) 重要的写在前面 重要事项一: 所有相关更新,我优先更新到我个人博客中,其它地方 ...
- 微信小程序语音识别服务搭建全过程解析(项目开源在github)
silk v3录音转olami语音识别和语义处理的api服务(ubuntu16.04服务器上实现) ## 重要的写在前面 重要事项一: 目前本文中提到的API已支持微信小程序录音文件格式:silk v ...
- 微信小程序语音识别开发过程记录 微信小程序silk转mp3 silk转wav 以及ffmpeg使用
说说最近在开发微信小程序语音识别遇到的问题吧 最先使用微信小程序录音控件可以拿到silk格式,后来微信官方又支持mp3格式了 但是我们拿到这些格式以后,都还不能直接使用,做语音识别,因为目前百度的语音 ...
- 微信小程序silk格式转码成mp3格式
最近小程序项目需要录制语音并上传到服务器,经过查资料了解 目前微信小程序录音的文件后缀名是silk,因此需要转换. 经过查资料了解,参考一下的地址 https://github.com/kn007/s ...
- 语音识别功能_微信小程序代办清单任务
最近想给自己的代办清单任务微信小程序想加个语音识别识别功能,废话不多说,直接说重点,语音识别使用的是百度语音识别api,因为微信小程序的录音输入文件目前只能是mp3或aac 但是百度语音识别不支持这两 ...
- 微信小程序(有始有终,全部代码)开发--- 新增【录音】以及UI改进
开篇语 寒假发了一篇练手文章,不出意外地火了: <简年15: 微信小程序(有始有终,全部代码)开发---跑步App+音乐播放器 > 后来又发了BUG修复的版本,出乎意料的火了: 简年18: ...
- 微信小程序常见问题集合(长期更新)
最新更新: 新手跳坑系列:推荐阅读:<二十四>request:fail错误(含https解决方案)(真机预览问题 跳坑指南<七十>如何让微信小程序服务类目审核通过 跳坑六十九: ...
- 微信小程序简介
什么是微信小程序? 今年下半年的时候,微信推出了微信小程序,当然刚刚推出来的时候还是处于内测阶段,但是这并不影响这家伙的热度,也许这是一个新的时代的开启.但是什么是微信小程序呢?微信应用号是一个app ...
随机推荐
- webpack打包vue -->简易讲解
### 1. 测试环境: 推荐这篇文章:讲的很细致 https://www.cnblogs.com/lhweb15/p/5660609.html 1. webpack.config.js自行安装 { ...
- CentOS 7中允许远程连接mariadb数据库
# /etc/init.d/mysql restart 或者 service mysqld start 启动服务 # /etc/init.d/mysql stop 或者 service mysqld ...
- python爬虫学习笔记(二)——基础篇之爬虫基本原理
1.什么是爬虫? 请求网站并提取数据的自动化程序 2.爬虫基本流程 2.1发起请求 通过HTTP库向目标站点发起请求,即发起一个Request,请求可以包含额外的headers等信息,等待服务器响应: ...
- 7.STM32中GPIO理解
端口概述 在STM32中,每个I/O端口可以由软件配置成为输入/输出模式.复位期间或刚复位后,I/O端口被配置成浮空输入模式.所有的GPIO引脚有一个内部弱上拉和弱下拉,当配置为输入时, 它们可以被激 ...
- Centos 7环境下安装配置MySQL 5.7
安装步骤为: 1.由于Centos 7版中已经移除MySQL rpm,因此需要到其官方网站上下载rpm,下载完成后,使用以下命令,来安装MySQL的rpm配置. rpm -ivh *****[注释:* ...
- c++字节对齐
参考URL: http://blog.csdn.net/hairetz/article/details/4084088 0 字节对齐的意义按我的理解是便于cpu一次取完所有数据, 提高代码的执行效 1 ...
- .net core2.2
GetCurrentDirectory returns the worker directory of the process started by IIS rather than the app's ...
- Pandas学习笔记(三)
(1)系列对象( Series)基本功能 编号 属性或方法 描述 1 axes 返回行轴标签列表. 2 dtype 返回对象的数据类型(dtype). 3 empty 如果系列为空,则返回True. ...
- Python课程第二天作业
一.统计字符串格式 要求: # 1.统计元组中所有数据属于字符串的个数,提示: isinstance() # 数据: t1 = (1, 2, '3', '4', 5, '6') # 结果: 3 代码 ...
- Ubuntu、CenOS、Debian等不同版本简单概念与不同
最近在云计算中使用虚拟机,在进行Xen搭建时发现Ubuntu好像从10版本没有开始官方维护,又去了解了更多的Linux的版本 后续打算采用CenOS尝试一下 下文选自https://blog.csdn ...