有没有办法让音频播放器输出到两个数据接收器?
更具体地说,我正在尝试使用音频播放器将 mp3 从网络流式传输到缓冲区和输出混合,并将数据源设置为 uri。现在我将音频播放器的接收器设置为仅输出混合,因此我可以流式传输此文件并在预取表示有足够数据时播放它,但我也想同时将此流式数据放入缓冲区中时间。
最佳答案
答案是否定的,但有一种方法可以解决这个问题。
我没有意识到,当您创建一个音频播放器并输出到一个缓冲区队列,以及一个作为 uri 的接收器时,它会像获取数据一样快地播放到缓冲区。
因此,当我意识到发生了这种情况时,我创建了另一个音频播放器,它有一个缓冲区队列作为源,输出混合作为接收器。
一切设置完毕后,我暂停第一个音频播放器 (uriPlayer),它开始“下载”并将数据流式传输到缓冲区。当 uriPlayer 的预取表示有足够的数据时,我检查 uriPlayer 的“持续时间”以找出歌曲的长度,然后我创建一个足够大的缓冲区,以根据持续时间和样本保存来自 uriPlayer 的 pcm 数据速率(和输出 channel ,立体声为 2 个,单声道为 1 个)。
我将此缓冲区放入 uriPlayers 接收缓冲区队列中,然后将 uriPlayers 状态设置为 Play,因此它开始将所有数据加载到其缓冲区队列中的缓冲区中。
然后,我将同一个缓冲区排入第二个播放器 (musicPlayer) 源缓冲区,并将其状态设置为 Play,这将开始在其缓冲区队列中播放该缓冲区。
只要 uriPlayer 下载音乐文件内容的速度比音乐播放器从缓冲区播放的速度快,只需从 uriPlayer 调用 getPosition 即可找出歌曲当前正在播放的位置以及是否“领先” musicPlayer 当前正在播放的位置,一切正常!如果下载速度变慢或太慢,只需暂停 musicPlayer(如果它领先于 uriPlayer)。
关于android - opensl中的音频播放器可以输出到两个数据接收器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14394457/