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