【android开发】实现语音数据实时采集/播放

最近做的项目是和语音实时采集并发送,对方实时接收并播放相关,下面记录下实现的核心代码。
很多android开发者应该知道android有个MediaRecorder对象和MediaPlayer对象,用于录制和播放音频。这个弊端在于他们不能实时采集并发送出去,所以,我们只能使用AudioRecord和AudioTrack来实现。
记得申明权限:

<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<uses-permission android:name="android.permission.RECORD_AUDIO" >

一、AudioRecord实现核心代码介绍如下:
1、先申明相关录制配置参数

private AudioRecord audioRecord;// 录音对象
private int frequence = 8000;// 采样率 8000
private int channelInConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;// 定义采样通道
private int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;// 定义音频编码(16位)
private byte[] buffer = null;// 录制的缓冲数组

2、在开始录制前,我们需要初始化AudioRecord类。

// 根据定义好的几个配置,来获取合适的缓冲大小
// int bufferSize = 800;
int bufferSize = AudioRecord.getMinBufferSize(frequence,
        channelInConfig, audioEncoding);
// 实例化AudioRecord
audioRecord = new AudioRecord(MediaRecorder.AudioSource.MIC,
        frequence, channelInConfig, audioEncoding, bufferSize);
// 定义缓冲数组
buffer = new byte[bufferSize];

3、准备开始录制,使用循环不断读取数据。

audioRecord.startRecording();// 开始录制
isRecording = true;// 设置录制标记为true

// 开始录制
while (isRecording) {
// 录制的内容放置到了buffer中,result代表存储长度
int result = audioRecord.read(buffer, 0, buffer.length);
/*.....result为buffer中录制数据的长度(貌似基本上都是640)。
剩下就是处理buffer了,是发送出去还是直接播放,这个随便你。*/
}

//录制循环结束后,记得关闭录制!!
if (audioRecord != null) {
    audioRecord.stop();
}

二、AudioTrack代码实现介绍如下:
1、声明播放相关配置。

private AudioTrack track = null;// 录音文件播放对象
private int frequence = 8000;// 采样率 8000
private int channelInConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;// 定义采样通道
private int audioEncoding = AudioFormat.ENCODING_PCM_16BIT;// 定义音频编码(16位)
private int bufferSize = -1;// 播放缓冲大小

2、初始化AudioTrack对象(初始化一次,该对象可重复使用)

// 获取缓冲 大小
bufferSize = AudioTrack.getMinBufferSize(frequence, channelInConfig,
        audioEncoding);
// 实例AudioTrack
track = new Au
  • 12
    点赞
  • 34
    收藏
    觉得还不错? 一键收藏
  • 33
    评论
实现Android MediaPlayer的实时播放语音实时音频流,你可以使用`MediaRecorder`捕获音频流并将其写入文件,然后使用`MediaPlayer`播放该文件。以下是一个简单的示例代码: ```java // 初始化MediaRecorder MediaRecorder mediaRecorder = new MediaRecorder(); mediaRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); // 设置音频源为麦克风 mediaRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); // 设置输出格式为3GP mediaRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB); // 设置音频编码器为AMR_NB mediaRecorder.setOutputFile("文件路径"); // 设置输出文件路径 // 准备MediaRecorder try { mediaRecorder.prepare(); mediaRecorder.start(); // 开始录制音频流 } catch (IOException e) { e.printStackTrace(); } // 初始化MediaPlayer MediaPlayer mediaPlayer = new MediaPlayer(); try { mediaPlayer.setDataSource("文件路径"); // 设置音频数据源为录制的文件 mediaPlayer.prepare(); mediaPlayer.start(); // 开始播放录制音频流 } catch (IOException e) { e.printStackTrace(); } // 当需要停止录制播放时,调用以下代码 mediaRecorder.stop(); mediaRecorder.release(); mediaPlayer.stop(); mediaPlayer.release(); ``` 在这个示例中,你需要将"文件路径"替换为你实际使用的文件路径。首先,使用`MediaRecorder`设置音频源为麦克风并设置输出格式和编码器。然后,调用`prepare()`和`start()`方法开始录制音频流。 接着,使用`MediaPlayer`将录制的文件作为音频数据源,并调用`prepare()`和`start()`方法开始播放录制音频流。 最后,当需要停止录制播放时,调用`stop()`和`release()`方法释放资源。 请注意,这只是一个简单的示例,实际应用中可能需要更多的错误处理和状态管理。另外,你还需要获取录音权限和适当处理录制播放的生命周期。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值