播放流类型由StreamUsage定义,用于描述播放音频的用途。系统会根据播放流类型管理音量、音频焦点和输出设备,并结合音频流参数选择音频通路。为了使音频行为符合预期,应用应根据实际播放场景选择合适的StreamUsage。
| 音频流使用类型(StreamUsage) | 适用场景 |
|---|---|
| STREAM_USAGE_MUSIC10+ | 适用于大部分媒体场景,主要用于播放音乐,与其他流类型都不适用的场景,如使用SoundPool播放短音频(ArkTS)等。 |
| STREAM_USAGE_MOVIE10+ | 适用于播放短视频、电影、电视剧等各类视频内容。 |
| STREAM_USAGE_AUDIOBOOK10+ | 适用于播放有声读物、新闻、播客等。 |
| STREAM_USAGE_GAME10+ | 适用于游戏内配乐、配音,后台音乐不会被打断;游戏内语音,建议使用STREAM_USAGE_VOICE_COMMUNICATION。 |
| STREAM_USAGE_NAVIGATION10+ | 适用于导航场景的语音播报功能。 |
| STREAM_USAGE_VOICE_MESSAGE10+ | 适用于播放语音短消息。 |
| STREAM_USAGE_VOICE_COMMUNICATION7+ | 适用于VoIP语音通话,以及游戏内实时语音聊天等双向通话场景。 |
| STREAM_USAGE_ALARM10+ | 适用于播放闹铃。 |
| STREAM_USAGE_RINGTONE10+ | 适用于VoIP来电响铃等。 |
| STREAM_USAGE_NOTIFICATION10+ | 适用于播放通知音、提示音。 |
播放流类型决定了音频流所属的音量类型(AudioVolumeType)。各类音量类型(如媒体、铃声、闹钟、通话等)拥有独立的音量值,在用户界面上可独立调节,相互之间不会影响。
常见的播放流类型与音量类型的对应关系为:
| 音频流使用类型(StreamUsage) | 音量类型(AudioVolumeType) |
|---|---|
| MUSIC、MOVIE、AUDIOBOOK、GAME | 媒体音量(MEDIA) |
| RINGTONE、NOTIFICATION | 铃声音量(RINGTONE) |
| VOICE_COMMUNICATION | 通话音量(VOICE_CALL) |
| ALARM | 闹钟音量(ALARM) |
系统预设了默认的音频焦点策略,根据播放流类型和音频流启动顺序进行焦点决策。以下为使用默认音频焦点策略时的常见场景;如果应用通过AudioSession自定义焦点策略,实际行为以AudioSession配置为准。
系统会根据播放流类型选择相应的输出设备。常见场景如下:
当默认输出设备不符合使用诉求,应用使用AudioRenderer开发音频播放功能(ArkTS)时,可以调用setDefaultOutputDevice设置默认发声设备。
应用可采用多种方式实现音频播放,不同场景下设置播放流类型的方法如下:
音频通路是音频数据在系统内部的传输和处理路径。系统通过StreamUsage获取播放场景信息,并结合采样率、声道数、编码格式等参数选择合适的音频通路。常见播放通路如下:
| 音频通路类型 | 特征 | 适用场景 |
|---|---|---|
| 低时延播放通路 | 通过缩短缓冲和最小化音效算法降低时延。 | 游戏音效、K歌耳返、乐器演奏等对延迟敏感的场景。 |
| 多声道播放通路 | 支持多声道数据输出,避免将多声道下混为双声道或单声道。 | 多声道播放场景。 |
| 直通播放通路 | 音频数据在播放链路中不会改变音源格式,直接送到硬件输出。 | 播放高质量无损音乐、Hi-Fi音频等。 |
| 低功耗播放通路 | 通过大缓存减少与硬件交互,以降低功耗。 | 长时间播放音乐、有声读物等。 |
| 普通播放通路 | 通用通路,按当前设备默认音频格式输出。 | 视频播放、通知音、导航等。 |
应用可以通过AudioStreamManager提供的查询接口,在创建音频流之前判断设备是否支持特定播放通路。
| 接口 | 说明 |
|---|---|
| isFastPlaybackSupported | 查询是否支持低时延播放。 起始版本:26.0.0 |
| isMultichannelPlaybackSupported | 查询是否支持多声道播放。 起始版本:26.0.0 |
| isDirectPlaybackSupported | 查询是否支持直通播放。 起始版本:26.0.0 |
| isOffloadPlaybackSupported | 查询是否支持低功耗播放。 起始版本:26.0.0 |