php实现微信语音amr文件在线播放方法

来源:赵克立博客 分类: PHP 标签:--发布时间:2018-07-05 18:01:13最后更新:2018-07-09 10:19:46浏览:3340
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。o_0。
更新时间:
2018-07-09 10:19:46
温馨提示:
学无止境,技术类文章有它的时效性,请留意文章更新时间,如发现内容有误请留言指出,防止别人"踩坑",我会及时更新文章

微信的amr语音文件不是标准的amr格式,所以使用的时候不能直接播放,使用ffmpeg也不能转换,网上也有提供的方法把微信的amr文件转成mp3来播放,但是还是不太方便,下面介绍一个方法实现用audio标签在线播放

环境和工具

window10

apache

lame.exe

silk_v3_decoder.exe

a.amr 测试的微信语音文件一个

上面的两个exe文件是从开源项目中提取出来的


使用方法

写成啦一个批处理文件生成mp3,

@echo off
silk_v3_decoder.exe "a.amr" "a.pcm.afcoxvgvcd"
lame.exe -r -s 24000 --preset voice "a.pcm.afcoxvgvcd" --alt-preset insane -k "a.mp3"
pause


有啦批处理生成就简单啦,用php来调用批处理生成mp3文件,然后读mp3输出成mp3文件类型返回给web客户端来播放,代码如下


服务器输出mp3数据流 mp3.php

<?php
//微信amr文件
$s_amr_file = __DIR__ . '/a.amr';
//可执行程序目录路径
$exe_path = 'D:/GreenSoft/silk2mp3';
//临时文件路径名
$temname     = date('YmdHis') . rand(1000, 999);
$temfilename = __DIR__ . '/' . $temname;
//生成中间文件
$tem1 = $temfilename . '.pcm.afcoxvgvcd';
//目标mp3文件
$tem2 = $temfilename . '.mp3';
#命令行转换
$cmdstr = <<<eot
@echo off
{$exe_path}/silk_v3_decoder.exe "{$s_amr_file}" "{$tem1}"
{$exe_path}/lame.exe -r -s 24000 --preset voice "{$tem1}" --alt-preset insane -k "{$tem2}"
eot;
$arr = preg_split('/\r\n/', $cmdstr);
foreach ($arr as $value) {
    shell_exec($value);
}
//输出mp3信息
$full_path = $temfilename . '.mp3';
$file_size = filesize($full_path);
header("Content-type:audio/mpeg");
header("Accept-Ranges:bytes");
header("Accept-Length:$file_size");
header("Content-Disposition:attachment;filename={$temname}.mp3");
readfile($full_path);
@unlink($tem1);
@unlink($tem2);
exit();

html页面

<audio src="mp3.php" controls="controls"></audio>



附件:

silk2mp3.zip



微信号:kelicom QQ群:215861553 紧急求助须知
Win32/PHP/JS/Android/Python