gpt4 book ai didi

android - 整个播放期间,Android AudioTrack写入 block

转载 作者:行者123 更新时间:2023-12-03 01:52:44 24 4
gpt4 key购买 nike

我正在使用AudioTrack类播放原始声音数据流:

AudioTrack audioTrack;
int sampleRate = 11025;
int channelConfigIn = AudioFormat.CHANNEL_IN_MONO;
int channelConfigOut = AudioFormat.CHANNEL_OUT_STEREO;
int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
.....
int bufferSize = AudioTrack.getMinBufferSize(sampleRate,channelConfigOut,audioFormat);
audioTrack = new AudioTrack(AudioManager.STREAM_VOICE_CALL,sampleRate,channelConfigOut,audioFormat,bufferSize,AudioTrack.MODE_STREAM);
audioTrack.play();

然后在单独的线程上:
while(true)
{
short [] buffer = new short[14500];
//fill buffer with sound data
long time = System.currentTimeMillis();
audioTrack.write(buffer,0,14500);
Log.i("time",(System.currentTimeMillis() - time) + "");
}

我的问题是,日志始终显示 write方法阻塞大约0.6秒,这与播放的声音长度(14500个样本)相同,而且手机在播放期间没有响应,主踏板几乎无法执行任何操作任何人都可以帮助...

最佳答案

您正在使用write()方法的阻止版本。您可以改为使用write(float[],int,int,int),将WRITE_NON_BLOCKING作为第4个参数传递,但这只会写入播放缓冲区中可容纳的尽可能多的数据。我通常更喜欢您已经拥有的方法(专用于编写线程)。您应该期望每个调用都会阻塞;毕竟,播放缓冲区只能容纳这么多的数据,并且要腾出更多空间,必须播放声音(这需要时间)。在您选择的采样率下,14500个样本的声音约为1.3秒,因此我想每次填充buffer大约需要0.7秒。

根据提供的代码,我无法确定您的UI线程为什么没有响应。

关于android - 整个播放期间,Android AudioTrack写入 block ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38291469/

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