录音工具-Mp3Recorder
- 边录边转码MP3,支持暂停,实时返回已录制时长和当前声音大小。
- 可添加背景音乐,可以设置背景音乐声音的大小
- 录制过程中暂停,已录制的那段音频是可以播放的.
- 可设置最大录制时间
- 录音中途可以替换输出文件,比如每60秒替换一个输出文件,然后发送
- 可以使用耳机配置方式:如果没有连接耳机会只用外放的背景音乐,如果连接上了耳机,会使用写入合成背景音乐的方式
- 其他...
背景音乐相关
- 录制中可以随时中断、播放、替换背景音乐
- 如果背景音乐的参数我的库中不一样,需要自行设置参数,如果不一样会让背景音乐拉长或者变快
Gradle
Step 1. Add it in your root build.gradle at the end of repositories:
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
推荐(背景音乐支持耳机):
implementation 'com.github.SheTieJun.Mp3Recorder:recorder-mix:+'
implementation 'com.github.SheTieJun.Mp3Recorder:recorder-core:+'
另外一个:(这个是最初的实现方式,不支持耳机,带耳机后没有背景音乐)
implementation 'com.github.SheTieJun.Mp3Recorder:recorder-sim:+'
implementation 'com.github.SheTieJun.Mp3Recorder:recorder-core:+'
demo
缺点
- 录制声道数设置,因为合成,所有你需要设置和背景音乐相同的参数
- 如果设置单声道,播放的背景是双声道,(MIX)会让音乐拉长;反之双声音合成,背景音乐是单声音,节奏会变快
PCM与时间的计算
音频文件大小的计算公式为: 数据量Byte = 采样频率Hz×(采样位数/8)× 声道数 × 时间s
反之:时间s = 数据量Byte / (采样频率Hz×(采样位数/8)× 声道数)
初始化
if (mRecorder == null) {
mRecorder = mixRecorder(
context,
mMaxTime = 3600 * 1000,
isDebug = true,
recordListener = this,
permissionListener = this
)
}
1.录音控制(开始/暂停)
when {
mRecorder?.state == RecordState.STOPPED -> {
if (EmptyUtils.isEmpty(file)) {
val mRecordFile = SDCardUtils.getPath("record") + "/" + System.currentTimeMillis() + ".mp3"
this.saveFile = mRecordFile
}else{
this.saveFile = file
}
mRecorder?.setOutputFile(saveFile,isContinue)
mRecorder?.start()
}
mRecorder?.state == RecordState.PAUSED->{
mRecorder?.onResume()
}
mRecorder?.state == RecordState.RECORDING ->{
mRecorder?.onPause()
}
}
2. 暂停、重新开始录音
mRecorder?.onPause() //暂停
mRecorder?.onResume() //重新开始
mRecorder?.state //获取当前录音的状态 3个状态,停止,录音中,暂停
3. 背景音乐相关
mRecorder?.setBackgroundMusic(musicUrl)//设置背景音乐
mRecorder?.setVolume(volume)//设置背景音乐大小0-1
mRecorder?.startPlayMusic() //开始播放背景音乐
mRecorder?.pauseMusic() //暂停背景音乐
mRecorder?.isPauseMusic()// 背景音乐是否暂停
mRecorder?.resumeMusic() //重新开始播放
mRecorder?.setContextToPlugConfig(context) //设置次方法后,会使用耳机配置方式,只有 【MixRecorder】 有效
mRecorder?.setContextToVolumeConfig(context) //设置方法后,将会使用系统的播放的音量进行控制
如果使用耳机配置方式:如果没有连接耳机会只用外放的背景音乐,如果连接上了耳机,会使用写入合成背景音乐的方式
如果没有使用耳机配置方式:会同时使用外放和写入背景音乐 2 种方法,可能会存在叠音,目前有细微优化,但是不保证兼容所有机型
5. 完成录音(停止录音)
mRecorder?.stop() //完成录音
中途直接结束.停止录音,但是不会走onSuccess
mRecorder?.onDestroy()
6.新增录音参数修改,必须在start()之前调用才有效
//初始Lame录音输出质量
mRecorder?.setMp3Quality(mp3Quality)
//设置比特率,关系声音的质量
mRecorder?.setMp3BitRate(mp3BitRate)
//设置采样率
mRecorder?.setSamplingRate(rate)
MixRecorder
1. 录音方式一:MP3Recorder
2. 录音方式二:AudioPlayer
3. 播放音乐:PlayBackMusic
4. 播放音乐,解码成PCM进行播放:AudioTrackManager
5. 播放PCM文件:Tips: 不建议直接使用,可参考
超级简单实用(UI)
implementation 'com.github.SheTieJun.Mp3Recorder:recorder-ui:+'
implementation 'com.github.SheTieJun.Mp3Recorder:recorder-sim:+'
implementation 'com.github.SheTieJun.Mp3Recorder:recorder-core:+'
初始化 activity中
private val recorderPopup: RecorderPopup by lazy {
RecorderPopup(this) {
ToastUtil.info(this,it) //录音成功返回的地址
}
}
使用
// activity 没有初始化成功前 不可以调用,否则会崩溃
recorderPopup.showPop()