- android本身不支持录制mp3音频,但可以通过lame库进行转码,如何实现边录边转就算了,我这里就讲一下如何使用第三方库吧。
- 这里先表明一下出处咯。https://github.com/CarGuo/RecordWave,上面说可以导入依赖使用,但是我这边老是报
java.lang.UnsatisfiedLinkError: No implementation found for void ...
错误,缺少的so文件也都加了,最后没办法,我就把demo下载下来了,然后把它里面的model复制出来单独使用了...
model下载链接:链接:https://pan.baidu.com/s/1EmEL6Jbmy5tJPBxc5sIe9g
提取码:yptj
具体使用步骤如下:
-
1:
如下图把ndk和cmake安装一下
-
2:
导入我们下载的model
-
3:
导入好后按Ctrl+Alt+Shift+S打开设置 把modle添加到app里
导入后会自动进行编译。。。
- 4:
接下来贴一下使用它的代码(超简单哦),代码里都有注释
代码:
class MainActivity : AppCompatActivity() {
private var mMP3Recorder: MP3Recorder? = null //音频工具
private var mFilePath: String = "" //文件路径
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//一些初始化工作
initView()
//view监听...
initListener()
}
private fun initView() {
//读写权限判断
PermissionUtils.readAndWrite(this) {
//获取保存的文件
val file = File(Environment.getExternalStorageDirectory(), generateFileName())
mFilePath = file.absolutePath
mMP3Recorder = MP3Recorder(file)
}
}
private fun initListener() {
//开始录音
bthAudioStart.setOnClickListener {
//录音权限
PermissionUtils.audio(this) {
mMP3Recorder?.start()
}
}
//停止录音
bthAudioStop.setOnClickListener {
mMP3Recorder?.stop()
//设置文件路径
tvAudioPath.text = "${tvAudioPath.text} $mFilePath"
}
}
//随机生成文件的名称
private fun generateFileName(): String {
return UUID.randomUUID().toString() + ".mp3"
}
override fun onRequestPermissionsResult(requestCode: Int, permissions: Array<out String>, grantResults: IntArray) {
super.onRequestPermissionsResult(requestCode, permissions, grantResults)
PermissionUtils.onRequestPermissionsResult(this, requestCode, permissions, grantResults)
}
}
xml:
对了,记得在AndroidManifest.xml
文件里也写上相应权限
<!-- 申请相关权限 -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.RECORD_AUDIO" />
最后附上效果图和demo
效果图:
demo:
链接:https://pan.baidu.com/s/1PqlRGQljoB0e-NKE8ZjpbQ
提取码:lrrb