小程序?qū)崿F(xiàn)錄音上傳功能
本文實(shí)例為大家分享了小程序錄音上傳的具體代碼,供大家參考,具體內(nèi)容如下
首先我們可以先看一下微信小程序的API
這里有關(guān)于小程序錄音的一些基本配置

index.wxml:
<view class='progress_box' bindtap='openRecording' style="display:{{openRecordingdis}}">
<view class="progress_bgs">
<view class="progress_bg">
<image class="progress_img" src='../../../images/SubjectInformation/luyin.png'></image>
</view>
</view>
</view>
index.wxss:
.topicRecording {
float: left;
width: 40%;
height: 100%;
position: relative;
}
.progress_box {
width: 130rpx;
height: 130rpx;
margin-left: -65rpx;
position: absolute;
bottom: 0;
left: 50%;
display: flex;
align-items: center;
justify-content: center;
background: #ccc;
border-radius: 50%;
}
.progress_bgs {
width: 114rpx;
height: 114rpx;
background: #fff;
border-radius: 50%;
margin: 9rpx;
}
.progress_bg {
width: 106rpx;
height: 106rpx;
margin: 5rpx;
position: absolute;
background: #444;
border-radius: 50%;
}
.progress_img {
width: 82rpx;
height: 82rpx;
border-radius: 50%;
margin: 12rpx;
}
index.js:
Page({
data: {
openRecordingdis: "block",//錄音圖片的不同
shutRecordingdis: "none",//錄音圖片的不同
recordingTimeqwe:0,//錄音計(jì)時(shí)
setInter:""http://錄音名稱
},
//錄音計(jì)時(shí)器
recordingTimer:function(){
var that = this;
//將計(jì)時(shí)器賦值給setInter
that.data.setInter = setInterval(
function () {
var time = that.data.recordingTimeqwe + 1;
that.setData({
recordingTimeqwe: time
})
}
, 1000);
},
//開始錄音
openRecording: function() {
var that = this;
wx.getSystemInfo({
success: function(res) {
that.setData({
shutRecordingdis: "block",
openRecordingdis: "none"
})
}
})
const options = {
duration: 60000, //指定錄音的時(shí)長(zhǎng),單位 ms,最大為10分鐘(600000),默認(rèn)為1分鐘(60000)
sampleRate: 16000, //采樣率
numberOfChannels: 1, //錄音通道數(shù)
encodeBitRate: 96000, //編碼碼率
format: 'mp3', //音頻格式,有效值 aac/mp3
frameSize: 50, //指定幀大小,單位 KB
}
//開始錄音計(jì)時(shí)
that.recordingTimer();
//開始錄音
recorderManager.start(options);
recorderManager.onStart(() => {
console.log('。。。開始錄音。。。')
});
//錯(cuò)誤回調(diào)
recorderManager.onError((res) => {
console.log(res);
})
},
//結(jié)束錄音
shutRecording: function() {
var that = this;
wx.getSystemInfo({
success: function(res) {
that.setData({
shutRecordingdis: "none",
openRecordingdis: "block"
})
}
})
recorderManager.stop();
recorderManager.onStop((res) => {
console.log('。。停止錄音。。', res.tempFilePath)
const {tempFilePath} = res;
//結(jié)束錄音計(jì)時(shí)
clearInterval(that.data.setInter);
//上傳錄音
wx.uploadFile({
url: appURL + '/wx_SubjectInformation/wx_SubjectRecordKeeping.do',//這是你自己后臺(tái)的連接
filePath: tempFilePath,
name:"file",//后臺(tái)要綁定的名稱
header: {
"Content-Type": "multipart/form-data"
},
//參數(shù)綁定
formData:{
recordingtime: that.data.recordingTimeqwe,
topicid: that.data.topicid,
userid:1,
praisepoints:0
},
success:function(ress){
console.log(res);
wx.showToast({
title: '保存完成',
icon:'success',
duration:2000
})
},
fail: function(ress){
console.log("。。錄音保存失敗。。");
}
})
})
},
//錄音播放
recordingAndPlaying: function(eve) {
wx.playBackgroundAudio({
//播放地址
dataUrl: '' + eve.currentTarget.dataset.gid + ''
})
},
})
上傳服務(wù)
@RequestMapping(value = "/wx_SubjectRecordKeeping", produces = "application/json")
@ResponseBody
public Object wx_SubjectRecordKeeping(HttpServletRequest request,
@RequestParam("file") MultipartFile files, String recordingtime,
int topicid,int userid,int praisepoints) {
// 構(gòu)建上傳目錄路徑
// request.getServletContext().getRealPath("/upload");
String uploadPath = 你自己保存音頻的URL;
// 如果目錄不存在就創(chuàng)建
File uploadDir = new File(uploadPath);
if (!uploadDir.exists()) {
uploadDir.mkdir();
}
// 獲取文件的 名稱.擴(kuò)展名
String oldName = files.getOriginalFilename();
String extensionName = "";
// 獲取原來的擴(kuò)展名
if ((oldName != null) && (oldName.length() > 0)) {
int dot = oldName.lastIndexOf('.');
if ((dot > -1) && (dot < (oldName.length() - 1))) {
extensionName = oldName.substring(dot);
}
}
// 構(gòu)建文件名稱
String fileName = System.currentTimeMillis() + "_" + System.nanoTime()
+ extensionName;
// 獲取
String[] fileType = { ".CD", ".WAVE", ".AIFF", ".AU", ".MPEG", ".MP3",
".MPEG-4", ".MIDI", ".WMA", ".RealAudio", ".VQF", ".OggVorbis",
".AMR" };
List<String> fileTyepLists = Arrays.asList(fileType);
int fileTypeOnCount = 0;
for (String fileTyepListss : fileTyepLists) {
if (fileTyepListss.equalsIgnoreCase(extensionName)) {
// -----如果是音頻文件的話
// 構(gòu)建文件路徑
String filePath = uploadPath + File.separator + fileName;
// 保存文件
try {
FileUtils.writeByteArrayToFile(new File(filePath),
files.getBytes());
} catch (Exception e) {
e.printStackTrace();
}
} else {
fileTypeOnCount++;
}
}
if (fileTypeOnCount == fileTyepLists.size()) {
// 不是音頻文件
return false;
}
return false;
}
效果圖
點(diǎn)擊開始錄音、錄完后點(diǎn)擊結(jié)束錄音


錄音成功后的返回

錄制的音頻文件

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- 小程序?qū)崿F(xiàn)錄音功能
- 微信小程序錄音實(shí)現(xiàn)功能并上傳(使用node解析接收)
- 微信小程序?qū)崿F(xiàn)錄音功能
- 小程序?qū)崿F(xiàn)按下錄音松開識(shí)別語(yǔ)音
- 小程序采集錄音并上傳到后臺(tái)
- 微信小程序?qū)崿F(xiàn)錄音時(shí)的麥克風(fēng)動(dòng)畫效果實(shí)例
- 微信小程序錄音與播放錄音功能
- 微信小程序開發(fā)之錄音機(jī) 音頻播放 動(dòng)畫實(shí)例 (真機(jī)可用)
- 微信小程序-圖片、錄音、音頻播放、音樂播放、視頻、文件代碼實(shí)例
- 小程序錄音功能實(shí)現(xiàn)
相關(guān)文章
JavaScript結(jié)合canva實(shí)現(xiàn)簡(jiǎn)單的繪圖工具
這篇文章主要給大家介紹了如何使用JavaScript和HTML的Canvas標(biāo)簽創(chuàng)建一個(gè)簡(jiǎn)單的圖表工具,文中通過代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2024-12-12
JS中的算法與數(shù)據(jù)結(jié)構(gòu)之集合(Set)實(shí)例詳解
這篇文章主要介紹了JS中的算法與數(shù)據(jù)結(jié)構(gòu)之集合(Set),結(jié)合實(shí)例形式詳細(xì)分析了javascript中集合的概念、原理、定義及相關(guān)操作技巧,需要的朋友可以參考下2019-08-08
跟我學(xué)Node.js(四)---Node.js的模塊載入方式與機(jī)制
Node.js中模塊可以通過文件路徑或名字獲取模塊的引用。模塊的引用會(huì)映射到一個(gè)js文件路徑,除非它是一個(gè)Node內(nèi)置模塊。Node的內(nèi)置模塊公開了一些常用的API給開發(fā)者,并且它們?cè)贜ode進(jìn)程開始的時(shí)候就預(yù)加載了。2014-06-06

