Android中MediaRecorder

山有木xi發表於2020-03-17

現在最火熱的計算機技術人工智慧、智慧識別,當你拿起你的手機呼喚出後臺小愛同學,小溪同學,Siri,你說什麼他們就能工具你的話來操作手機或者回答,這就說要Android提供的音訊採集功能:MediaRecorder

第一步須有擁有麥克風許可權

第一種方式是在AndroidManifest.xml中申請許可權,不過未經允許偷偷記錄使用者的隱私是不對的

    <uses-permission android:name="android.permission.RECORD_AUDIO" />

第二種方式是, ActivityCompat.requestPermissions

        if(ContextCompat.checkSelfPermission(this,
                Manifest.permission.RECORD_AUDIO)
                != PackageManager.PERMISSION_GRANTED){
            ActivityCompat.requestPermissions(this,
                    new String[]{Manifest.permission.RECORD_AUDIO},1);
        }else {
            //執行初始化MediaRecorder的步驟
        }

第二步是執行初始化

 private void initMR() {
        mediaRecorder = new MediaRecorder();
        mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
        mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
        mediaRecorder.setOutputFile(mFileName);
        mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
    }

setAudioSource是設定麥克風,使用音訊來源,

setOutputFormat是設定輸出格式,

setOutputFile是設定輸出檔案,

setAudioEncoder是設定音訊編碼方式

第三步就可以執行各種操作了

例如:開始錄音

Button btStart= (Button) findViewById(R.id.btStartRecord);
        btStart.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                try {
                    mediaRecorder.prepare();
                } catch (IOException e) {
                    Log.e(LOG_TAG, "MR出錯!");
                }
                mediaRecorder.start();
            }
        });

例如:結束錄音

Button btStop= (Button) findViewById(R.id.btStopRecord);
        btStop.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mediaRecorder.stop();
                mediaRecorder.release();
                mediaRecorder = null;
            }
        });

最後需要寫一下onRequestPermissionsResult

public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
        if(requestCode==1){
            if(grantResults.length>0 && grantResults[0]==PackageManager.PERMISSION_GRANTED){
                initMR();
            }else{
                Toast.makeText(this,"未獲得麥克風訪問許可權", Toast.LENGTH_LONG).show();
                finish();
            }
        }
    }


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69917874/viewspace-2680957/,如需轉載,請註明出處,否則將追究法律責任。

相關文章