h5直接播放amr文件
博客专区 > opdjava 的博客 > 博客详情
h5直接播放amr文件
opdjava 发表于1年前
h5直接播放amr文件
  • 发表于 1年前
  • 阅读 154
  • 收藏 0
  • 点赞 0
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

调微信的录音接口,生成的是amr文件,在h5中不能直接播放
github上有个用js写的amr解码器https://github.com/mykmelez/opencore-amr-js
具体自己去看代码,有demo

然后

android可以正常播放amr文件,ios的不支持
微信的amr文件的采样频路是8000,在ios中不支持,ios支持到20000多,具体没测
如果用超过8000的频率播放,语音速度会很快,ios的解决办法是加频率的同时加帧数

看代码

function playPcm(samples) {
    var ctx = getAudioContext();
    if (!ctx) {
        return $.toast('你的设备暂不支持播放语音');
    }
    var src = ctx.createBufferSource();
    var buffer;
    try{
      buffer = ctx.createBuffer(1, samples.length, 8000);
    }catch(e){
      buffer = ctx.createBuffer(1, samples.length * 3, 24000);
      var samples3 = new Float32Array(samples.length * 3);
      var ij = 0;
      for (var i = 0; i < samples.length; i++) {
        for (var j = 1; j <= 3; j++) {
          samples3[ij++] = samples[i];
        }
      }
      samples = samples3;
    }
    if (buffer.copyToChannel) {
        buffer.copyToChannel(samples, 0, 0)
    } else {
        var channelBuffer = buffer.getChannelData(0);
        channelBuffer.set(samples);
    }      
    src.buffer = buffer;
    src.connect(ctx.destination);
    //src.start();
    if (src.start) {
      src.start(0);
    } else if (src.play) {
      src.play(0);
    } else if (src.noteOn) {
      src.noteOn(0);
    }
}

 

共有 人打赏支持
粉丝 0
博文 4
码字总数 558
×
opdjava
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: