PCM是android系统中的原生音频数据,那么我们如何录制和播放这个格式的byte[]
数据呢?
录制
录制很简单,使用AudioRecord,注意read前一定要先startRecording
var record = AudioRecord(MediaRecorder.AudioSource.VOICE_COMMUNICATION, 16000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, 1280) //这几个参数分别是 数据来源、采样率、声道、格式和缓存buffer大小 record.startRecording() Thread{ while (true) { var data = ByteArray(640) record.read(data, 0, 640) ... } }.start() 复制代码
停止录制调用stop函数,并一定要调用release函数进行资源释放
播放
播放也简单,使用AudioTrack,同样要先play起来再写数据
var track = AudioTrack(AudioManager.STREAM_VOICE_CALL, 16000, AudioFormat.CHANNEL_CONFIGURATION_MONO, AudioFormat.ENCODING_PCM_16BIT, 1296, AudioTrack.MODE_STREAM) //这几个参数分别是 流类型(哪种声音)、采样率、声道、格式、缓存buffer大小、模式(静态数据还是流,byte[]是流) track.play() Thread{ while (true) { ... track.write(result, 0, length) } }.start() 复制代码
同样,播放完要stop并release释放资源