AudioRecord 录音和播放的Demo

#AudioRecord 录音和播放的Demo

本文介绍一个AudioRecord的简单录音和播放的示例程序。

录音是需要动态获取权限的!

##主要代码

###1.AudioRecord录音代码

//开通输出流到指定的文件,audioFile是保存的音频文件File对象
DataOutputStream dos = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(audioFile)));
//根据定义好的几个配置,来获取合适的缓冲大小
int bufferSize = AudioRecord.getMinBufferSize(frequence, channelConfig, audioEncoding);
Log.i(TAG, "RecordTask: dataSize=" + bufferSize);//1280
//实例化AudioRecord//MediaRecorder.AudioSource.MIC
AudioRecord record = new AudioRecord(MediaRecorder.AudioSource.MIC, frequence, channelConfig, audioEncoding, bufferSize);
//开始录制
record.startRecording();
byte audioData[] = new byte[bufferSize];
//定义循环,根据isRecording的值来判断是否继续录制
long beforeTime = 0;
while (isRecording) {
    int number = record.read(audioData, 0, bufferSize);
    dos.write(audioData);
}
//录制结束
record.stop();


###2.AudioTrack播放音频文件代码代码

int dataSize = AudioRecord.getMinBufferSize(frequence, channelConfig, audioEncoding);
Log.i(TAG, "PlayTask: dataSize=" + dataSize);
byte[] bytes = new byte[dataSize];          
    //定义输入流,将音频写入到AudioTrack类中,实现播放
    DataInputStream dis = new DataInputStream(new BufferedInputStream(new FileInputStream(audioFile)));
    //实例AudioTrack
    AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC, frequence, channelConfig, audioEncoding, dataSize, AudioTrack.MODE_STREAM);
    //开始播放
    track.play();
    //由于AudioTrack播放的是流,所以,我们需要一边播放一边读取
    while (isPlaying && (dataSize = dis.read(bytes)) != -1) {
        Log.i(TAG, "dataSize:" + dataSize);
        if (dataSize > 0) {
            track.write(bytes, 0, dataSize);
        }
    }
    //播放结束
    track.flush();
        

控制的代码并不难,只是要整理一下。
一般的都是写在线程里面完成。

##我的简单录音Demo

实现了,录音,停止,播放三个功能
并且程序启动的时候,动态请求了读写权限和录音权限,
程序启动生成一个录音文件在/sdcard/Sounds/time.pcm(time是当前时间的年月日时分秒)

图片:

1

后面附带我的录音apk文件和代码
需要的可以进行进一步修改和迭代。

##关于Audio其他的知识

AudioRecord生成的音频文件是pcm格式的,是一种纯音频文件的格式,
而mp3、wav是在纯音频文件上封装了相关的数据。
AudioRecord录音要生成mp3或者wav是要在头部添加一些数据的,
具体的数据格式可以上网找工具类,之前也成功过,但是会有一些坑!
AudioRecord录音可以设置的参数比MediaPlayer多,
MediaPlayer是经过很多封装的,能直接录制成wav的音频文件。

AudioTrack只能播放pcm文件,不能直接播放wav或mp3文件,
如果要播放也是要先经过数据处理。
而MediaPlayer是可以直接播放wav和mp3的。

如果是普通的场合使用MediaPlayer录音和播放音频文件确实是简单很多的,
但是也会有一些场景是只能用AudioRecord来录音,
比如一些需要用到把录音数据压缩处理,分段上传这种操作,传输的一般是纯音频pcm数据。

#共勉:不要在该奋斗的年纪去太多享受,否则你会在该享受的时候去受苦。

发布了365 篇原创文章 · 获赞 1587 · 访问量 160万+

猜你喜欢

转载自blog.csdn.net/wenzhi20102321/article/details/88774094