边录边转 MP3 的 Android 录音库。
- 边录边转 MP3,支持系统自带 AEC、NC、AGC(通过
enableAudioEffect开关,1.9.1 默认关闭,其他都是默认开启) - 支持暂停/继续,实时回调录制时长和音量大小
- 支持背景音乐混音(Mix)、纯录音(Sim)、变声(ST)
- 耳机/外放自动切换背景音乐播放方式
implementation "com.github.SheTieJun.Mp3Recorder:recorder-core:<版本>" // 必选
// 以下三选一:
implementation "com.github.SheTieJun.Mp3Recorder:recorder-sim:<版本>" // 纯录音
implementation "com.github.SheTieJun.Mp3Recorder:recorder-mix:<版本>" // 背景音乐混音
implementation "com.github.SheTieJun.Mp3Recorder:recorder-st:<版本>" // 变声| 场景 | 模块 |
|---|---|
| 只需录音转 MP3,无需背景音乐混入输出 | recorder-sim |
| 需要背景音乐混入输出文件(K 歌、配乐) | recorder-mix |
| 需要实时变声(男声/女声等),无背景音乐 | recorder-st |
接入文档:Wiki
val recorder = recorder {
audioSource = MediaRecorder.AudioSource.MIC
audioChannel = 1 // 1=单声道,2=双声道
samplingRate = 48000
mp3BitRate = 128
mp3Quality = 5
mMaxTime = 1800 * 1_000 // 最大录制时长 ms
enableAudioEffect = false
isDebug = true
recordListener = object : RecordListener {
override fun onStart() {}
override fun onRecording(time: Long, volume: Int) {}
override fun onPause() {}
override fun onResume() {}
override fun onSuccess(isAutoComplete: Boolean, file: String, time: Long) {}
override fun onError(e: Exception) {}
override fun onRemind(duration: Long) {}
override fun onReset() {}
override fun onMaxChange(time: Long) {}
}
permissionListener = object : PermissionListener {
override fun needPermission() { /* 自行处理 RECORD_AUDIO 权限申请 */ }
}
}.buildMix(context) // 或 buildSim(context) / buildST()
recorder.setOutputFile("/path/to/output.mp3")
recorder.start()
// recorder.pause() / resume() / complete() / destroy()val recorder = recorder { /* ... */ }.buildMix(context)
recorder.setBackgroundMusic(context, uri)
recorder.setLoopMusic(true)
recorder.setBGMVolume(0.3f)
recorder.startPlayMusic() // 开始播放
recorder.pauseMusic() // 暂停
recorder.resumeMusic() // 继续
recorder.cleanBackgroundMusic() // 移除注意:声道数需与背景音乐参数一致,否则会导致音乐拉长或变快。
val recorder = recorder { /* ... */ }.buildST()
recorder.getSoundTouch().apply {
changeUse(true)
setPitchSemiTones(10f) // 女声 +10,男声 -10
}详见 BaseRecorder,核心方法:
| 方法 | 说明 |
|---|---|
setOutputFile(path, isContinue) |
设置输出路径,isContinue 为 true 时在文件末尾追加 |
start() / pause() / resume() / complete() |
录音生命周期 |
reset() / destroy() |
重置 / 释放资源 |
setBGMVolume(0f..1f) |
背景音乐音量 |
setMaxTime(max, remindDiff) |
最大录制时长,remindDiff 为提前提醒差值 |
setFilter(lowpass, highpass) |
滤波器 |
muteRecord(true) |
静音录制(录但不写声音,用于拼接场景) |
updateDataEncode(path, isContinue) |
中途切换输出文件 |
getSoundTouch() |
获取变声控制器(仅 ST) |
获取手机当前最佳采样率:
val am = getSystemService(Context.AUDIO_SERVICE) as AudioManager
val rate = am.getProperty(AudioManager.PROPERTY_OUTPUT_SAMPLE_RATE)
?.toIntOrNull()?.takeIf { it > 0 } ?: 44100采样率越高声音越接近原始数据;比特率越高音质越好文件越大。
