gpt4 book ai didi

android - opensl 中的音频播放器可以输出到两个数据接收器吗?

转载 作者:行者123 更新时间:2023-11-29 00:32:45 37 4
gpt4 key购买 nike

有没有办法让音频播放器输出到两个数据接收器?

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

最佳答案

答案是否定的,但有办法解决这个问题。

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

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

一切设置完成后,我暂停第一个音频播放器 (uriPlayer),它开始“下载”并将数据流式传输到缓冲区。当 uriPlayer 的预取说有足够的数据时,我检查 uriPlayer 的“持续时间”以找出歌曲的长度,然后我创建一个足够大的缓冲区来根据持续时间和样本保存来自 uriPlayer 的 pcm 数据速率(和输出 channel ,立体声为 2,单声道为 1)。

我将这个缓冲区排入 uriPlayers 接收器缓冲区队列,然后将 uriPlayers 状态设置为播放,因此它开始将所有数据加载到其缓冲区队列中的缓冲区中。

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

只要 uriPlayer 下载音乐文件内容的速度快于音乐播放器从缓冲区播放的速度,只需通过从 uriPlayer 调用 getPosition 来找出歌曲当前流式传输的位置以及它是否“领先于” musicPlayer 当前正在播放的位置,一切正常!如果下载速度变慢或太慢,只要在 uriPlayer 之前暂停 musicPlayer。

关于android - opensl 中的音频播放器可以输出到两个数据接收器吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14394457/

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