Android 使用AudioRecord录制声音

本文介绍了如何在Gitee上使用麦克风录制音频,以及如何播放1.pcm文件的操作步骤。重点在于权限获取、录音控制和文件路径说明。

gitee代码链接
使用方法:
第一次点击开始录制会申请权限,权限通过之后,需要再次点击才能开 始录音,麦克风录制完声音后,需要再次点击按钮才能停止录音,保存的录音文件在 /data/data/com.example.myaudiorecordtest/files下面
在这里插入图片描述
播放录制的 1.pcm

ffplay -ar 44100 -channels 1 -f s16le -i 1.pcm
要解决 Android 使用 AudioRecord 录制 PCM 文件音频速度变快的问题,可从采样率、缓冲区大小、数据读取和写入等方面进行排查和调整。 ### 检查采样率设置 确保采样率设置正确,采样率过高可能导致音频速度变快。在创建 AudioRecord 实例时,要使用合适的采样率,例如常见的 44100Hz、48000Hz 等。示例代码如下: ```java int sampleRate = 44100; // 采样率设置为 44100Hz mAudioRecorder = new AudioRecord( mRecorderBuilder.mAudioSource, sampleRate, channel_config, format, mRecorderBuilder.bufferSize ); ``` ### 调整缓冲区大小 缓冲区大小不合适可能影响数据的读取和处理,进而导致音频速度异常。可以尝试调整缓冲区大小,使其与采样率、声道数等参数相匹配。可以使用 `AudioRecord.getMinBufferSize()` 方法获取最小缓冲区大小,并在此基础上进行适当调整。示例代码如下: ```java int minBufferSize = AudioRecord.getMinBufferSize(sampleRate, channel_config, format); int bufferSize = minBufferSize * 2; // 适当调整缓冲区大小 mAudioRecorder = new AudioRecord( mRecorderBuilder.mAudioSource, sampleRate, channel_config, format, bufferSize ); ``` ### 确保数据读取和写入正常 在录制过程中,要确保数据的读取和写入操作正常,避免数据丢失或处理不及时。可以在子线程中进行录音操作,保证主线程不被阻塞。示例代码如下: ```java new Thread(new Runnable() { @Override public void run() { mAudioRecorder.startRecording(); byte[] buffer = new byte[bufferSize]; FileOutputStream fos = null; try { fos = new FileOutputStream(new File("your_file_path.pcm")); while (isRecording) { int read = mAudioRecorder.read(buffer, 0, bufferSize); if (read > 0) { fos.write(buffer, 0, read); } } } catch (IOException e) { e.printStackTrace(); } finally { try { if (fos != null) { fos.close(); } } catch (IOException e) { e.printStackTrace(); } mAudioRecorder.stop(); mAudioRecorder.release(); } } }).start(); ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值