Android opensl中的音频播放器能否输出到两个数据接收器?

Android opensl中的音频播放器能否输出到两个数据接收器?,android,audio,android-ndk,opensl,Android,Audio,Android Ndk,Opensl,音频播放器是否有办法输出到两个数据接收器 更具体地说,我正在尝试使用音频播放器将mp3从网络流式传输到缓冲区和输出混合区,数据源设置为uri。现在我将音频播放器的接收器设置为仅输出混音,因此我可以流式传输此文件,并在预回迁显示有足够数据时播放它,但我也想同时将流式传输的数据放入缓冲区。答案是否,但有一种解决方法 我没有意识到,当您创建一个音频播放器并将其输出到缓冲区队列,并将接收器作为uri时,它会以获取数据的速度播放到缓冲区 所以当我意识到这是正在发生的事情时,我创建了另一个音频播放器,它有一

音频播放器是否有办法输出到两个数据接收器


更具体地说,我正在尝试使用音频播放器将mp3从网络流式传输到缓冲区和输出混合区,数据源设置为uri。现在我将音频播放器的接收器设置为仅输出混音,因此我可以流式传输此文件,并在预回迁显示有足够数据时播放它,但我也想同时将流式传输的数据放入缓冲区。

答案是否,但有一种解决方法

我没有意识到,当您创建一个音频播放器并将其输出到缓冲区队列,并将接收器作为uri时,它会以获取数据的速度播放到缓冲区

所以当我意识到这是正在发生的事情时,我创建了另一个音频播放器,它有一个缓冲队列作为源,输出混音作为接收器

在一切都设置好之后,我暂停第一个音频播放器(uriPlayer),它开始“下载”并将数据流到缓冲区。当uriPlayer的预回迁显示有足够的数据时,我检查uriPlayer的“持续时间”以确定歌曲的长度,然后根据持续时间和采样率(以及输出通道,立体声为2,单声道为1)创建一个足够大的缓冲区来保存uriPlayer的pcm数据

我将此缓冲区排队到uriPlayers接收器缓冲区队列中,然后将uriPlayers状态设置为Play,以便它开始将所有数据加载到其缓冲区队列中的缓冲区中

然后,我将这个相同的缓冲区放入第二个播放器(MusicLayer)源缓冲区,并将其状态设置为Play,这将开始在其缓冲区队列中播放缓冲区

只要uriPlayer下载音乐文件的速度比音乐播放器从缓冲区播放的速度快,只需从uriPlayer调用getPosition,找出歌曲中当前的流媒体位置,以及musicPlayer当前播放位置的“前”位置,一切都能完美运行!如果下载速度减慢或太慢,只要暂停musicPlayer,如果它超过了uriPlayer