android – AudioTrack:通过WiFi播放声音

前端之家收集整理的这篇文章主要介绍了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相关文章