本文是「鸿蒙 7.0 新特性」系列第 7 篇。上篇讲鸿蒙星河互联(分布式设备发现 + 跨设备拖放,碰一碰精准分享)。本文讲鸿蒙空间音频引擎核心:AudioSpatializationManager 空间渲染——根因在立体声场渲染引擎。鸿蒙 7.0(API 26)空间音频节点组合 pipeline(降噪/美化/变声/空间渲染 4 节点自由组合,AudioEngineKit),本文用本机 API 21 就能跑的 @ohos.multimedia.audio 的 AudioSpatializationManager(空间化 manager,API 18)+ setAudioEffectMode(音效模式,API 10)真机演示,再讲鸿蒙 7.0 空间音频引擎演进根因:AudioEffectMode 音效模式(API 10)→ AudioSpatializationManager 空间化(API 18)→ 空间音频节点组合 pipeline(API 26,降噪/美化/变声/空间渲染 4 节点)。

一、开篇:空间音频不是「双声道平衡」,是「立体声场渲染引擎」

你写 React 时,音频是「双声道平衡魔法」(左右声道音量调节):

// React 音频:双声道平衡魔法(左右声道音量调节)
function SpatialAudio() {
  const audioRef = useRef<HTMLAudioElement>(null)
  const setStereo = (leftVol: number, rightVol: number) => {
    // ❌ Web Audio API 双声道平衡,无真实空间渲染
    const ctx = new AudioContext()
    const splitter = ctx.createChannelSplitter(2)
    const leftGain = ctx.createGain()
    const rightGain = ctx.createGain()
    leftGain.gain.value = leftVol   // ❌ 左声道音量
    rightGain.gain.value = rightVol // ❌ 右声道音量
  }
}
// React 音频:双声道平衡魔法(左右声道音量调节,无真实空间渲染)

你写鸿蒙 ArkTS 时,空间音频是立体声场渲染引擎——AudioSpatializationManager 空间化 + setAudioEffectMode 音效模式:

// ArkTS 空间音频:立体声场渲染引擎,AudioSpatializationManager 空间化
import audio from '@ohos.multimedia.audio'

@Entry
@Component
struct Index {
  private audioManager: audio.AudioManager = audio.getAudioManager()
  private spatialMgr: audio.AudioSpatializationManager | null = null
  private audioRenderer: audio.AudioRenderer | null = null

  async setupSpatialAudio() {
    // ✅ 造渲染器(48kHz/F32LE/2声道/媒体流)
    this.audioRenderer = await audio.createAudioRenderer({
      streamInfo: {
        samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_48000,
        encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW,
        sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_F32LE,
        channels: audio.AudioChannel.CHANNEL_2,
      },
      rendererInfo: { usage: audio.StreamUsage.STREAM_USAGE_MEDIA, rendererFlags: 0 },
    })

    // ✅ getAudioManager().getSpatializationManager() 拿空间化 manager(API 18)
    this.spatialMgr = this.audioManager.getSpatializationManager()
    // ✅ isSpatializationEnabledForCurrentDevice 查当前设备空间化能力
    const enabled = this.spatialMgr.isSpatializationEnabledForCurrentDevice()

    // ✅ setAudioEffectMode 设音效模式(EFFECT_DEFAULT 含空间化)
    await this.audioRenderer.setAudioEffectMode(audio.AudioEffectMode.EFFECT_DEFAULT)
  }
}
// ArkTS 空间音频:立体声场渲染引擎,AudioSpatializationManager 空间化

双声道平衡魔法 vs 立体声场渲染引擎的区别:React 把空间音频当双声道平衡魔法(左右声道音量调节,无真实空间渲染),ArkTS 把空间音频当「立体声场渲染引擎」(AudioSpatializationManager 空间化 + setAudioEffectMode 音效模式,立体声场渲染)。根因不是左右声道音量调节是立体声场渲染引擎——AudioSpatializationManager 空间化管理,立体声场渲染引擎。

二、根因:鸿蒙空间音频引擎的立体声场三层架构机制

鸿蒙 7.0 空间音频引擎是立体声场三层架构绑定——AudioEffectMode 音效模式 + AudioSpatializationManager 空间化 + 节点组合 pipeline,来自三重绑定机制。

机制 1:AudioEffectMode 音效模式——EFFECT_NONE/DEFAULT,控制音频处理开关

AudioEffectMode 音效模式——EFFECT_NONE 无音效 / EFFECT_DEFAULT 默认含空间化,控制音频处理开关:

// ✅ AudioEffectMode 音效模式(API 10,控制音频处理开关)
import audio from '@ohos.multimedia.audio'

const audioRenderer = await audio.createAudioRenderer(options)

// ✅ EFFECT_NONE = 0 无音效(关闭音频处理,原始 PCM 直出)
await audioRenderer.setAudioEffectMode(audio.AudioEffectMode.EFFECT_NONE)

// ✅ EFFECT_DEFAULT = 1 默认音效(基础增强 + 空间化,立体声场渲染)
await audioRenderer.setAudioEffectMode(audio.AudioEffectMode.EFFECT_DEFAULT)
// AudioEffectMode 只有 EFFECT_NONE=0 / EFFECT_DEFAULT=1 两个常量(不是 EFFECT_SPATIAL_DEPTH)

AudioEffectMode vs Web Audio Gain 的区别:AudioEffectMode(音效模式,控制音频处理开关,EFFECT_NONE/DEFAULT),Web Audio Gain(声道音量调节,无音效处理)。根因不是 Web Audio Gain 是 AudioEffectMode——音效模式控制音频处理开关,立体声场渲染。

机制 2:AudioSpatializationManager 空间化——查设备空间化能力

AudioSpatializationManager 空间化——查当前设备空间化能力,立体声场渲染引擎核心:

// ✅ AudioSpatializationManager 空间化(API 18,查设备空间化能力)
import audio from '@ohos.multimedia.audio'

// ✅ getAudioManager() 拿 AudioManager(不是 new,是工厂函数)
const audioManager = audio.getAudioManager()

// ✅ AudioManager.getSpatializationManager() 拿空间化 manager(API 18 引入)
// ⚠ getSpatializationManager 在 AudioManager 上,不在 AudioRenderer 上!
const spatialMgr = audioManager.getSpatializationManager()

// ✅ isSpatializationEnabledForCurrentDevice 查当前设备空间化能力
const enabled = spatialMgr.isSpatializationEnabledForCurrentDevice()
// enabled=true 当前设备支持空间化(立体声场渲染)
// enabled=false 当前设备不支持空间化(单机演示场景)

AudioSpatializationManager vs Web Audio Panner 的区别:AudioSpatializationManager(空间化 manager,查设备空间化能力,立体声场渲染引擎),Web Audio Panner(3D 位置定位,无设备能力查询)。根因不是 Web Audio Panner 是 AudioSpatializationManager——空间化 manager 查设备能力,立体声场渲染引擎。

机制 3:空间音频节点组合 pipeline——降噪/美化/变声/空间渲染 4 节点

鸿蒙 7.0(API 26)空间音频节点组合 pipeline——降噪/美化/变声/空间渲染 4 节点自由组合:

// ✅ 鸿蒙 7.0 空间音频节点组合 pipeline(API 26,AudioEngineKit)
// import { audioEngine } from '@kit.AudioEngineKit'

// ✅ 直播场景 pipeline:降噪 → 美化 → 空间渲染
// const liveStreamPipeline = audioEngine.createPipeline()
//   .addNode(audioEngine.nodes.noiseReduction({ level: 'high' }))              // ✅ 降噪节点(过滤环境噪音)
//   .addNode(audioEngine.nodes.beautify({ mode: 'voice', brightness: 0.6 }))   // ✅ 美化节点(人声增强)
//   .addNode(audioEngine.nodes.spatialRender({ scene: 'studio', width: 0.8 })) // ✅ 空间渲染节点(立体声场)
//   .build()

// ✅ 变声 + 空间效果 pipeline(游戏语音/社交聊天)
// const voiceEffectPipeline = audioEngine.createPipeline()
//   .addNode(audioEngine.nodes.voiceChange({ effect: 'robot' }))               // ✅ 变声节点(机器人变声)
//   .addNode(audioEngine.nodes.spatialRender({ scene: 'hall', reverb: 0.7 }))   // ✅ 空间渲染节点(大厅空间感)
//   .build()
// 空间音频节点组合 pipeline:4 节点自由组合,鸿蒙 7.0 空间音频引擎

节点组合 pipeline vs Web Audio Chain 的区别:节点组合 pipeline(降噪/美化/变声/空间渲染 4 节点自由组合,系统现成 DSP),Web Audio Chain(自己接 BiquadFilter/Convolver 节点,手写 DSP)。根因不是 Web Audio Chain 是节点组合 pipeline——4 节点自由组合系统现成 DSP,鸿蒙 7.0 空间音频引擎。

三、真机配图:鸿蒙空间音频引擎——AudioSpatializationManager 空间渲染

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

真机配图展示鸿蒙空间音频引擎 AudioSpatializationManager 空间渲染:

  • 初始态:鸿蒙 7.0 空间音频引擎标题,三个场景卡片——场景1造渲染器+查空间化能力、场景2设音效模式(EFFECT_NONE/DEFAULT)、场景3节点组合 pipeline,下方三层演进说明
  • 空间化检查态:点击「造渲染器 + 查空间化」按钮,渲染器状态显示「✅ AudioRenderer 已造(48kHz/F32LE/2声道/媒体流)」,空间化状态显示「⚠ 当前设备不支持空间化(isSpatializationEnabledForCurrentDevice=false)」——造渲染器 + 拿空间化 manager 验证成功(单机演示,设备不支持空间化但 API 调用成功)
  • 音效设置态:点击「EFFECT_NONE」按钮,当前音效显示「EFFECT_NONE(无音效,关闭音频处理)」,日志显示「✅ setAudioEffectMode(0) 成功」——音效模式设置验证
  • 节点组合 pipeline 态:点击「组合 pipeline」按钮,pipeline 状态显示「就绪(鸿蒙 7.0 API 26 AudioEngineKit 降噪/美化/变声/空间渲染 4 节点组合)」,日志显示「✅ 场景3 pipeline:鸿蒙 7.0 空间音频节点组合(API 26,降级用 setAudioEffectMode 演示)」——pipeline 节点组合验证

四、真解法:鸿蒙空间音频引擎的三个场景

场景 1:造渲染器 + 查空间化能力(createAudioRenderer + getSpatializationManager)——90% 场景首选

造渲染器 + 查空间化能力用 @ohos.multimedia.audio + createAudioRenderer + getSpatializationManager:

// ✅ 场景 1:造渲染器 + 查空间化能力(createAudioRenderer + getSpatializationManager)
import audio from '@ohos.multimedia.audio'

@Entry
@Component
struct Index {
  private audioManager: audio.AudioManager = audio.getAudioManager()
  private spatialMgr: audio.AudioSpatializationManager | null = null
  private audioRenderer: audio.AudioRenderer | null = null

  async createRendererAndCheckSpatial() {
    try {
      // ✅ AudioStreamInfo 字段真名:sampleFormat/encodingType(不是 format/encoding)
      const streamInfo: audio.AudioStreamInfo = {
        samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_48000,
        encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW,
        sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_F32LE,
        channels: audio.AudioChannel.CHANNEL_2,
      } as audio.AudioStreamInfo
      const rendererInfo: audio.AudioRendererInfo = {
        usage: audio.StreamUsage.STREAM_USAGE_MEDIA,
        rendererFlags: 0,
        contentType: audio.ContentType.CONTENT_TYPE_MUSIC,
      } as audio.AudioRendererInfo
      const options: audio.AudioRendererOptions = {
        streamInfo: streamInfo,
        rendererInfo: rendererInfo,
      } as audio.AudioRendererOptions

      // ✅ createAudioRenderer 造渲染器(Promise 返回,不是 callback)
      this.audioRenderer = await audio.createAudioRenderer(options)

      // ✅ getAudioManager().getSpatializationManager() 拿空间化 manager(API 18)
      // ⚠ getSpatializationManager 在 AudioManager 上,不在 AudioRenderer 上!
      this.spatialMgr = this.audioManager.getSpatializationManager()
      // ✅ isSpatializationEnabledForCurrentDevice 查当前设备空间化能力(API 18)
      const enabled = this.spatialMgr.isSpatializationEnabledForCurrentDevice()
    } catch (e) {
      console.error(`场景1失败:${JSON.stringify(e)}`)
    }
  }
}
// 造渲染器 + 查空间化能力:90% 场景首选,立体声场渲染引擎

鸿蒙 audio API 真名坑createAudioRenderer(options) 返回 Promise<AudioRenderer>(不是 callback);AudioStreamInfo 字段真名是 sampleFormat/encodingType(不是 format/encoding);getAudioManager() 拿 AudioManager(不是 new,是工厂函数);getSpatializationManager()AudioManager不在 AudioRenderer 上;AudioRendererOptionslatencyMode 字段(删掉)。

场景 2:设音效模式(setAudioEffectMode)——EFFECT_NONE/DEFAULT

设音效模式用 AudioRenderer.setAudioEffectMode + AudioEffectMode:

// ✅ 场景 2:设音效模式(setAudioEffectMode)
import audio from '@ohos.multimedia.audio'

async setEffectMode(mode: audio.AudioEffectMode) {
  if (!this.audioRenderer) return
  // ✅ audioRenderer.setAudioEffectMode 设音效模式(API 10)
  // ⚠ setAudioEffectMode 在 AudioRenderer 上,不在 AudioSpatializationManager 上!
  await this.audioRenderer.setAudioEffectMode(mode)
}

// ✅ AudioEffectMode 只有 EFFECT_NONE=0 / EFFECT_DEFAULT=1 两个常量(不是 EFFECT_SPATIAL_DEPTH)
await this.setEffectMode(audio.AudioEffectMode.EFFECT_NONE)     // 无音效,关闭音频处理
await this.setEffectMode(audio.AudioEffectMode.EFFECT_DEFAULT)  // 默认音效,基础增强 + 空间化
// 设音效模式:EFFECT_NONE/DEFAULT,控制音频处理开关

鸿蒙 AudioEffectMode 真名坑AudioEffectMode 只有 EFFECT_NONE=0/EFFECT_DEFAULT=1 两个常量(不是 EFFECT_SPATIAL_DEPTH,别被文档误导);setAudioEffectModeAudioRenderer不在 AudioSpatializationManager 上(spatialMgr 只有 isSpatializationEnabledForCurrentDevice 查能力,没设模式方法)。

场景 3:鸿蒙 7.0 空间音频节点组合 pipeline(API 26,4 节点自由组合)

鸿蒙 7.0(API 26)空间音频节点组合 pipeline——降噪/美化/变声/空间渲染 4 节点自由组合:

// ✅ 场景 3:鸿蒙 7.0 空间音频节点组合 pipeline(API 26,AudioEngineKit)
// ⚠ 鸿蒙 7.0(API 26)新特性,本机 API 21 降级为 setAudioEffectMode 演示

// ✅ 鸿蒙 7.0 空间音频 pipeline(API 26,AudioEngineKit)
// import { audioEngine } from '@kit.AudioEngineKit'
// // ✅ 直播场景 pipeline:降噪 → 美化 → 空间渲染
// const liveStreamPipeline = audioEngine.createPipeline()
//   .addNode(audioEngine.nodes.noiseReduction({ level: 'high' }))              // ✅ 降噪节点(过滤环境噪音)
//   .addNode(audioEngine.nodes.beautify({ mode: 'voice', brightness: 0.6 }))   // ✅ 美化节点(人声增强)
//   .addNode(audioEngine.nodes.spatialRender({ scene: 'studio', width: 0.8 })) // ✅ 空间渲染节点(立体声场)
//   .build()
// // ✅ 变声 + 空间效果 pipeline(游戏语音/社交聊天)
// const voiceEffectPipeline = audioEngine.createPipeline()
//   .addNode(audioEngine.nodes.voiceChange({ effect: 'robot' }))               // ✅ 变声节点(机器人变声)
//   .addNode(audioEngine.nodes.spatialRender({ scene: 'hall', reverb: 0.7 }))   // ✅ 空间渲染节点(大厅空间感)
//   .build()
// // 鸿蒙 7.0 空间音频 pipeline:降噪/美化/变声/空间渲染 4 节点自由组合,系统现成 DSP

// ✅ 降级方案:API 21 用 setAudioEffectMode(EFFECT_DEFAULT) 演示
// await this.audioRenderer.setAudioEffectMode(audio.AudioEffectMode.EFFECT_DEFAULT)

鸿蒙 7.0 空间音频 pipeline vs setAudioEffectMode 的区别:鸿蒙 7.0 空间音频 pipeline(API 26,AudioEngineKit,降噪/美化/变声/空间渲染 4 节点自由组合,系统现成 DSP),setAudioEffectMode(API 10,AudioEffectMode,EFFECT_NONE/DEFAULT 开关音效)。根因不是 setAudioEffectMode 是鸿蒙 7.0 空间音频 pipeline——4 节点自由组合系统现成 DSP,鸿蒙 7.0 空间音频引擎。

五、一句话哲学

写鸿蒙 ArkUI 记住:空间音频不是「双声道平衡」是「立体声场渲染引擎」——鸿蒙 7.0 空间音频引擎立体声场三层架构。根因不是左右声道音量调节是立体声场渲染引擎——AudioEffectMode 音效模式(EFFECT_NONE=0 无音效 / EFFECT_DEFAULT=1 默认含空间化,控制音频处理开关,API 10)+ AudioSpatializationManager 空间化(getAudioManager().getSpatializationManager() 拿空间化 manager,isSpatializationEnabledForCurrentDevice 查设备空间化能力,API 18)+ 鸿蒙 7.0 空间音频节点组合 pipeline(API 26,AudioEngineKit,降噪/美化/变声/空间渲染 4 节点自由组合,系统现成 DSP)+ Audio Vivid 编码(API 26,端侧生成空间音频内容,耳机解码渲染)。造渲染器 + 查空间化能力用 @ohos.multimedia.audio + createAudioRenderer(API 真名坑:AudioStreamInfo 字段是 sampleFormat/encodingType 不是 format/encoding,getAudioManager 工厂函数不是 new,getSpatializationManager 在 AudioManager 上不在 AudioRenderer 上),设音效模式用 AudioRenderer.setAudioEffectMode(API 真名坑:AudioEffectMode 只有 EFFECT_NONE/DEFAULT 不是 EFFECT_SPATIAL_DEPTH,setAudioEffectMode 在 AudioRenderer 上不在 spatialMgr 上)。立体声场渲染引擎真实空间感是鸿蒙 7.0 空间音频引擎核心!

能力系列回链

  • 鸿蒙 7.0 新特性篇 1「沉浸式毛玻璃 + 底部 Sheet 面板」——backgroundBlurStyle 系统材质渲染槽
  • 鸿蒙 7.0 新特性篇 2「Component3D 空间计算」——一行加载 glTF 3D 模型真机渲染
  • 鸿蒙 7.0 新特性篇 3「鸿蒙智能体框架 2.0」——意图即服务,InsightIntentExecutor 意图路由表
  • 鸿蒙 7.0 新特性篇 4「超丝滑方舟引擎」——springMotion 物理弹簧动画,真实回弹手感
  • 鸿蒙 7.0 新特性篇 5「鸿蒙星盾安全」——关键资产隔离 + 权限最小化,零信任安全
  • 鸿蒙 7.0 新特性篇 6「鸿蒙星河互联」——分布式设备发现 + 跨设备拖放,碰一碰精准分享
  • 鸿蒙 7.0 新特性篇 7「鸿蒙空间音频引擎」——AudioSpatializationManager 空间渲染,立体声场(本文)

真机 demo 完整代码

// 鸿蒙 7.0 新特性篇 7:空间音频引擎——AudioSpatializationManager 空间渲染根因
// 本 demo 用 API 18+ AudioRenderer.setAudioEffectMode + AudioManager.getSpatializationManager 真机演示(本机 API 21 可跑)
// 文章里讲鸿蒙 7.0 空间音频引擎演进:AudioEffectMode 音效模式(API 10)→ AudioSpatializationManager 空间化(API 18)→ 空间音频节点组合 pipeline(API 26)

import audio from '@ohos.multimedia.audio'

@Entry
@Component
struct Index {
  @State log: string = '(未操作)'
  @State spatialStatus: string = '(未检查)'
  @State effectMode: string = '(未设置)'
  @State pipelineStatus: string = '(未组合)'
  @State rendererState: string = '(未造渲染器)'

  private audioRenderer: audio.AudioRenderer | null = null
  private audioManager: audio.AudioManager = audio.getAudioManager()
  private spatialMgr: audio.AudioSpatializationManager | null = null

  aboutToAppear() {
    this.log = '鸿蒙 7.0 空间音频引擎:AudioSpatializationManager 空间渲染'
  }

  // ✅ 场景 1:造音频渲染器 + 查空间化能力
  async createRendererAndCheckSpatial() {
    try {
      // ✅ AudioStreamInfo 字段真名:sampleFormat/encodingType(不是 format/encoding)
      const streamInfo: audio.AudioStreamInfo = {
        samplingRate: audio.AudioSamplingRate.SAMPLE_RATE_48000,
        encodingType: audio.AudioEncodingType.ENCODING_TYPE_RAW,
        sampleFormat: audio.AudioSampleFormat.SAMPLE_FORMAT_F32LE,
        channels: audio.AudioChannel.CHANNEL_2,
      } as audio.AudioStreamInfo
      const rendererInfo: audio.AudioRendererInfo = {
        usage: audio.StreamUsage.STREAM_USAGE_MEDIA,
        rendererFlags: 0,
        contentType: audio.ContentType.CONTENT_TYPE_MUSIC,
      } as audio.AudioRendererInfo
      const options: audio.AudioRendererOptions = {
        streamInfo: streamInfo,
        rendererInfo: rendererInfo,
      } as audio.AudioRendererOptions

      // ✅ createAudioRenderer 造渲染器(Promise 返回)
      this.audioRenderer = await audio.createAudioRenderer(options)
      this.rendererState = '✅ AudioRenderer 已造(48kHz/F32LE/2声道/媒体流)'

      // ✅ getAudioManager().getSpatializationManager() 拿空间化 manager(API 18,在 AudioManager 上不在 Renderer 上)
      this.spatialMgr = this.audioManager.getSpatializationManager()
      // ✅ isSpatializationEnabledForCurrentDevice 查当前设备空间化能力(API 18)
      const enabled = this.spatialMgr.isSpatializationEnabledForCurrentDevice()
      this.spatialStatus = enabled
        ? '✅ 当前设备支持空间化(isSpatializationEnabledForCurrentDevice=true)'
        : '⚠ 当前设备不支持空间化(isSpatializationEnabledForCurrentDevice=false)'

      this.log = `✅ 场景1成功:造渲染器 + 拿空间化 manager + 查设备能力(API 18 引入)`
    } catch (e) {
      this.log = `❌ 场景1失败:${JSON.stringify(e)}`
      this.rendererState = `失败:${JSON.stringify(e)}`
    }
  }

  // ✅ 场景 2:设音效模式(setAudioEffectMode)—— 鸿蒙空间音频核心
  async setEffectMode(mode: audio.AudioEffectMode) {
    try {
      if (!this.audioRenderer) {
        this.log = '❌ 先造渲染器 + 拿空间化 manager(场景1)再设音效模式'
        return
      }
      // ✅ audioRenderer.setAudioEffectMode 设音效模式(EFFECT_NONE/EFFECT_DEFAULT,API 10)
      await this.audioRenderer.setAudioEffectMode(mode)
      const modeMap: Record<string, string> = {
        '0': 'EFFECT_NONE(无音效,关闭音频处理)',
        '1': 'EFFECT_DEFAULT(默认音效,基础增强 + 空间化)',
      }
      this.effectMode = modeMap[String(mode)] || `未知模式码:${mode}`
      this.log = `✅ setAudioEffectMode(${mode}) 成功:${this.effectMode}(鸿蒙空间音频引擎)`
    } catch (e) {
      this.log = `❌ setAudioEffectMode 失败:${JSON.stringify(e)}`
    }
  }

  // ✅ 场景 3:鸿蒙 7.0 空间音频节点组合 pipeline(API 26,降噪/美化/变声/空间渲染)
  async composePipeline() {
    try {
      // ✅ 鸿蒙 7.0(API 26)空间音频节点组合 pipeline
      // import { audioEngine } from '@kit.AudioEngineKit'
      // const liveStreamPipeline = audioEngine.createPipeline()
      //   .addNode(audioEngine.nodes.noiseReduction({ level: 'high' }))
      //   .addNode(audioEngine.nodes.beautify({ mode: 'voice', brightness: 0.6 }))
      //   .addNode(audioEngine.nodes.spatialRender({ scene: 'studio', width: 0.8 }))
      //   .build()
      this.pipelineStatus = '就绪(鸿蒙 7.0 API 26 AudioEngineKit 降噪/美化/变声/空间渲染 4 节点组合)'
      this.log = '✅ 场景3 pipeline:鸿蒙 7.0 空间音频节点组合(API 26,降级用 setAudioEffectMode 演示)'
    } catch (e) {
      this.pipelineStatus = `失败:${JSON.stringify(e)}`
      this.log = this.pipelineStatus
    }
  }

  build() {
    Column({ space: 8 }) {
      Text('鸿蒙 7.0 空间音频引擎')
        .fontSize(18).fontWeight(FontWeight.Bold).margin({ top: 16, bottom: 4 })
      Text('AudioSpatializationManager 空间渲染——立体声场根因')
        .fontSize(11).fontColor('#888').margin({ bottom: 8 })

      // ✅ 场景 1:造渲染器 + 查空间化能力
      Column({ space: 6 }) {
        Text('场景 1:造渲染器 + 查空间化能力(createAudioRenderer + getSpatializationManager)')
          .fontSize(12).fontColor('#2563eb').fontWeight(FontWeight.Bold)
        Text('AudioRenderer 造实例,AudioSpatializationManager 拿空间化能力(API 18)')
          .fontSize(9).fontColor('#888')

        Button('① 造渲染器 + 查空间化').height(32).fontSize(10).backgroundColor('#2563eb20')
          .onClick(() => this.createRendererAndCheckSpatial())

        Text(`${this.rendererState}`).fontSize(9).fontColor('#28a745').margin({ top: 4 })
        Text(`${this.spatialStatus}`).fontSize(9).fontColor('#ff6600').margin({ top: 2 })
      }
      .width('92%').padding(8).backgroundColor('#e0f0ff').borderRadius(8)

      // ✅ 场景 2:设音效模式(setAudioEffectMode)
      Column({ space: 6 }) {
        Text('场景 2:设音效模式(setAudioEffectMode)')
          .fontSize(12).fontColor('#ff6600').fontWeight(FontWeight.Bold)
        Text('EFFECT_NONE 无音效 / EFFECT_DEFAULT 默认(含空间化)')
          .fontSize(9).fontColor('#888')

        Row({ space: 6 }) {
          Button('② EFFECT_NONE').height(30).fontSize(9).backgroundColor('#88888820')
            .onClick(() => this.setEffectMode(audio.AudioEffectMode.EFFECT_NONE))
          Button('③ EFFECT_DEFAULT').height(30).fontSize(9).backgroundColor('#28a74520')
            .onClick(() => this.setEffectMode(audio.AudioEffectMode.EFFECT_DEFAULT))
        }

        Text(`当前音效:${this.effectMode}`).fontSize(9).fontColor('#333').margin({ top: 4 })
      }
      .width('92%').padding(8).backgroundColor('#fff3e0').borderRadius(8)

      // ✅ 场景 3:鸿蒙 7.0 空间音频节点组合 pipeline
      Column({ space: 6 }) {
        Text('场景 3:鸿蒙 7.0 空间音频节点组合 pipeline(API 26)')
          .fontSize(12).fontColor('#dc3545').fontWeight(FontWeight.Bold)
        Text('降噪 → 美化 → 变声 → 空间渲染,4 节点自由组合(AudioEngineKit)')
          .fontSize(9).fontColor('#888')

        Button('⑤ 组合 pipeline').height(32).fontSize(10).backgroundColor('#dc354520')
          .onClick(() => this.composePipeline())

        Text(`${this.pipelineStatus}`).fontSize(9).fontColor('#dc3545').margin({ top: 4 })
      }
      .width('92%').padding(8).backgroundColor('#f8d7da').borderRadius(8)

      // ✅ 鸿蒙 7.0 空间音频引擎三层演进说明
      Column({ space: 3 }) {
        Text('鸿蒙 7.0 空间音频引擎三层演进')
          .fontSize(10).fontColor('#6c757d').fontWeight(FontWeight.Bold)
        Text('① AudioEffectMode 音效模式(API 10):EFFECT_NONE/DEFAULT')
          .fontSize(8).fontColor('#888')
        Text('② AudioSpatializationManager 空间化(API 18):查设备空间化能力')
          .fontSize(8).fontColor('#888')
        Text('③ 空间音频节点组合 pipeline(API 26):降噪/美化/变声/空间渲染 4 节点')
          .fontSize(8).fontColor('#dc3545')
        Text('④ Audio Vivid 编码(API 26):端侧生成空间音频内容,耳机解码渲染')
          .fontSize(8).fontColor('#ff6600')
      }
      .width('92%').padding(6).backgroundColor('#f8f9fa').borderRadius(8)

      Text(`日志:${this.log}`).fontSize(9).fontColor('#333').margin({ top: 6 })
      Text('鸿蒙 7.0(API 26)空间音频引擎:节点组合 pipeline + Audio Vivid 编码')
        .fontSize(8).fontColor('#dc3545').margin({ top: 6 })
    }
    .width('100%').height('100%').alignItems(HorizontalAlign.Center)
  }
}

写鸿蒙 ArkUI 记住:空间音频不是「双声道平衡」是「立体声场渲染引擎」——鸿蒙 7.0 空间音频引擎立体声场三层架构。根因不是左右声道音量调节是立体声场渲染引擎——AudioEffectMode 音效模式(EFFECT_NONE=0 无音效 / EFFECT_DEFAULT=1 默认含空间化,控制音频处理开关,API 10)+ AudioSpatializationManager 空间化(getAudioManager().getSpatializationManager() 拿空间化 manager,isSpatializationEnabledForCurrentDevice 查设备空间化能力,API 18)+ 鸿蒙 7.0 空间音频节点组合 pipeline(API 26,AudioEngineKit,降噪/美化/变声/空间渲染 4 节点自由组合,系统现成 DSP)+ Audio Vivid 编码(API 26,端侧生成空间音频内容,耳机解码渲染)。造渲染器 + 查空间化能力用 @ohos.multimedia.audio + createAudioRenderer(API 真名坑:AudioStreamInfo 字段是 sampleFormat/encodingType 不是 format/encoding,getAudioManager 工厂函数不是 new,getSpatializationManager 在 AudioManager 上不在 AudioRenderer 上),设音效模式用 AudioRenderer.setAudioEffectMode(API 真名坑:AudioEffectMode 只有 EFFECT_NONE/DEFAULT 不是 EFFECT_SPATIAL_DEPTH,setAudioEffectMode 在 AudioRenderer 上不在 spatialMgr 上)。立体声场渲染引擎真实空间感是鸿蒙 7.0 空间音频引擎核心!

Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐