我在我的应用程序中设置了AudioTrack,它被设置为Stream模式。我想写我通过无线连接收到的音频。该AudioTrack声明如下:AudioTrack:通过WiFi播放声音
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;
然而,当我写数据与写()的AudioTrack,它将发挥波涛汹涌的...请致电
byte[] audio = packet.getData();
mPlayer.write(audio, 0, audio.length);
只要通过网络连接接收到数据包,有人有一个想法,为什么它听起来波涛汹涌?也许这与WiFi连接本身有关系?我不这么认为,因为当我通过UDP将数据从Android手机发送到另一个来源时,声音听起来不太可怕。声音听起来很完整,而且没有波涛汹涌......所以有人会有这样的想法吗?
你有没有试过玩PLAYER_CAPACITY?我相信你应该使用'getMinBufferSize()'来获得正确的值,如下所示:http://developer.android.com/reference/android/media/AudioTrack.html – gary 2011-03-14 12:41:54
我试过了......但是我从网络获得的数据通常比从getMinBufferSize获得此设备的4096(当前)少。将其设置为缓冲区大小
ThaMe90
2011-03-14 12:46:55
我再看看这个,在我的情况下,波涛起伏是由于大量的数据包丢失/重传。在某些资源有限的系统(如Android)中,程序必须足够快地处理每个单独的UDP数据包,以防止数据包丢失。 – yorkw 2013-04-16 02:43:44