gpt4 book ai didi

android - 音轨 : Playing sound coming in over WiFi

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:03:04 25 4
gpt4 key购买 nike

我的应用程序中有一个 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, 0, audio.length);

每当通过网络连接接收到数据包时都会生成。有人知道为什么它听起来很不稳定吗?也许它与WiFi连接本身有关?我不这么认为,因为当我通过 UDP 从 Android 手机向另一个来源发送数据时,声音听起来并不可怕。然后声音听起来完整而且一点也不起伏...那么有人知道为什么会这样吗?

最佳答案

您知道每秒接收多少字节、数据包之间的平均时间比较以及数据包之间的最长时间吗?如果不是,你可以添加代码来计算它吗?

您需要平均 8000 个样本/秒 * 2 字节/样本 = 16,000 字节/秒才能保持流充满。

传入数据包之间的间隔超过 2048 字节/(16000 字节/秒)= 128 毫秒 将导致您的流干涸并且音频断断续续。

防止它的一种方法是增加 缓冲区大小 (PLAYER_CAPACITY)。较大的缓冲区将更能够处理传入数据包大小和速率的变化。额外稳定性的代价是在等待缓冲区最初填满时开始播放的延迟更大。

关于android - 音轨 : Playing sound coming in over WiFi,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5297923/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com