-
大小: 10KB文件類型: .java金幣: 1下載: 0 次發(fā)布日期: 2021-05-26
- 語言: Java
- 標(biāo)簽: AudioRecord??
資源簡介
網(wǎng)上的通話錄音大多數(shù)都是基于mediarecoder開發(fā)的,我最后反編譯了一款apk,發(fā)現(xiàn)里面用的是audiorecord開發(fā)的,下面是我的核心代碼展示,良心開發(fā),不要差評謝謝
代碼片段和文件信息
package?com.udows.test;
import?android.app.Activity;
import?android.content.Context;
import?android.graphics.PixelFormat;
import?android.media.AudioFormat;
import?android.media.AudioManager;
import?android.media.AudioRecord;
import?android.media.MediaRecorder;
import?android.os.Bundle;
import?android.util.Log;
import?android.view.View;
import?android.view.View.onclickListener;
import?android.view.Window;
import?android.view.WindowManager;
import?android.widget.Button;
import?java.io.File;
import?java.io.FileInputStream;
import?java.io.FileNotFoundException;
import?java.io.FileOutputStream;
import?java.io.IOException;
public?class?MainActivity3?extends?Activity?{
????//?音頻獲取源
????private?int?audioSource?=?MediaRecorder.AudioSource.VOICE_RECOGNITION;
????//?設(shè)置音頻采樣率,44100是目前的標(biāo)準(zhǔn),但是某些設(shè)備仍然支持22050,16000,11025
????private?static?int?sampleRateInHz?=?44100;
????//?設(shè)置音頻的錄制的聲道CHANNEL_IN_STEREO為雙聲道,CHANNEL_CONFIGURATION_MONO為單聲道
????private?static?int?channelConfig?=?AudioFormat.CHANNEL_IN_FRONT;
????//?音頻數(shù)據(jù)格式:PCM?16位每個樣本。保證設(shè)備支持。PCM?8位每個樣本。不一定能得到設(shè)備支持。
????private?static?int?audioFormat?=?AudioFormat.ENCODING_PCM_16BIT;
????//?緩沖區(qū)字節(jié)大小
????private?int?bufferSizeInBytes?=?0;
????private?Button?Start;
????private?Button?Stop;
????private?AudioRecord?audioRecord;
????private?boolean?isRecord?=?false;//?設(shè)置正在錄制的狀態(tài)
????//?AudioName裸音頻數(shù)據(jù)文件
????private?static?final?String?AudioName?=?“/sdcard/love.raw“;
????//?NewAudioName可播放的音頻文件
????private?static?final?String?NewAudioName?=?“/sdcard/new.wav“;
????public?void?onCreate(Bundle?savedInstanceState)?{
????????super.onCreate(savedInstanceState);
????????getWindow().setFormat(PixelFormat.TRANSLUCENT);//?讓界面橫屏
????????requestWindowFeature(Window.FEATURE_NO_title);//?去掉界面標(biāo)題
????????getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN
????????????????WindowManager.LayoutParams.FLAG_FULLSCREEN);
????????//?重新設(shè)置界面大小
????????setContentView(R.layout.activity_main);
????????init();
????}
????private?void?init()?{
????????Start?=?(Button)?this.findViewById(R.id.start);
????????Stop?=?(Button)?this.findViewById(R.id.stop);
????????Start.setonclickListener(new?TestAudioListener());
????????Stop.setonclickListener(new?TestAudioListener());
????????creatAudioRecord();
????}
????private?void?creatAudioRecord()?{
????????//?獲得緩沖區(qū)字節(jié)大小
????????bufferSizeInBytes?=?AudioRecord.getMinBufferSize(sampleRateInHz
????????????????channelConfig?audioFormat);
????????Log.e(“H3c“?“x:“?+?bufferSizeInBytes);
????????//?創(chuàng)建AudioRecord對象
????????audioRecord?=?new?AudioRecord(audioSource?sampleRateInHz
????????????????channelConfig?audioFormat?bufferSizeInBytes*2);
????}
????class?TestAudioListener?implements?onclickListener?{
????????@Override
????????public?void?onclick(View?v)?{
????????????if?(v?==?Start)?{
????????????????startRecord();
????????????}
????????????if?(v?==?Stop)?{
????????????????stopRecord();
????????????}
????????}
????}
????private?void?startRecord()?{
????????setMaxVoice();
????????audioRecord.startRe
評論
共有 條評論