Android MediaRecorder 手机 录音的几种方法(8)

2019-04-13 21:28

import android.os.Environment; import android.util.Log; import android.view.View;

import android.view.View.OnClickListener; import android.widget.Button; import android.widget.TextView;

import com.telenav.funnl.android.R; /**

* 该实例中,我们使用AudioRecord类来完成我们的音频录制程序 * AudioRecord类,我们可以使用三种不同的read方法来完成录制工作, * 每种方法都有其实用的场合

* 一、实例化一个AudioRecord类我们需要传入几种参数

* 1、AudioSource:这里可以是MediaRecorder.AudioSource.MIC

* 2、SampleRateInHz:录制频率,可以为8000hz或者11025hz等,不同的硬件设备这个值不同

* 3、ChannelConfig:录制通道,可以为

udioFormat.CHANNEL_CONFIGURATION_MONO和udioFormat.CHANNEL_CONFIGURATION_STEREO

* 4、AudioFormat:录制编码格式,可以为AudioFormat.ENCODING_16BIT和BIT,其中16BIT的仿真性比8BIT好,但是需要消耗更多的电量和存储空间 * 5、BufferSize:录制缓冲大小:可以通过getMinBufferSize来获取

* 这样我们就可以实例化一个AudioRecord对象了 * 二、创建一个文件,用于保存录制的内容 * 同上篇

* 三、打开一个输出流,指向创建的文件

* DataOutputStream dos = new DataOutputStream(new BufferedOutputSream(new FileOutputStream(file)))

* 四、现在就可以开始录制了,我们需要创建一个字节数组来存储从udioRecorder中返回的音频数据,但是

* 注意,我们定义的数组要小于定义AudioRecord时指定的那个ufferSize * short[]buffer = new short[BufferSize/4]; * startRecording();

* 然后一个循环,调用AudioRecord的read方法实现读取

* 另外使用MediaPlayer是无法播放使用AudioRecord录制的音频的,为了实现播放,我们需要

* 使用AudioTrack类来实现

* AudioTrack类允许我们播放原始的音频数据 * *

* 一、实例化一个AudioTrack同样要传入几个参数

* 1、StreamType:在AudioManager中有几个常量,其中一个是TREAM_MUSIC; * 2、SampleRateInHz:最好和AudioRecord使用的是同一个值 * 3、ChannelConfig:同上

* 4、AudioFormat:同上

* 5、BufferSize:通过AudioTrack的静态方法getMinBufferSize来获取

* 6、Mode:可以是AudioTrack.MODE_STREAM和MODE_STATIC,关于这两种不同之处,可以查阅文档

* 二、打开一个输入流,指向刚刚录制内容保存的文件,然后开始播放,边读取边播放 *

* 实现时,音频的录制和播放分别使用两个AsyncTask来完成 */

public class PCMRecordActivity extends Activity implements OnClickListener{

private TextView stateView;

private Button btnStart,btnStop,btnPlay,btnFinish;

private RecordTask recorder; private PlayTask player; private File fpath; private File audioFile; private Context context;

private boolean isRecording=true, isPlaying=false; //标记

private int frequence = 16000;//8000; //录制频率,单位hz.这里的值注意了,写的不好,可能实例化AudioRecord对象的时候,会出错。我开始写成11025就不行。这取决于硬件设备

private int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO; private int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;

public void onCreate(Bundle savedInstanceState){ super.onCreate(savedInstanceState); setContentView(R.layout.my_audio_record);

stateView = (TextView)this.findViewById(R.id.view_state); stateView.setText(\

btnStart = (Button)this.findViewById(R.id.btn_start); btnStart.setText(\

btnStart.setOnClickListener(this);

btnStop = (Button)this.findViewById(R.id.btn_stop); btnStop.setText(\

btnStop.setOnClickListener(this);

btnPlay = (Button)this.findViewById(R.id.btn_play); btnPlay.setText(\

btnPlay.setOnClickListener(this);

btnFinish = (Button)this.findViewById(R.id.btn_finish);

btnFinish.setText(\btnFinish.setOnClickListener(this); btnStop.setEnabled(false); btnPlay.setEnabled(false); btnFinish.setEnabled(false);

if(Environment.getExternalStorageState().equals(Environment.MEDIA_MOUNTED))//手机有SD卡的情况 {

//在这里我们创建一个文件,用于保存录制内容 fpath = new

File(Environment.getExternalStorageDirectory().getAbsolutePath()+\ fpath.mkdirs();//创建文件夹 }else//手机无SD卡的情况 {

fpath = this.getCacheDir(); } try {

//创建临时文件,注意这里的格式为.pcm

audioFile = File.createTempFile(\ } catch (IOException e) {


Android MediaRecorder 手机 录音的几种方法(8).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:专利侵权诉讼中是否需要向法院提供专利权评价报告

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: