2013年2月22日 星期五

MediaRecorder進行手機錄音

MediaRecorder進行手機錄音



以下介紹一項簡單的錄音程式,參考資料在此



程式碼:
public class MediaRecorderEx extends Activity {

    private Button btnStart,btnStop,btnPlay;
    private MediaRecorder mr;
    private String path;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_media_recorder_ex);
        btnStart=(Button) findViewById(R.id.btnStart);
        btnStop=(Button) findViewById(R.id.btnStop);
        btnPlay=(Button) findViewById(R.id.btnPlay);
        btnStart.setOnClickListener(btnClick);
        btnStop.setOnClickListener(btnClick);
        btnPlay.setOnClickListener(btnClick);
        new DateFormat();
        //path=Environment.getExternalStorageDirectory().toString()+
        //        "test.3gp";
        path="/sdcard/"  + "YY" + DateFormat.format("yyyyMMdd_hhmmss", 
                Calendar.getInstance(Locale.CHINA)) + ".amr";
        Log.d("test", "set OK");
    }

    private OnClickListener btnClick=new OnClickListener(){

        @Override
        public void onClick(View v) {
            // TODO Auto-generated method stub
            if(v==btnStart){
                try { 
                    mediaRecorderPrepare();
                    mr.prepare(); 
                    mr.start(); 
                    Toast.makeText(getApplicationContext(), 
                            "Recording...", 
                            Toast.LENGTH_LONG) 
                            .show(); 
                    } catch (IllegalStateException e) { 
                    e.printStackTrace(); 
                    } catch (IOException e) { 
                    e.printStackTrace(); 
                    } 
            }
            else if(v==btnStop){
                if(mr!=null){
                    mr.stop(); 
                    mr.release(); 
                    mr = null; 
                }
            }
            else if(v==btnPlay){
                File file=new File(path);
                Intent intent = new Intent( Intent.ACTION_VIEW );
                intent.setDataAndType( Uri.fromFile(file), "audio/*" );
                startActivity(intent);
            }
        }
        
    };
    
    @SuppressLint("SdCardPath")
    void mediaRecorderPrepare(){
        /** 
        * mediaRecorder.setAudioSource设置声音来源。 
        * MediaRecorder.AudioSource这个内部类详细的介绍了声音来源。 
        * 该类中有许多音频来源,不过最主要使用的还是手机上的麦克风,MediaRecorder.AudioSource.MIC 
        */ 
        mr=new MediaRecorder();
        mr.setAudioSource(MediaRecorder.AudioSource.DEFAULT); 
        /** 
        * mediaRecorder.setOutputFormat代表输出文件的格式。该语句必须在setAudioSource之后,在prepare之前。 
        * OutputFormat内部类,定义了音频输出的格式,主要包含MPEG_4、THREE_GPP、RAW_AMR……等。 
        */ 
        mr.setOutputFormat(MediaRecorder.OutputFormat.DEFAULT); 
        /** 
        * mediaRecorder.setAddioEncoder()方法可以设置音频的编码 
        * AudioEncoder内部类详细定义了两种编码:AudioEncoder.DEFAULT、AudioEncoder.AMR_NB 
        */ 
        mr.setAudioEncoder(MediaRecorder.AudioEncoder.DEFAULT); 
        /** 
        * 设置录音之后,保存音频文件的位置 
        */ 
        mr.setOutputFile(path);
        
    }
}

加入權限:
<uses-permission android:name="android.permission.RECORD_AUDIO"/>
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>




沒有留言:

張貼留言