如果是录音,可以直接获取到音频时长,但如果是上传本地音频文件【wx.chooseMessageFile】,返回的数据如下:
因此要获取音频时长得创建音频上下文,用于获取时长。
// 上传录音文件
uploadRecording(filePath) {
console.log("上传录音文件", filePath);
// 如果已有音频时长(说明是录音),则直接上传
if (this.formTimbreData.durationMinutes) {
console.log("已有音频时长:", this.formTimbreData.durationMinutes);
this.uploadFileToServer(filePath);
return;
}
// 创建音频上下文,用于获取时长
const audioContext = wx.createInnerAudioContext();
audioContext.src = filePath;
// 获取音频时长
audioContext.onCanplay(() => {
const duration = audioContext.duration;
console.log(`音频时长: ${duration} 秒`);
if(duration<10){
wx.showToast({
title: "音频时长不能低于10秒",
icon: "none",
});
return;
}
// 计算并保存时长(单位:分钟)
this.formTimbreData.durationMinutes = Math.max(1, Math.round(duration / 60));
console.log("音频时长(分钟)", this.formTimbreData.durationMinutes);
// 上传文件
this.uploadFileToServer(filePath);
// 销毁音频上下文
audioContext.destroy();
});
// 捕获加载错误
audioContext.onError((err) => {
console.error("音频加载错误", err);
wx.showToast({ title: "无法获取音频时长", icon: "none" });
});
},