【发布时间】:2018-07-13 06:50:26
【问题描述】:
我目前正在尝试使用 AudioTrack 播放音频。音频通过网络接收,应用程序不断读取数据并添加到内部缓冲区。一个单独的线程正在使用数据并使用 AudioTrack 进行播放。
问题:
- 音频播放不断波动(感觉像音频定期下降),使其不清楚。
- 播放速度太高或太低,不切实际。
为了避免网络延迟和其他因素,我让应用程序等待它读取足够的数据并在最后播放。
这使得音频播放得非常快。这是我使用的一个基本逻辑示例。
sampleRate = AudioTrack.getNativeOutputSampleRate(AudioManager.STREAM_MUSIC);
audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, sampleRate,
AudioFormat.CHANNEL_OUT_STEREO,
AudioFormat.ENCODING_PCM_16BIT,
AudioTrack.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT),
AudioTrack.MODE_STREAM);
audioTrack.play();
short shortBuffer[] = new short[AudioTrack.getMinBufferSize(sampleRate, AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT)];
while (!stopRequested){
readData(shortBuffer);
audioTrack.write(shortBuffer, 0, shortBuffer.length, AudioTrack.WRITE_BLOCKING);
}
说Android AudiTrack 类没有内置功能来根据环境条件控制音频播放是否正确?如果是这样,是否有更好的库可用于简化音频播放?
【问题讨论】:
-
从 AudioTrack.getNativeOutputSampleRate() 方法检索采样率(问题已更新)。我尝试将采样率设置为不同的值,但都没有奏效。
-
在你把信号写出来之前,你根本没有对信号做任何 DSP?
标签: android streaming audiotrack