本文转载自:https://www.swiftmi.com/topic/133.html
AVAudioSession
类由AVFoundation
框架引入,AVAudioSession是一个单例模式,也就是说,不用开发者自行实例化.每个IOS应用都有一个音频会话。这个会话可以被AVAudioSession
类的sharedInstance
类方法访问,如下:
import AVFoundation
var audioSession = AVAudioSession.sharedInstance()
在获得AVAudioSession类的实例后,你就能通过调用音频会话对象的setCategory:error:
实例方法,来从IOS应用可用的不同类别中作出选择。下面列出了可供使用的音频会话类别:
###AVAudioSessionCategoryAmbient
后台播放类型,会和其它音乐混合的音频类型。这个类别用于音频比较次要的应用,应用的音频会和其他应用的音频实现混音,关闭屏幕或者静音开关打开时音频将静音.
###AVAudioSessionCategorySoloAmbient
后台播放类型,其它音乐会停止播放, 默认类别。这个类别非常像AVAudioSessionCategoryAmbient
类别,除了会停止其他程序的音频回放。
###AVAudioSessionCategoryPlayback
这个类别会静止其他应用的音频回放。你可以使用AVAudioPlayer
的prepareToPlay
和play
方法,在你的应用中播放声音。主UI界面会照常工作。这时,即使屏幕被锁定或者设备为静音模式,音频回放都会继续。
###AVAudioSessionCategoryRecord
录音时使用。这会停止其他应用的声音并让你的应用也不能初始化音频回放(比如AVAudioPlayer
)。在这种模式下,你只能进行录音。使用这个类别,调用AVAudioPlayer的prepareToPlay
会返回true
,但是调用play方法将返回false
。主UI界面会照常工作。这时,即使你的设备屏幕被用户锁定了,应用的录音仍会继续。
###AVAudioSessionCategoryPlayAndRecord
录音并需要播放时使用。这个类别允许你的应用中同时进行声音的播放和录制。当你的声音录制或播放开始后,其他应用的声音播放将会停止。主UI界面会照常工作。这时,即使屏幕被锁定或者设备为静音模式,音频回放和录制都会继续。
###AVAudioSessionCategoryAudioProcessing
这个类别用于音频处理,比如编码解码时/不播放音频/未录音时使用。设置了这种模式,你在应用中就不能播放和录制任何声音。调用AVAPlayer
的prepareToPlay
和play
方法都将返回false
。其他应用的音频也会在此模式下停止。
###AVAudioSessionCategoryMultiRoute
这个类别可以实现同时可以有多种输出,例如:usb和耳机同时输出,但并非所有输入输出方式均支持.输入方式仅包括:AVAudioSessionPortUSBAudio/AVAudioSessionPortHeadsetMic AVAudioSessionPortBuiltInMic
;输出仅包括:AVAudioSessionPortUSBAudio /AVAudioSessionPortLineOut /AVAudioSessionPortHeadphones /AVAudioSessionPortHDMI AVAudioSessionPortBuiltInSpeaker
详细说明见官网文档:Audio Session Categories