Android 中歌曲录制。。。

package com.king.android.media;

import java.io.File;
import java.io.FilenameFilter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import android.app.ListActivity;
import android.content.Intent;
import android.media.MediaRecorder;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.ListView;

import com.king.android.R;

/**

 * 描述:声音录制
 * 作者:Andy.Liu
 * 时间: 2012-7-30  上午07:27:06
 *
*/
public class RecordActivity extends ListActivity implements OnClickListener {
    //录制的音频文件
    private File mRecAudioFile,mRecAudioPath;
    
    private MediaRecorder mMediaRecoder;// MediaRecorder 对象
    
    private List<String> mMusicList = new ArrayList<String>();    //录音文件列表
    
    private String strTempFile = "recaudio_";    //临时文件前缀
    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mediarecore_layout);
        
        Button btnOperate = (Button) findViewById(R.id.btnStart);
        btnOperate.setOnClickListener(this);
         btnOperate = (Button) findViewById(R.id.btnStop);
         btnOperate.setOnClickListener(this);
         mRecAudioPath = Environment.getExternalStorageDirectory();
        
         refreshFile(mRecAudioPath.getAbsolutePath(),".amr");
         // musicList();
    }

    @Override
    public void onClick(View v) {
        switch(v.getId()){
        case R.id.btnStop:
            doStop();
            break;
            
        case R.id.btnStart:
            doStart();
            break;
        }
    }
    
    //开始录音
    private void doStart(){
        try {
            //创建录音文件
            mRecAudioFile = File.createTempFile(strTempFile, ".amr", mRecAudioPath);
            
            //实例化MediaRecorder对象
            mMediaRecoder = new MediaRecorder();
            //设置麦克风
            mMediaRecoder.setAudioSource(MediaRecorder.AudioSource.MIC);
            //设置输出的文件格式
            mMediaRecoder.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT);
            //设置音频文件 的编码
            mMediaRecoder.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT);
            //文件输出路径
            mMediaRecoder.setOutputFile(mRecAudioFile.getAbsolutePath());
            //准备
            mMediaRecoder.prepare();
            //开始
            mMediaRecoder.start();
        } catch (IOException e) {
            
            e.printStackTrace();
        }finally{
        }
    }
    
    private void doStop(){
        if(null!=mRecAudioFile){
            mMediaRecoder.stop();        //停止录音
            mMusicList.add(mRecAudioFile.getName());
            ArrayAdapter<String> musicList = new ArrayAdapter<String>(RecordActivity.this, R.layout.list, mMusicList);
            setListAdapter(musicList);
            mMediaRecoder.release();
            mMediaRecoder = null;    
        }
    }
    
    /* 播放录音文件 */
    private void playMusic(File file)
    {
        Intent intent = new Intent();
        intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        intent.setAction(android.content.Intent.ACTION_VIEW);
        /* 设置文件类型 */
        intent.setDataAndType(Uri.fromFile(file), "audio");
        startActivity(intent);
    }
    @Override
    /* 当我们点击列表时,播放被点击的音乐 */
    protected void onListItemClick(ListView l, View v, int position, long id)
    {
        /* 得到被点击的文件 */
        File playfile = new File(mRecAudioPath.getAbsolutePath() + File.separator + mMusicList.get(position));
        /* 播放 */
        playMusic(playfile);
    }
    
    /**
     * 
     *TODO:播放列表
     *Author:Andy.Liu
     *Create Time:2012-7-28 上午11:27:26
     *TAG:
     *Return:void
     
*/
    
    public void musicList(){
        //取得指定位置的文件显示到播放列表。
        File home = mRecAudioPath;
        if(home.listFiles(new MusicFilter()).length>0){
            for(File file:home.listFiles(new MusicFilter())){
                mMusicList.add(file.getName());
            }
            ArrayAdapter<String> musicList = new ArrayAdapter<String>(RecordActivity.this, R.layout.list, mMusicList);
            setListAdapter(musicList);
        }
    }
    

    /**
     * 
    递归法获取文件夹文件
     *TODO:TODO
     *Author:Andy.Liu
     *Create Time:2012-7-29 下午11:40:33
     *TAG:
@param path   文件路径,一般选择根目录
     *TAG:
@param fileType 文件类型。
     *Return:void
     
*/
    public void refreshFile(String path,String fileType){
        File file = new File(path);
        File[] files = file.listFiles();
        if(null==files)
            return;
        
        for(int i = 0;i<files.length;i++){
            if(files[i].isDirectory()){
                refreshFile(files[i].getAbsolutePath(),fileType);        //注意这里的递归方法 
            }else{
                if(files[i].getName().endsWith(fileType))
                //    allFiles.add(files[i]);
                    mMusicList.add(file.getName());
            }
        }
    }
    
    
    //过渡文件类型
    class MusicFilter implements FilenameFilter{

        @Override
        public boolean accept(File dir, String filename) {
            return filename.endsWith(".amr");
        }
    }

}
有些东西会,但不精通,而我现在要做的就是精通,复习回顾,整理自己的框架,举一反三。。。
原文地址:https://www.cnblogs.com/liuzenglong/p/2614514.html