首页 理论教育 如何播放音频文件?

如何播放音频文件?

时间:2023-06-23 理论教育 版权反馈
【摘要】:如表17.2.3所示:表17.2.3AVAudioSession的category属性值category属性的默认值是AVAudioSessionCategorySoloAmbient。应用只用于播放音频时,设置为AVAudioSessionCategoryPlayback,这个属性会在AVAudioSession设置为active状态时生效。接着在Main.storyboard中增加一个播放按钮,如图17.2.1所示:图17.2.1添加播放按钮并且将按钮关联到View Controller中的action中。代码如下:动手写17.2.2 AudioPractise-> ViewController.swift这里使用系统提供的AudioServicesPlaySystemSound方法去播放系统声音。苹果在系统中设置了1000~2000的音频,有些可能为空,我们可以尝试修改这个参数去播放不同的内置音频。

如何播放音频文件?

AVFoundation的AVAudioSession类提供了应用程序接口进行一些通用的音频操作,主要是设置音频可以播放的时机、处理音频中断以及获取硬件信息。在播放音频之前,需要使用AVAudioSession类的单例进行一些前期设置。默认情况下,AVAudioSession的配置如下:

◇ 当用户将手机调至静音时,如果此时应用播放音频则会被静音并且暂停。

◇ 当用户将手机锁屏或者系统自动锁屏时,如果此时应用播放音频则会被静音并且暂停。

◇ 当用户使用当前应用开始播放音频,如果此时有其他应用播放音频则会被静音并且暂停。

AVAudioSession提供了一个category的读写属性,这个属性用于控制当应用遇到这些中断事件之后如果进行处理能够设置的值。如表17.2.3所示:

表17.2.3 AVAudioSession的category属性值

category属性的默认值是AVAudioSessionCategorySoloAmbient。应用只用于播放音频时,设置为AVAudioSessionCategoryPlayback,这个属性会在AVAudioSession设置为active状态时生效。

创建AudioPractise项目,在appDelegate中设置AVAudioSession,代码如下:

动手写17.2.1 AudioPractise-> AppDelegate.swift

需要注意的是,这里的set()方法都是会抛出错误的,需要使用do-catch语句去处理。接着在Main.storyboard中增加一个播放按钮,如图17.2.1所示:

图17.2.1 添加播放按钮

并且将按钮关联到View Controller中的action中。代码如下:(www.xing528.com)

动手写17.2.2 AudioPractise-> ViewController.swift

这里使用系统提供的AudioServicesPlaySystemSound方法去播放系统声音。这些音频都是iOS系统内置的,传入的参数是一个SystemSoundID类型,实际是UInt32类型。苹果在系统中设置了1000~2000的音频,有些可能为空,我们可以尝试修改这个参数去播放不同的内置音频。运行模拟器,点击播放按钮,便会听到系统中自带的声音。

除此之外,播放音频还可以使用AVAudioPlayer类,这个类提供了一个init(contentsOf:)方法去创建一个音频播放器,但需要传入一个URL类的实例作为参数。这个url参数可以是网络上的路径,也可以是本地文件的路径,取决于播放资源的位置。初始化完成之后,可以调用play()、pause()或stop()等方法进行音频资源的播放。我们可以将自己的音频文件添加到项目中,在弹出选择框时,按图17.2.2所示进行勾选:

图17.2.2 添加文件到项目选项

接着在工程文件配置中将音频文件加入到“Copy Bundle Resources”中,如图17.2.3所示,本例添加了一个“sound.m4a”文件:

图17.2.3 在项目中添加Copy Bundle Resources

在View Controller中的播放action增加播放音频的功能,代码如下:

动手写17.2.3 AudioPractise-> ViewController.swift

通过Bundle获取到工程中的文件路径,创建一个AVAudioPlayer实例,并且赋值给View Controller的属性player,最终播放。这里设置了循环播放一次,也就是点击一次播放会进行两次播放,读者也可以尝试不同的循环次数设置。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈