1# 使用合适的音频流类型 2 3[音频流](audio-kit-intro.md#音频流介绍)类型是定义音频数据播放和录制方式的关键属性。对于播放流,其类型由[StreamUsage](../../reference/apis-audio-kit/js-apis-audio.md#streamusage)确定;对于录制流,则由[SourceType](../../reference/apis-audio-kit/js-apis-audio.md#sourcetype8)决定。音频流类型对音量控制、音频焦点管理以及输入/输出设备的选择具有决定性影响。 4 5为了确保音频行为符合预期并提供优质的用户体验,应用开发者应根据具体业务场景和实际需求,为音频选择恰当的流类型。 6 7接下来,文档将介绍[常用的音频流类型及其适用场景](#常用的音频流类型及其适用场景),同时说明[不同流类型对音频业务的影响](#流类型对音频业务的影响)。最后,指导开发者在采用不同方法实现音频播放和音频录制时,应当如何[设置音频流类型](#设置音频流类型)。 8 9## 常用的音频流类型及其适用场景 10 11### 播放音频流类型 12 13下表中列举常用的播放音频流类型,由[StreamUsage](../../reference/apis-audio-kit/js-apis-audio.md#streamusage)定义。 14 15| 音频流使用类型(StreamUsage) | 适用场景 | 16| ---------- | ---------- | 17| STREAM_USAGE_MUSIC | 适用于播放音乐,同样适用于其他媒体场景,如[使用SoundPool](../media/using-soundpool-for-playback.md)播放简短音效等。 | 18| STREAM_USAGE_MOVIE | 适用于播放短视频、电影、电视剧等各类视频内容。 | 19| STREAM_USAGE_AUDIOBOOK | 适用于播放有声读物、新闻、播客等。| 20| STREAM_USAGE_GAME | 适用于游戏内配乐、配音,后台音乐不会被打断;游戏内语音,建议使用STREAM_USAGE_VOICE_COMMUNICATION。 | 21| STREAM_USAGE_NAVIGATION | 适用于导航场景的语音播报功能。 | 22| STREAM_USAGE_VOICE_MESSAGE | 适用于播放语音短消息。 | 23| STREAM_USAGE_VOICE_COMMUNICATION | 适用于VoIP语音通话。 | 24| STREAM_USAGE_ALARM | 适用于播放闹铃。 | 25| STREAM_USAGE_RINGTONE | 适用于VoIP来电响铃等。 | 26| STREAM_USAGE_NOTIFICATION | 适用于播放通知音、提示音。 | 27 28### 录制音频流类型 29 30下表中列举常用的录制音频流类型,由[SourceType](../../reference/apis-audio-kit/js-apis-audio.md#sourcetype8)定义。 31 32| 音频流使用类型(StreamUsage) | 适用场景 | 33| ---------- | ---------- | 34| SOURCE_TYPE_MIC | 适用于普通录音。| 35| SOURCE_TYPE_VOICE_COMMUNICATION | 适用于VoIP语音通话。 | 36| SOURCE_TYPE_VOICE_MESSAGE | 适用于录制语音短消息。 | 37 38## 流类型对音频业务的影响 39 40不同的流类型会影响用户在控制音量时的体验,以及系统在调整音频焦点和选择输入/输出设备时的表现。 41 42### 音量控制 43 44播放流类型([StreamUsage](../../reference/apis-audio-kit/js-apis-audio.md#streamusage))决定了音频流所属的音量类型([AudioVolumeType](../../reference/apis-audio-kit/js-apis-audio.md#audiovolumetype)),各类音量类型(如媒体、铃声、闹钟、通话等)拥有独立的音量值,在用户界面上可独立调节,相互之间不会影响。 45 46常见的播放流类型与音量类型的对应关系为: 47 48| 音频流使用类型(StreamUsage) | 音量类型(AudioVolumeType) | 49| ---------- | ---------- | 50| MUSIC、MOVIE、AUDIOBOOK、GAME | 媒体音量(MEDIA) | 51| RINGTONE、NOTIFICATION | 铃声音量(RINGTONE) | 52| VOICE_COMMUNICATION | 通话音量(VOICE_CALL) | 53| ALARM | 闹钟音量(ALARM) | 54 55### 音频焦点调整 56 57音频流类型在音频焦点管理中扮演着关键角色,不同类型的音频流具有不同的默认优先级和处理方式。 58 59当应用启动音频播放或录制时,系统会根据音频流类型自动申请焦点,这可能会中断其他音频或降低其音量。音频焦点的具体介绍可参考[音频焦点和音频会话介绍](audio-playback-concurrency.md)。 60 61此处仅说明常见的音频流类型影响音频焦点的表现。 62 63- 启动导航(Navigation)时,正在播放的音乐(Music)音量会自动调低,待导航(Navigation)结束后,音乐(Music)音量将自动恢复。 64 65- 开始播放视频(Movie)时,将会停止正在播放的音乐(Music);当视频(Movie)播放结束后,音乐(Music)播放不会自动恢复,对应的应用也不会收到任何恢复通知。 66 67- 开始语音通话(VoiceCommunication)时,将会暂停正在播放的音乐(Music);当语音通话(VoiceCommunication)结束后,播放音乐(Music)的应用将收到恢复播放的通知。 68 69- 音乐(Music)和游戏音频(Game)可以混音播放,两者互不影响。 70 71- 开始录制语音短消息(VoiceMessage)时,会自动暂停正在播放的音乐(Music);当语音短消息(VoiceMessage)录制结束后, 播放音乐(Music)的应用将收到恢复播放的通知。 72 73### 输入/输出设备选择 74 75对于不同类型的音频流,系统会为其选定相应的输入/输出设备。 76 77此处仅说明常见的音频流类型对应的输入/输出设备。 78 79- 音乐(Music)类型音频流的默认输出设备为扬声器。 80 81- 语音通话(VoiceCommunication)类型音频流的默认输入设备为麦克风,默认输出设备为听筒。 82 83- 闹铃(Alarm)类型音频流的默认输出设备为扬声器。若先连接蓝牙耳机,再开始播放Alarm音频,则扬声器和蓝牙耳机会同时播放。 84 85若默认的输入/输出设备不符合使用诉求,应用也可以调用相关接口主动修改。应用[使用AudioRenderer开发音频播放功能](using-audiorenderer-for-playback.md)时,可以调用[setDefaultOutputDevice](../../reference/apis-audio-kit/js-apis-audio.md#setdefaultoutputdevice12)接口,设置默认发声设备。 86 87## 设置音频流类型 88 89应用可采用多种方法实现音频播放或录音功能,因此,设置音频流类型的方式也各不相同。 90 91常见的设置播放音频流类型的方法有: 92 93- **[使用AudioRenderer开发音频播放功能](using-audiorenderer-for-playback.md)**: 94 95 可以在调用[createAudioRenderer](../../reference/apis-audio-kit/js-apis-audio.md#audiocreateaudiorenderer8)以获取音频渲染器时,传入对应的[StreamUsage](../../reference/apis-audio-kit/js-apis-audio.md#streamusage)。 96 97 createAudioRenderer的参数options类型为AudioRendererOptions,包含AudioRendererInfo渲染器信息,使用AudioRendererInfo.usage可指定StreamUsage音频流类型。 98 99- **[使用OHAudio开发音频播放功能](using-ohaudio-for-playback.md)**: 100 101 可以在调用[OH_AudioStreamBuilder_SetRendererInfo](../../reference/apis-audio-kit/_o_h_audio.md#oh_audiostreambuilder_setrendererinfo)接口时,传入对应的[OH_AudioStream_Usage](../../reference/apis-audio-kit/_o_h_audio.md#oh_audiostream_usage)指定音频流类型。 102 103- **[使用AVPlayer开发音频播放功能(ArkTS)](../media/using-avplayer-for-playback.md)**: 104 105 可以通过设置AVPlayer的[属性](../../reference/apis-media-kit/js-apis-media.md#属性)audioRendererInfo来实现。AVPlayer.audioRendererInfo的类型为audio.AudioRendererInfo。使用AudioRendererInfo.usage可指定[StreamUsage](../../reference/apis-audio-kit/js-apis-audio.md#streamusage)音频流类型。 106 107 > **说明:** 108 > 在设置AVPlayer的audioRendererInfo属性时,只允许在initialized状态下设置。 109 > 110 > 如果应用未主动设置该属性,AVPlayer将进行默认处理。当媒体源包含视频时,usage的默认值为STREAM_USAGE_MOVIE;否则,usage的默认值为STREAM_USAGE_MUSIC。 111 112- **[使用AVPlayer开发音频播放功能(C/C++)](../media/using-ndk-avplayer-for-playback.md)**: 113 114 可以在调用[OH_AVPlayer_SetAudioRendererInfo](../../reference/apis-media-kit/_a_v_player.md#oh_avplayer_setaudiorendererinfo)接口时,传入对应的[OH_AudioStream_Usage](../../reference/apis-audio-kit/_o_h_audio.md#oh_audiostream_usage)指定音频流类型。 115 116- **[使用SoundPool开发音频播放功能](../media/using-soundpool-for-playback.md)**: 117 118 可以在调用[createSoundPool](../../reference/apis-media-kit/js-apis-media.md#mediacreatesoundpool10)接口时,传入对应的[StreamUsage](../../reference/apis-audio-kit/js-apis-audio.md#streamusage)指定音频流类型。 119 120常见的设置录制音频流类型的方法有: 121 122- **[使用AudioCapturer开发音频录制功能](using-audiocapturer-for-recording.md)**: 123 124 可以在调用[createAudioCapturer](../../reference/apis-audio-kit/js-apis-audio.md#audiocreateaudiocapturer8)接口时,传入对应的[SourceType](../../reference/apis-audio-kit/js-apis-audio.md#sourcetype8)。 125 126 createAudioCapturer的参数options类型为AudioCapturerOptions,包含AudioCapturerInfo采集器信息,使用AudioCapturerInfo.source可指定SourceType音源类型。 127 128- **[使用OHAudio开发音频录制功能](using-ohaudio-for-recording.md)**: 129 130 可以在调用[OH_AudioStreamBuilder_SetCapturerInfo](../../reference/apis-audio-kit/_o_h_audio.md#oh_audiostreambuilder_setcapturerinfo)接口时,传入对应的[OH_AudioStream_SourceType](../../reference/apis-audio-kit/_o_h_audio.md#oh_audiostream_sourcetype)指定音源类型。 131 132- **[使用AVRecorder开发音频录制功能](../media/using-avrecorder-for-recording.md)**: 133 134 可以在调用[AVRecorder.prepare](../../reference/apis-media-kit/js-apis-media.md#prepare9-3)接口时,传入对应的[AudioSourceType](../../reference/apis-media-kit/js-apis-media.md#audiosourcetype9)。 135 136 AVRecorder.prepare的参数config类型为AVRecorderConfig,使用AVRecorderConfig.audioSourceType可指定音源类型。 137