Android Audio - 支持多个APK同时录音

原理说明

Android Audio - 音频子系统框架简析

  • 在 Android4.4 上适配是最麻烦的, 整个录音框架原本就是基于单 RecordThread 线程设计的, 里面的 RecordTrack(buffer管理对象)也仅一个, 不同于Android6.0的 RecordTrack是以数组的形式管理的

  • 在 Android6.0 对比录音框架

变化如下
1.RecordTrack对象的管理
2.就是函数返回值. 无论是getInput 还是 getInputForAttr 函数主要的作用就是找到一个需求匹配的 profile文件, 然后创建一个 RecordThread 线程. 最后返回一个 audio_io_handle_t input 一个随机的整数值
  • 在 Android8.1 上 getInputForAttr 类似 Android4.4. 但是里面的 AudioInputDescriptor 类有一些变量的变化, 所以适配起来问题不大

原型AudioRecord框架

修改后AudioRecord框架
[适用环境]:

在特定的产品需求下, 常驻后台录音进程(思必驰, 天猫, 讯飞, 百度, Roboo), 在启动第三方录音apk, 例如微信, QQ物联等.
可以规避:
startInput() input 18 failed: other input already started.
AudioRecord: start() status -38 报错. 正常录音.

Android4.4 修改方法

Android Audio - 支持多应用同时录音_Android4.4修改方法

Android5.1 & 6.0 修改方法

Android Audio - 支持多应用同时录音_Android5.1 & Android6.0 修改方法

Android8.1 修改方法

Android Audio - 支持多应用同时录音_Android8.1修改方法

Android9.0 修改方法

Android Audio - 支持多应用同时录音_Android9.0修改方法

Android10.0 修改方法

Android Audio - 支持多应用同时录音_Android10.0修改方法

[补充]:

在 ATM7051H_Android4.4、RK3128_Android4.4、RK3128_Android6.0、RK3126C_Android8.1、RK3326_Android9.0上测试验证过. 请放心食用.

[补充]:

有问题可以邮件沟通 iFinelio Tower <308662170@qq.com>

  • 9
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
在MT6737 Android N平台上,录音到播放录音的流程可以分为以下几个步骤: 1. 打开录音设备 首先,需要打开录音设备并设置相关参数。在Android系统中,可以通过AudioRecord类来实现录音设备打开和设置。例如: ``` int sampleRateInHz = 44100; // 采样率 int channelConfig = AudioFormat.CHANNEL_IN_MONO; // 声道数 int audioFormat = AudioFormat.ENCODING_PCM_16BIT; // 采样精度 int bufferSizeInBytes = AudioRecord.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat); // 缓冲区大小 AudioRecord recorder = new AudioRecord(MediaRecorder.AudioSource.MIC, sampleRateInHz, channelConfig, audioFormat, bufferSizeInBytes); recorder.startRecording(); // 开始录音 ``` 2. 录制音频数据 接下来,需要不断地读取录音设备中的音频数据,并保存到一个缓冲区中。在Android系统中,可以使用AudioRecord类的read方法来读取音频数据。例如: ``` byte[] buffer = new byte[1024]; while (isRecording) { // isRecording为标志位,表示是否正在录音 int len = recorder.read(buffer, 0, buffer.length); // 读取音频数据 // 将读取到的音频数据写入到文件或网络等 } ``` 3. 停止录音设备 当需要停止录音时,需要停止录音设备,并释放相关资源。在Android系统中,可以使用AudioRecord类的stop和release方法来实现。例如: ``` recorder.stop(); // 停止录音 recorder.release(); // 释放资源 ``` 4. 播放录音数据 在播放录音时,需要打开播放设备并设置相关参数。在Android系统中,可以使用AudioTrack类来打开播放设备并设置参数。例如: ``` int streamType = AudioManager.STREAM_MUSIC; // 音频流类型 int sampleRateInHz = 44100; // 采样率 int channelConfig = AudioFormat.CHANNEL_OUT_MONO; // 声道数 int audioFormat = AudioFormat.ENCODING_PCM_16BIT; // 采样精度 int bufferSizeInBytes = AudioTrack.getMinBufferSize(sampleRateInHz, channelConfig, audioFormat); // 缓冲区大小 AudioTrack player = new AudioTrack(streamType, sampleRateInHz, channelConfig, audioFormat, bufferSizeInBytes, AudioTrack.MODE_STREAM); player.play(); // 开始播放 ``` 5. 播放录音数据 接下来,需要将录音数据写入到播放设备中,以实现播放录音的效果。在Android系统中,可以使用AudioTrack类的write方法来将录音数据写入到播放设备中。例如: ``` byte[] buffer = new byte[1024]; while (isPlaying) { // isPlaying为标志位,表示是否正在播放 // 从文件或网络等读取录音数据 int len = ...; // 将读取到的录音数据写入到播放设备中 player.write(buffer, 0, len); } ``` 6. 停止播放设备 当需要停止播放录音时,需要停止播放设备,并释放相关资源。在Android系统中,可以使用AudioTrack类的stop和release方法来实现。例如: ``` player.stop(); // 停止播放 player.release(); // 释放资源 ``` 以上就是录音到播放录音的流程分析。需要注意的是,在实际的开发中还需要考虑很多细节问题,例如音频格式的选择、缓冲区大小的计算、线程的管理等等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值