音频会话
通过 SharedAudioSession,你可以在脚本中方便地管理和操作共享音频会话(audio session)。音频会话充当脚本、Scripting 应用、操作系统和底层音频硬件之间的中介,允许你有效地配置和控制音频的行为。
功能简介
- 获取和设置音频会话的类别(category)、模式(mode)和选项(options)。
- 配置音频输入和输出的首选采样率(sample rate)。
- 处理音频中断事件。
- 查询设备所支持的类别和模式。
- 根据具体的应用场景(如视频录制、语音聊天、后台播放等)来定制音频行为。
方法和属性
1. 会话类别与选项
category
获取当前音频会话的类别(Category)。
categoryOptions
获取当前音频会话类别的选项(Options)。
setCategory(category: AudioSessionCategory, options: AudioSessionCategoryOptions[])
设置音频会话的类别并指定其选项。
2. 会话模式
mode
获取当前音频会话模式(Mode)。
setMode(mode: AudioSessionMode)
设置音频会话模式。
3. 采样率 (Sample Rate)
preferredSampleRate
获取当前首选采样率(单位为 Hz)。
setPreferredSampleRate(sampleRate: number)
设置音频输入和输出的首选采样率。
4. 音频中断处理
addInterruptionListener(listener: AudioSessionInterruptionListener)
监听音频中断事件。
removeInterruptionListener(listener: AudioSessionInterruptionListener)
移除音频中断监听器。
5. 设备功能查询
availableCategories
获取设备上可用的音频会话类别列表。
availableModes
获取设备上可用的音频会话模式列表。
6. 其他属性
isOtherAudioPlaying
检查设备上是否有其他音频正在播放。
secondaryAudioShouldBeSilencedHint
检查次要音频是否应该被静音。
allowHapticsAndSystemSoundsDuringRecording
检查录音期间是否允许触觉反馈和系统声音。
prefersNoInterruptionsFromSystemAlerts
检查音频会话是否偏好不被系统警报打断。
7. 会话激活
setActive(active: boolean, options?: AudioSessionSetActiveOptions[])
激活或停用共享音频会话,可指定激活选项。
8. 系统设置
setAllowHapticsAndSystemSoundsDuringRecording(value: boolean)
启用或禁用在录音期间允许触觉反馈和系统声音。
setPrefersNoInterruptionsFromSystemAlerts(value: boolean)
设置是否偏好不被系统警报打断。
9. 音频路由(Audio Routing)
iOS 把音频输入和输出当作两条独立的路径管理。以下 API 让你列出当前可选的输入端口、强制把
录音输入切到指定端口(通常是 builtInMic),或者把输出强制到设备扬声器。这在你希望「设备
内置麦克风录音 + 无线耳机播放」时尤其有用——可以避开蓝牙 HFP 双向链路带来的麦克风音质降级。
setPreferredInput与overrideOutputAudioPort必须在会话激活后才能生效,请先调用setActive(true)。
availableInputs
返回当前会话允许的输入端口列表。蓝牙、USB、有线耳机麦克风需要在 category options 中允许
对应的传输(例如 allowBluetoothHFP)才会出现。
currentRoute
返回当前选中的输入和输出端口。
setPreferredInput(input: AudioSessionPort | null)
指定首选输入端口;传 null 清除偏好。参数会先按 uid 与 availableInputs 精确匹配,再退化
到 portType 匹配。会话未激活时会以 Cannot setPreferredInput before setActive(true). 报错。
overrideOutputAudioPort(port: 'speaker' | 'none')
把输出强制到设备扬声器,或者取消强制。与输入选择互不干扰。
setPrefersBuiltInMicWhenAvailable(enabled: boolean)
打开一个进程内开关:开启后,SDK 会监听音频路由变化,每当 builtInMic 可用时自动把输入切回
内置麦克风——即使期间插入了蓝牙耳机、USB 麦克风或有线耳机麦克风。输出路由不被改动,因此
你可以保持「内置麦录入、无线耳机(A2DP)播放」的分离 I/O。
开关不会持久化到下次启动,但在宿主进程存活期间会影响所有运行中的脚本。如果某个脚本
之后又主动调用 setPreferredInput(reason 为 override),开关不会再把它改回 builtInMic。
启用开关时会立即尝试应用一次,不需要等待下一次路由变化。
路由变化事件
reason 取值之一:'newDeviceAvailable' | 'oldDeviceUnavailable' | 'categoryChange' | 'override' | 'wakeFromSleep' | 'noSuitableRouteForCategory' | 'routeConfigurationChange' | 'unknown'。
10. 系统输出音量
outputVolume: number
获取当前系统输出音量(范围为 0 到 1)。
outputVolume 监听事件
类型类型
addOutputVolumeListener(listener: AudioSessionOutputVolumeListener): void
添加系统输出音量监听器。
removeOutputVolumeListener(listener: AudioSessionOutputVolumeListener): void
移除系统输出音量监听器。
枚举(Enumerations)
AudioSessionSetActiveOptions
定义激活选项:
'notifyOthersOnDeactivation'
AudioSessionCategory
定义音频会话的类别:
'ambient''multiRoute''playAndRecord''playback''record''soloAmbient'
AudioSessionCategoryOptions
定义类别的可选行为:
'mixWithOthers''duckOthers''interruptSpokenAudioAndMixWithOthers''allowBluetooth''allowBluetoothA2DP''allowAirPlay''defaultToSpeaker''overrideMutedMicrophoneInterruption'
AudioSessionMode
指定会话模式:
'default''gameChat''measurement''moviePlayback''spokenAudio''videoChat''videoRecording''voiceChat''voicePrompt'
AudioSessionInterruptionType
指定中断类型:
'began''ended''unknown'
通过此接口,你可以在 Scripting 应用中对音频会话进行深度管理,非常适合构建对音频依赖较高的脚本,如音乐播放器和视频会议工具等。
