单纯限制了我对小程序坑爹的想象
最近写录音功能时候又验证了一次;
其中的辛酸泪;
不搞过是不会懂的;
为了让后面的童鞋少走点弯路;
于是就有了这篇文章;

先来说下我们的目标;
我们要让用户录音;
然后把录音上传到服务器;
管理员可以在后台听录音;
以及进一步对录音处理;

小程序是开放了录音api的;
这个翻开发文档是可以找到的;
同时还有一个上传文件的接口;
这两个以配合不就轻松实现了?
刚开始的时候我也是这么年轻;
当我开始搞起的时候才发现是多森破;

首先我们需要调用wx.stopRecordapi开始录音;
然后调用wx.stopRecordapi结束录音;
success回调方法中可以得到tempFilePath;
这是一个录音生成的临时文件路径;
用console.log打印的话是下面这个样子;

调用wx.uploadFileapi;
filePath就是上面的这个tempFilePath
这样就可以把录音上传到自己服务器了;
霎时心情愉悦踱起了魔鬼的步伐开始摩擦摩擦;
然而如果就这么轻松的搞定的话;
那就没法说坑了;
因为这个音频文件根本不是什么mp3等常见通用格式;
再认真一看会发现这个文件是silk格式;
百之谷之必应之;
原来是skype的音频转码格式;
那就找个转码的方案吧;
于是在全球最大的同性交友网站github上找到了silk-v3-decoder;
然后就发现silk-v3-decoder依赖ffmpeg
又于就又去安装ffmpeg
又然后发现想用ffmpegmp3需要先安装lame;
下载lame

wget http://downloads.sourceforge.net/lame/lame-3.100.tar.gz

Bash

Copy

解压

tar -zxvf lame-3.100.tar.gz
cd lame-3.100

Bash

Copy

编译安装

./configure --prefix=/usr/local
make
make install

Bash

Copy

如果是64位的系统;
需要增加一个软连接;

ln -s /usr/local/lib/libmp3lame.so.0.0.0 /usr/lib64/libmp3lame.so.0

Bash

Copy

下载 ffmpeg

wget http://ffmpeg.org/releases/ffmpeg-3.4.1.tar.bz2

Bash

Copy

解压

tar -jxvf ffmpeg-3.4.1.tar.bz2

Bash

Copy

编译安装

cd ffmpeg-3.4.1
./configure --prefix=/usr/local --pkg-config-flags=--static --enable-libmp3lame --disable-x86asm
make
make install

Bash

Copy

剩下的就简单了;
下载 silk-v3-decoder

cd /optwget https://github.com/kn007/silk-v3-decoder/archive/master.zip

Bash

Copy

解压

unzip master.zip
mv silk-v3-decoder-master silk-v3-decoder

Bash

Copy

给予执行权限

chmod -R +x /opt/silk-v3-decoder/

Bash

Copy

然后就可以调用命令了;

/opt/silk-v3-decoder/converter.sh file mp3'

Bash

Copy

心想折腾这么大半天了;
终于可以转码了吧;
没想到又森破了;
上来就是一个失败;
又于是用编辑器打开上传的silk文件;
发现是下面这个样子的;

原来是用base64转码了;
还好世界上最好的语言php解决这个问题so easy;

// $file 是 silk文件路径 删掉前面的加密说明
$base64 = str_replace('data:audio/webm;base64,', '', file_get_contents($file));
// 转码
$content = base64_decode($base64);
// 把转码后的内容存入文件
file_put_contents($file, $content);

PHP

Copy

转码后再打开应该是这个样子的;

再然后写个方法用php调用silk-v3-decoder;

/*** 把 silk 转成MP3** @param $file** @return mixed*/
function silkToMp3($file)
{set_time_limit(0);$path = $_SERVER['DOCUMENT_ROOT'] . '/Upload/record/' . $file;$command = '/usr/bin/sh  /opt/silk-v3-decoder/converter.sh ' . $file . ' mp3';exec($command, $result);return $result;
}

PHP

Copy

大舒一口气总算是搞完了;
可没想到还是森破了;
使用开发工具录音生成的是base64转码后的silk文件;
在真机中使用微信录音上传的silk是未被转码的;
于是最好做个判断;
判断文件中如果含有 data:audio/webm;base64
那就使用base64转码;
如果没有则不需要转了;

最后再说一些需要注意的地方;
小程序api的request请求最长时间为60秒;
还有就是调试的时候先在系统中通过命令行使用 silk-v3-decoder;
成功后再用php调用;
如果转码失败可以查看 silkToMp3 的返回值;
里面有错误的原因;

  • 我是一条分割线 - - -

补充: 现在小程序可以直接录制 mp3 了;

微信小程序上传silk格式录音并转码为mp3相关推荐

  1. 微信小程序上传文件到自己的服务器

    微信小程序上传文件到自己的服务器 1.建立 WebApi项目 (1)创建项目 (2)发布项目 2.后端接口代码 3.小程序端调接口 1.建立 WebApi项目 (1)创建项目 选择菜单 "文 ...

  2. 微信小程序上传组件(可同时长传图片+视频)

    写了个微信小程序上传组件,同时支持上传视频+图片,并且可以返显. 废话不多说,上代码: upload.wxml <view class="clearfix"><v ...

  3. 微信小程序上传多张图片,上传文件pdf等

    wx.getFileSystemManager().readFileSync同步循环数组是可以拿到值的 wx.getFileSystemManager().readFile异步,但是加了这个就一直是空 ...

  4. uni-app uni-file-picker文件上传实现拍摄从相册选择获取图片上传文档服务器(H5上传-微信小程序上传)

    前言 最近在使用uni-app写H5移动端,有一个从手机拍摄从相册选择获取图片上传到文档服务器功能. 查阅uni-app发现关于上传图片,uni-file-picker文件上传,uni.chooseI ...

  5. 小程序 php转excel,做微信小程序上传数据 数据格式?-微信 上传数据 生成excle

    做微信小程序上传数据 数据格式? 建议找人专门制作设计好,专业的事情交给专业的人做,自己浪费时间还不一定能搞好 如何把微信里的excel传到qq上 1.在手机中先箭头所示的"微信" ...

  6. 微信小程序上传文件到阿里OSS教程

    前言 (一)开通OSS服务与新建Bucket 开通OSS服务这里省略,新建bucket. (二)设置Bucket属性,后台配置域名 上传文件访问域名 这里我们要在小程序后台配置上传域名(上面的域名是我 ...

  7. 微信小程序上传Excel文本文件功能

    问题: 在开发过程中会发现微信小程序有很多功能都还不能满足我们的需求,谁叫客户就是上帝呢,前几天小编遇到了这么个问题,就是用微信小程序上传文件,但是还以为微信带有这个模块,可是查了许久还是没有找到,只 ...

  8. 微信小程序上传阿里云视频文件流程及代码

    为了微信小程序客服端实现自拍视频能够分享给多个好友,我们需要把小程序自拍的视频存储到服务器,而阿里云在性能和速度上比较不错,所以我们选择了阿里云作服务器. 第一步.微信小程序项目创建 1. 到http ...

  9. 微信小程序上传后 进行性手机扫码阅览 发现白屏的解决

    目录 问题: 微信小程序上传后 进行性手机扫码阅览 发现白屏的解决 1.上传时没有勾选保护 2.请求的域名没有配置 问题: 微信小程序上传后 进行性手机扫码阅览 发现白屏的解决 1.上传时没有勾选保护 ...

最新文章

  1. ajax请求中的reponseType和withCredetials分别是啥?
  2. antiSMASH数据库:微生物次生代谢物合成基因组簇查询和预测
  3. day3 程序流程控制
  4. 通过Chrome模拟和调试网速慢的情况来限制一些P2P视频网站上传速度占满的情况...
  5. 从LiveVideoStackCon 2019北京看多媒体技术趋势
  6. python人工智能面试题_人工智能面试题分享(含答案)
  7. sql sever 2008基础知识
  8. python读取数据库导出文件_python如何导出excel表格数据库数据
  9. MeasureSpec学习
  10. linux内核升级到3.4
  11. 2-机器学习入门-读书笔记
  12. 要实现动态加载JS脚本有4种方法:
  13. 快速从入门到精通!黑马java课程大纲
  14. word标题级别编号设置
  15. 同一个局域网我可以访问同事的电脑同事的访问不了我的本地项目
  16. Mac安装Jadx反编译工具
  17. CAD批量导入点的方法
  18. 新版Chrome自动禁用第三方插件的解决办法[转]
  19. 判断IE浏览器的文档模式以及浏览器模式
  20. DEFLATE压缩数据格式规范 v1.3

热门文章

  1. 英语六级写作指南个人总结
  2. linux如何做动态壁纸实验报告,Ubuntu制作动态壁纸
  3. 中华瑰宝之山西人的面食
  4. 自动化办公:1、文件自动化处理邮件批量处理
  5. 如何在 3dMax 中制作游戏中的战斧模型?
  6. 带你认识有源晶振的分类和英文缩写
  7. JavaScript中变量判断是否是数字,判断是否是整数,判断是否是正整数/负整数,判断奇数/偶数的方法
  8. OpenGL---实例 球体 画圆锥
  9. java 带根号的开平方
  10. Latex中IEEEtran中参考文献中斜体问题