android MediaPlayer录音amr文件,上传到服务器进行转码mp3

android MediaPlayer录音amr文件,上传到服务器进行转码mp3

最近在搞android的录音功能,业务需求是MUI写的移动端用android打包,本来是想用H5+环境去实现录音、上传文件等扩展的api,但是项目上需要对移动端项目里面的js进行修改,但领导不允许动移动端的代码,所以只能放弃咯!改用原生android的录音功能,然后保存在服务器进行转码为mp3的文件,然后再网页上播放!本来使用的是AudioRecord录音但是出来的格式只能是wav、pcm这些,转码失败,,,所以只能求助于MediaPlayer将录音的格式保存在amr的,总之头都大了!!!!下面贴一下具体代码!

创建并实例化MediaPlayer对象,设置一些相关属性

private void createMediaRecord(String name){
     /* ①Initial:实例化MediaRecorder对象 */
    mMediaRecorder = new MediaRecorder();

    /* setAudioSource/setVedioSource*/
    mMediaRecorder.setAudioSource(AudioFileFunc.AUDIO_INPUT);//设置麦克风

    /* 设置输出文件的格式:THREE_GPP/MPEG-4/RAW_AMR/Default
     * THREE_GPP(3gp格式,H263视频/ARM音频编码)、MPEG-4、RAW_AMR(只支持音频且音频编码要求为AMR_NB)
     */
    mMediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);

     /* 设置音频文件的编码:AAC/AMR_NB/AMR_MB/Default */
    mMediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);

     /* 设置输出文件的路径 */
    File file = new File(AudioFileFunc.getAMRFilePath(name));
    if (file.exists()) {
        file.delete();
    }
    mMediaRecorder.setOutputFile(AudioFileFunc.getAMRFilePath(name));
}

 


这里注意 android6.0以上需要动态配置权限,否则设置麦克风等会报错,贴一下设置权限代码
if(ContextCompat.checkSelfPermission(this, WRITE_EXTERNAL_STORAGE) != PackageManager.PERMISSION_GRANTED||
        ContextCompat.checkSelfPermission(this, RECORD_AUDIO) != PackageManager.PERMISSION_GRANTED) {
    ActivityCompat.requestPermissions(MainActivity.this, new String[]{WRITE_EXTERNAL_STORAGE, RECORD_AUDIO}, 001);

}

 


获取到权限之后进行录音什么的
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults)
{
    if(requestCode == 001)
    {
        if(grantResults[0] == PackageManager.PERMISSION_GRANTED
                &&grantResults[1] == PackageManager.PERMISSION_GRANTED)
        {
            audioName = getAudioNameByTime();
            mRecord_2.startRecordAndFile(audioName);
        }
        else
        {
            Toast.makeText(MainActivity.this, "您未获取到权限...", Toast.LENGTH_LONG).show();
        }
    }
}

 


录音的具体实现
public void startMediaPlay(String mFileName){
     try {
/* 重置多媒体 */
         mediaPlayer.reset();
/* 读取mp3文件 */
         mediaPlayer.setDataSource(mFileName);
/* 准备播放 */
         mediaPlayer.prepare();
/* 开始播放 */
         mediaPlayer.start();
/* 是否单曲循环 */
         mediaPlayer.setLooping(false);
         mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() {//录音完成之后自动结束掉
             @Override
             public void onCompletion(MediaPlayer mp) {
                 mediaPlayer.stop();
                 MainActivity.flagPlay=0;
             }
         });
     } catch (IOException e) {
         e.printStackTrace();
     }
 }
 public void pauseMediaPlay(){
     if (!mediaPlayer.isPlaying()) {// 正在播放
         mediaPlayer.pause();// 暂停
     } else {// 没有播放
         mediaPlayer.start();

     }
 }
 public void stopMediaPlay(){
     if (mediaPlayer != null && !mediaPlayer.isPlaying()) {
         mediaPlayer.stop();
     }
 }

 



最后将文件上传到服务器进行转码,,,amr------>mp3,source要转的文件,desFileName转完之后的文件
public static File execute(File source, String desFileName)  throws Exception { 
    File target = new File(desFileName); 
   AudioAttributes audio = new AudioAttributes(); 
  audio.setCodec("libmp3lame"); 
  audio.setBitRate(new Integer(36000)); //音频比率 MP3默认是1280000 
  audio.setChannels(new Integer(2)); 
  audio.setSamplingRate(new Integer(44100)); 
  EncodingAttributes attrs = new EncodingAttributes(); 
  attrs.setFormat("mp3"); 
  attrs.setAudioAttributes(audio); 
  Encoder encoder = new Encoder(); 
  encoder.encode(source, target, attrs); 
  return target; 
}

 

将文件返回到网页之后放入到<audio   id=”playWebAudio” controls=”controls”  src=”………”></audio>进行播放即可

 

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