13年的时候做过html5录音,一个问题是保存的wav格式文件很大,当初用了一个迂回的方式,上传到服务器后调用 lame 编码器转换,但由于文件大,上传较慢。不得不说,前端技术发展真是日新月异,有人实现了js版本的lame编码器,可以直接在浏览器端录制MP3音频。

最初有个开源项目 libmp3lame-js ,直接将 lame 源码编译为 js版本,后来有人基于 libmp3lame 使用 js 进行了重写,就是如今的 lamejs 项目。相比libmp3lame ,自身体积更小,而且能实现更快的编码速度。据介绍说,编码一个132秒长度的音频仅需6.5秒。

我对代码进行了梳理和封装,已发布到Github,参见 mp3-recorder。对实现过程有兴趣或对使用lamejs有兴趣的,可以参考我的源码。支持Firefox 及 Webkit浏览器。

采用64kbps比特率,录制一分钟音频长度约为480KB。

  1. /*
  2. MP3的采样频率分为 48000 44100 32000 24000 22050 16000 12050 8000
  3. 比特率值与现实音频对照(仅供参考)
  4.   16Kbps=电话音质
  5.   24Kbps=增加电话音质、短波广播、长波广播、欧洲制式中波广播
  6.   40Kbps=美国制式中波广播
  7.   56Kbps=话音
  8.   64Kbps=增加话音(手机铃声最佳比特率设定值、手机单声道MP3播放器最佳设定值)
  9.   112Kbps=FM调频立体声广播
  10.   128Kbps=磁带(手机立体声MP3播放器最佳设定值、低档MP3播放器最佳设定值)
  11.   160Kbps=HIFI高保真(中高档MP3播放器最佳设定值)  
  12.  192Kbps=CD(高档MP3播放器最佳设定值)
  13.   256Kbps=Studio音乐工作室(音乐发烧友适用)
  14. */
  15.  
  16. //唯一影响mp3文件大小的参数为 bitRate
  17. //sampleRate 仅供特殊需求的人使用
  18. var recorder = new MP3Recorder({
  19. //numChannels: 1, //声道数,默认为1
  20. //sampleRate: 8000, //采样率,一般由设备提供,比如 48000
  21. bitRate: 64, //比特率,不要低于64,否则可能录制无声音(人声)
  22.  
  23. //录音结束事件
  24. complete: function (data, type) {
  25. //blob为mp3音频数据
  26. var blob = new Blob(data, { type: type });
  27. }
  28. });
  29. //开始录音
  30. recorder.start(onSuccess, onError);
  31. //停止录音
  32. recorder.stop();
  33. //暂停录音
  34. recorder.pause();
  35. //恢复录音
  36. recorder.resume();

使用很简单,demo有详细代码,在此就不多说了。

源码及示例代码

源码更新请关注Github

如果本文或本项目对您有帮助的话,请不吝点个赞。欢迎交流!

版权声明:本文为devin87原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/devin87/p/mp3-recorder.html