使iOS Audio Player变得简单

因为互联网上的点点滴滴令人费解!


任务:创建没有外部库的音频播放器(差不多)

我搜寻了已知的google空间的长度,以查找有关使用Swift和基本功能制作音频播放器的所有可用信息。 简单吧? 事实证明……不多。

大多数StackOverflow(从现在开始为SO)处理过程的一部分,通常分为Obj-C,Swift-2,Swift-3和一小部分Swift-4。 文章还受Swift版本控制的困扰,或者缺少它,并且完全用Obj-C编写。 插件和库也已过时,用Obj-C编写或未维护。

第一个子任务:创建一个AudioQueue并播放一个曲目。

因此,我们开始使用AVFramework创建一个简单的AudioQueue

主要故事任务:建立一个AudioPlayer类

为了做到这一点,我们首先需要做两件事。 如我们所见,为了将项目添加到AVQueuePlayer我们必须将它们转换为AVPlayerItem并且要做到这一点,我们必须首先将它们转换为AVAsset 。 但是这里有个问题, AVAsset在定义AVAsset开始加载,这意味着我们不想立即添加它,因为它AVAsset无法播放,我们需要先加载它,然后将其添加到AVQueuePlayer

这里还有第二个陷阱,如果我们按照上面描述的路径进行操作,我们会将异步功能添加到队列中,并且很可能肯定不会以我们希望它们添加的顺序添加内容。

我们做什么? 抢救同步队列! 完成加载后,曲目将被一一添加。

循环每个.mp3 url->使它成为队列中的资产->加载资产(异步)时->将其转换为AVPlayerItem->队列继续下一个.mp3 url

那么什么时候知道所有物品都准备好了呢? 很简单(不是,但是确实如此)

在上面的代码中,我们缺少AVItemPool参考。 这里是:

如果您有任何疑问或更正,请在评论中打上我一行,希望对您有用。

请享用!