微信录音amr音频文件转mp3格式

直到现在,仍然不存在一项旨在网页上播放音频的标准。HTML5 规定了一种通过 audio 元素来包含音频的标准方法。audio 元素能够播放声音文件或者音频流。当前,audio 元素支持三种音频格式:MP3 ,Wav ,Ogg Vorbis。

微信录音的音频为amr格式,不支持网页播放,且上传语音有效期3天,可用微信多媒体接口下载语音到自己的服务器,然后转码转成MP3格式,途径有两种:

一.在服务器上搭建ffmpeg

很多项目不一定放在自己服务器上,而且很多码农并不熟悉服务器方面的配置,所以没办法去搭建ffmpeg,但是对于网络接口的调用并不陌生,所以我着重讲一下使用七牛PHP框架将微信 amr音频转mp3。

二.使用七牛云存储框架转码存储

(1)下载七牛SDK,下载地址:https://developer.qiniu.com/sdk

(2)将下载的整个SDK包解压之后放入项目中

(3)引入入口文件,并写好相应要使用的模块命名空间

require_once 'qiniusdk/autoload.php';  
  
use Qiniu\Auth;  
use Qiniu\Storage\UploadManager;  
use Qiniu\Storage\BucketManager; 

(4)将微信录音amr文件下载到本地(自己的服务器)

private function savemedia($serverid){  
    $token = $this->_token;          //微信请求素材的Token  
    $mediaid = $serverid;            //语音素材的mediaid  
    $url = 'http://file.api.weixin.qq.com/cgi-bin/media/get?access_token='.$token.'&media_id='.$mediaid;  
    $content = ihttp_get($url);      //get请求  
    if (!is_error($content)){  
        $prefix = explode("/", $content['headers']["Content-Type"]);  
        $filename = $mediaid.".".$prefix[1];  
        $dateStr = date('Y-m-d',time());  
        $currdir = "/upload/".$dateStr.'/';  
        $dir = getcwd().$currdir;  
        if (!is_dir($dir)){       //创建保存文件的目录                          
            mkdir(iconv("UTF-8", "GBK", $dir),0777,true);     
        }  
        $currfile = $currdir.$filename;  
        $path = getcwd().$currfile;  
        if(file_exists($path)){  
            unlink($path); //如果文件已经存在则删除已有的                                
        }  
        $fp = fopen($path, 'w');   
        $state=fwrite($fp, $content['content']);  //写入数据  
        fclose($fp);   
          
    }  
}

(5)将本地amr音频文件上传至七牛云并转码生成MP3文件

private function upchange($filePath,$mediaid){  
          
    $accessKey = trim($reply['accessKey']);      //七牛公钥  
    $secretKey = trim($reply['secretKey']);      //七牛私钥  
    $auth = new Auth($accessKey, $secretKey);  
          
    $bucket = trim($reply['bucket']);  
    //数据处理队列名称,不设置代表不使用私有队列,使用公有队列。  
    $pipeline = trim($reply['pipeline']);  
          
    //通过添加'|saveas'参数,指定处理后的文件保存的bucket和key  
    //不指定默认保存在当前空间,bucket为目标空间,后一个参数为转码之后文件名   
    $savekey = Qiniu\base64_urlSafeEncode($bucket.':'.$mediaid.'.mp3');  
    //设置转码参数  
    $fops = "avthumb/mp3/ab/320k/ar/44100/acodec/libmp3lame";  
    $fops = $fops.'|saveas/'.$savekey;  
    if(!empty($pipeline)){  //使用私有队列  
        $policy = array(  
            'persistentOps' => $fops,  
            'persistentPipeline' => $pipeline  
        );  
    }else{                  //使用公有队列  
        $policy = array(  
            'persistentOps' => $fops  
        );  
    }  
          
    //指定上传转码命令  
    $uptoken = $auth->uploadToken($bucket, null, 3600, $policy);  
    $key = $mediaid.'.amr'; //七牛云中保存的amr文件名  
    $uploadMgr = new UploadManager();  
          
    //上传文件并转码$filePath为本地文件路径  
    list($ret, $err) = $uploadMgr->putFile($uptoken, $key, $filePath);  
    if ($err !== null) {  
        return false;  
    }else {  
        //此时七牛云中同一段音频文件有amr和MP3两个格式的两个文件同时存在  
        $bucketMgr = new BucketManager($auth);  
        //为节省空间,删除amr格式文件  
        $bucketMgr->delete($bucket, $key);  
        return $ret['key'];  
    }  
}

此时七牛云空间就已经有了保存的MP3文件了。

微信录音amr音频文件转mp3格式_第1张图片

你可能感兴趣的:(PHP,微信开发)