php实现微信语音amr文件在线播放方法
版权声明:
本文为博主原创文章,转载请声明原文链接...谢谢。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>
附件: