首页 > 解决方案 > 我可以在双簧管中添加和/或替换音频源而不重新启动音频流吗?

问题描述

我需要即时提取音频资产并将它们加载到时间线中进行播放。

我还需要渲染不同长度的资产文件,但我有一个想法,我明天要尝试一下,我认为如果有人有任何提示会很棒的话。

我一直在玩双簧管 RhythmGame代码,这是双簧管样本中最接近我想要做的事情。但是当我尝试动态添加或更改音频源时,它并不高兴。

这是双簧管可以做的事情,还是我必须为每组新文件循环打开和关闭音频流?

标签: c++audioandroid-ndkoboe

解决方案


您提出的建议绝对可以在不需要重新启动音频流的情况下完成。音频流只会在每个回调中请求 PCM 数据。提供 PCM 数据是您的应用程序的工作。

在 RhythmGame 示例中,压缩的音频文件使用该DataSource对象解码到内存中。然后该Player对象包装它DataSource以通过set方法控制播放。

如果您需要从时间线中的文件播放音频数据,我将创建一个新的 Timeline 类,该类从DataSources 复制音频数据的相关部分并将它们按顺序放置到缓冲区中。然后,您的音频流可以在每次回调时直接从该缓冲区读取。


推荐阅读