【发布时间】:2011-03-14 11:25:44
【问题描述】:
我的应用程序中有一个 AudioTrack,它设置为流模式。我想编写通过无线连接接收的音频。 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, 0, audio.length);
每当通过网络连接接收到数据包时都会生成。有没有人知道为什么它听起来波涛汹涌?也许它与WiFi连接本身有关?我不这么认为,因为当我通过 UDP 将数据从 Android 手机发送到另一个源时,声音听起来并不可怕。然后声音听起来很完整,一点也不断断续续……那么有人知道为什么会发生这种情况吗?
【问题讨论】:
-
你试过玩
PLAYER_CAPACITY吗?我相信您应该使用getMinBufferSize()来获得正确的值,如下所示:developer.android.com/reference/android/media/AudioTrack.html -
我已经尝试过了...但是我从网络获得的数据通常小于我(当前)从 getMinBufferSize 在此设备上获得的 4096。将其设置为 buffersize
-
我再次查看了这个,在我的情况下,波动是由于大量的数据包丢失/重新传输。在一些资源有限的系统(如 Android)中,程序必须足够快地处理每个单独的 UDP 数据包,以防止数据包丢失。