在Swift 3中创建音乐播放器应用
在此博客中,我将逐步创建一个音乐播放器应用程序,以播放我最喜欢的歌曲之一:Purple Rain☔️。 在此应用程序中,我们将使用AVFoundation,这是一个Apple框架,可让我们记录/播放/编辑照片,视频和音频。
步骤1:建立使用者介面
对于我的UI,在Storyboard中 ,我拖动了一个带有三个按钮的工具栏 。 在Attributes Inspector中 ,我使用PLAY按钮,PAUSE按钮将按钮更改为Systems Items ,并在最后一个按钮上键入“ Restart”。
我还确保在三个按钮之间分别拖动了弹性空格键按钮项 。
步骤2:为这些按钮创建IBAction。
按住Control键,将故事板中的3个按钮分别拖到ViewController文件中。
确保每个连接都是一个动作 ,而不是一个插座 。
步骤3:选择歌曲!
我已经从iTunes下载了《 Purple Rain》这首歌,因此将其从iTunes拖到“项目导航器”窗格中(位于Main.storyboard下方 )文件中。 如果需要,复制项目。
当它出现在“导航器”窗格中时,我将其重命名为简单的名称,例如PurpleRain。 文件类型为.m4a 。 请勿将其更改为mp3。 当我尝试将其更改为mp3时,发生了坏事。
步骤4和5:导入AVFoundation并创建一个AVAudioPlayer。
就像我之前提到的,AVFoundation是Apple的框架,允许您播放/编辑/创建视频/照片/音频。 从Apple文档中:
AV Foundation框架提供了一个Objective-C界面,用于在iOS和macOS应用程序中管理和播放视听媒体。
我们在顶部导入此框架,并创建一个AVAudioPlayer
类的实例,该类正是这样做的,它播放文件中的音频。
第6步:编写一个函数来设置我们的歌曲和会话。
从Apple文档中:
音频会话用于与系统交流您打算如何在应用程序中使用音频。 音频会话充当您的应用程序与操作系统之间的中介,进而充当基础音频硬件之间的中介。
我编写了一个函数prepareSongAndSession()来处理此功能:
步骤7–13:设置我们的AVAudioPlayer和AVAudioSession。
由于我是从iTunes手动将Purple Rain歌曲拖到项目中的,所以现在它已成为项目Bundle的一部分。
#7 —我将歌曲(来自捆绑包)插入我的AVAudioPlayer中 。 我用“!”来敲它,因为我确定这首歌存在于项目中。 此操作将引发错误,因此将执行do / try / catch块。
转到“ 构建阶段/复制捆绑包”资源 ,以确保您的音乐文件存储在此处。 如果不是,请将其从“导航器”窗格拖动到“ 副本捆绑资源”文件夹中。
#8 —我在songPlayer上调用prepareToPlay()方法。
#9 —我创建了一个AVAudioSession ,它向系统传达我将如何使用它(玩王子!)
#10 —将我们的audioSession的类别设置为AVAudioSessionCategoryPlayback ,这是播放录制的音乐所需的类别。 此操作会引发错误,因此会执行do / try / catch块。
#11&12 —每个catch块的打印/处理错误。
#13 —在viewDidLoad()中调用此函数。
步骤14:在我们的songPlayer上调用.play()方法。
步骤15和16:处理暂停功能。
#15 —我创建了一个布尔值hasBeenPaused,其默认值为false,它将管理暂停功能的状态。
#16 —在我的pause()函数中,如果songPlayer当前正在播放,则我暂停songPlayer并将hasBeenPaused布尔值更改为true。
步骤17:处理重启功能。
我检查我的songPlayer是否正在播放,或者是否已暂停并停止songPlayer。 我将songPlayer重置为当前时间零,然后继续播放。
生成并运行。
您可以在这里找到该项目的仓库。
资源:
AVAudioPlayer — Apple文档
AVAudioSession — Apple文档
- 使用AVMutableVideoComposition导出时的video方向问题
- CALayer – 放置在storyboard UIButton下面的子图层?
- CMSampleBufferSetDataBufferFromAudioBufferList返回错误12731
- AVAssetExportSession – 在IOS中join2个mp4文件
- 为什么AVAssetImageGenerator generateCGImagesAsynchronouslyForTimes崩溃了应用程序
- 如何捕捉图像,而不显示在iOS预览
- 获取缩略图的video快照
- iOS 9:AVFoundation导出会话缺lessaudio
- 用AVPlayer播放AVMutableComposition?