AudioRenderer设置音频流后输出设备不符合预期
============================

#### 问题现象

export class AudioRenderPlayer {
  private renderModel: audio.AudioRenderer | undefined \= undefined;
  private audioStreamInfo: audio.AudioStreamInfo \= {
    samplingRate: audio.AudioSamplingRate.SAMPLE\_RATE\_16000, _// 采样率_
    channels: audio.AudioChannel.CHANNEL\_1, _//_ _通道_
    sampleFormat: audio.AudioSampleFormat.SAMPLE\_FORMAT\_S16LE, _// 采样格式_
    encodingType: audio.AudioEncodingType.ENCODING\_TYPE\_RAW _//_ _编码格式_
  }
  private audioRendererInfo: audio.AudioRendererInfo \= {
    usage: audio.StreamUsage.STREAM\_USAGE\_VOICE\_COMMUNICATION, _// 音频流使用类型_
    rendererFlags: 0 _// 音频渲染器标志_
  }
  private audioRendererOptions: audio.AudioRendererOptions \= {
    streamInfo: this.audioStreamInfo,
    rendererInfo: this.audioRendererInfo
  }
}

通过以上代码配置音频渲染参数以便后面创建AudioRenderer实例，预期使用扬声器播放，实际从听筒发出声音，为什么？

#### 背景知识

音频流类型是定义音频数据播放和录制方式的关键属性。对于播放流，其类型由[StreamUsage](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-audio-e#streamusage)确定。音频流类型对输出设备的选择具有决定性影响。

#### 问题定位

问题代码中音频流类型是**STREAM\_USAGE\_VOICE\_COMMUNICATION**，从音频流使用类型可知，**STREAM\_USAGE\_VOICE\_COMMUNICATION**的播放流类型为语音消息，在[音频流类型](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-audio-e#audiovolumetype)中应属于VOICE\_CALL。

#### 分析结论

**STREAM\_USAGE\_VOICE\_COMMUNICATION**音频流所属的音量类型为通话音量，[默认输出设备](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/using-right-streamusage-and-sourcetype#输入输出设备选择)为听筒，所以音频声音会从听筒发出。

#### 修改建议

*   可以尝试更换音频流类型为**STREAM\_USAGE\_MUSIC**，默认会从扬声器播放。
    
    let audioRendererInfo: audio.AudioRendererInfo \= {
      usage: audio.StreamUsage.STREAM\_USAGE\_MUSIC, _//_ _音频流使用类型：音乐。根据业务场景配置，参考StreamUsage。_
      rendererFlags: 0 _//_ _音频渲染器标志。_
    };
    
    完整代码可参考：使用AudioRenderer开发音频播放功能[完整示例](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/using-audiorenderer-for-playback#完整示例)。
    
*   若默认的输入/输出设备不符合使用诉求，应用也可以调用[setDefaultOutputDevice](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-audio-audiorenderer#setdefaultoutputdevice12)接口主动修改默认输出设备，值得注意的是，该接口仅适用于StreamUsage为语音消息（STREAM\_USAGE\_VOICE\_MESSAGE）、VoIP语音通话（STREAM\_USAGE\_VOICE\_COMMUNICATION）或者VoIP视频通话（STREAM\_USAGE\_VIDEO\_COMMUNICATION）的场景。