播放歌曲列表并无限循环

在此家庭教师中,您将播放mp3歌曲列表并无限循环。 在开始之前,您可以在此处下载完整的源代码项目,而不带歌曲,以防万一您停在任何地方。

要播放歌曲列表,可以使用AVQueuePlayer,但它不支持循环,并且将循环功能添加到其中很复杂。 因此,我们将不使用它,而是手动进行。

我们将执行的步骤:

  1. 创建一个歌曲包。
  2. 从捆绑中加载歌曲并将其转换为AVPlayerItem
  3. 播放第一首歌。
  4. 播放下一首歌。
  5. 修复错误:第一次播放后,第一首歌曲无法再次播放。

1.创建一个歌曲包

首先,您需要创建一个包含歌曲的捆绑包。 创建捆绑包可帮助您将捆绑包中的所有文件都不需要知道它们的名称。

如果您不了解Bundle,请阅读以下文章:

存储在磁盘上捆绑目录中的代码和资源的表示。

请参阅以下步骤以了解如何创建捆绑包:

  1. 在项目文件夹中创建一个扩展名为.bundle的新文件夹(例如: Songs.bundle )。
  2. 将声音文件复制到该新文件夹中。
  3. 将该新文件夹拖动到在Xcode中打开的项目中。
  4. 通过使用Bundle类的urls(forResourcesWithExtension:subdirectory:)方法检索URL

您可以观看我制作的该视频,以防无法创建。

2.从捆绑中加载歌曲并将其转换为AVPlayerItems

为了能够播放歌曲,您需要加载声音文件并将其转换为AVPlayerItems,以便AVPlayer可以播放它。

如果您不了解AVPlayerItem,请阅读以下文章:
AVPlayerItem
用于模拟玩家所玩资产的时间和呈现状态的对象。

将以下代码片段添加到您的视图控制器中,然后从viewDidLoad()方法调用它:

运行该应用程序并查看日志以查看文件名已加载。

3.播放第一首歌

要播放歌曲,您需要使用AVPlayer类。 如果您不了解,请阅读以下文章:

AVPlayer
提供界面以控制玩家的运输行为的对象。

将以下代码片段添加到您的视图控制器中以播放歌曲:

现在运行该应用程序,您将听到声音已经发出🙂

播放下一首歌

第一首歌曲播放完毕后,播放器将不会继续播放下一首歌曲。 所以我们会做。

首先,您需要在播放器项目结束播放时注册通知。 您将loadSongListIntoPlayerItems()方法更新如下:

添加用于接收通知的方法,并使用replaceCurrentItem(with:)方法播放下一首歌曲:

运行该应用程序,您将看到该应用程序可以播放下一首歌曲。 那很棒。 但是在播放完最后一首歌曲并再次播放第一首歌曲之后,就没有声音发出了。 这是为什么? 请查看下一个指南。

修复错误:首次播放后,第一首歌曲无法再次播放。

B / c AVPlayerItem是一个动态对象,它存储其当前播放位置。 不像AVAsset是静态对象,它仅存储媒体的表示并且不能更改。 下次播放时,它将继续在当前位置播放。 在这种情况下,第一个播放器项目在结束位置播放,当您再次播放它时,它将在结束位置播放,因此您将听不到任何声音。 因此,让它在开始位置播放,您需要使用seek(to:completionHandler:)方法将其搜索到开始位置。 您将如下更新playerItemDidFinishPlaying(sender: Notification)方法:

就这些。 您可以在此处下载没有歌曲的完整源代码项目。