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");
        }
    }

}

你可能感兴趣的:(android)