android – AudioTrack:通过WiFi播放声音

我的应用程序中有一个AudioTrack,它设置为Stream模式.我想通过无线连接写入我接收的音频. AudioTrack声明如下:
mPlayer = new AudioTrack(STREAM_TYPE,FREQUENCY,CHANNEL_CONfig_OUT,AUdio_ENCODING,PLAYER_CAPACITY,PLAY_MODE);

参数定义如下:

private static final int FREQUENCY = 8000,CHANNEL_CONfig_OUT = AudioFormat.CHANNEL_OUT_MONO,AUdio_ENCODING = AudioFormat.ENCODING_PCM_16BIT,PLAYER_CAPACITY = 2048,STREAM_TYPE = AudioManager.STREAM_MUSIC,PLAY_MODE = AudioTrack.MODE_STREAM;

然而,当我用write()将数据写入AudioTrack时,它会播放乱码…该通话

byte[] audio = packet.getData();
mPlayer.write(audio,audio.length);

每当通过网络连接接收到分组时,就进行该操作.有人有什么想法,为什么它听起来不一致?也许它与WiFi连接本身有关系?我不这么认为,因为当我把数据从Android手机发送到另一个来源的UDP时,听起来听起来并不好听.声音听起来很完整,而且根本就不会发生波动.所以有人有一个想法,为什么会发生这种情况?

解决方法

你知道每秒收到几个字节,数据包之间的平均时间比较,还是数据包之间的最大时间?如果没有,可以添加代码来计算吗?

您需要平均8000个样本/秒* 2字节/采样= 16,000字节每秒,以保持流填充.

传入数据包之间的间隔超过2048个字节/(16000字节/秒)= 128毫秒将导致您的数据流运行干扰,音频会发生故障.

防止它的一种方法增加缓冲区大小(PLAYER_CAPACITY).更大的缓冲区将能够更好地处理输入分组大小和速率的变化.在等待缓冲区初始填充时,额外稳定性的开销是开始播放时延迟较大.

相关文章

这篇“android轻量级无侵入式管理数据库自动升级组件怎么实现...
今天小编给大家分享一下Android实现自定义圆形进度条的常用方...
这篇文章主要讲解了“Android如何解决字符对齐问题”,文中的...
这篇文章主要介绍“Android岛屿数量算法怎么使用”的相关知识...
本篇内容主要讲解“Android如何开发MQTT协议的模型及通信”,...
本文小编为大家详细介绍“Android数据压缩的方法是什么”,内...