华为创新赛获奖复盘:告别“傻瓜式”问答,基于 Core Speech Kit 打造媲美真人的全双工语音交互

鸿蒙第16篇——数据持久化 本文介绍的数据持久化是指鸿蒙应用的数据持久化存储。它是将内存中的数据通过文件或数据库的形式保存到设备存储中。鸿蒙支持多种数据存储方式, 包括用户首选项Preferences、 键值型数据库KV-Store和关系型数据库。 阅读详情

华为创新赛获奖复盘:告别“傻瓜式”问答,基于 Core Speech Kit 打造媲美真人的全双工语音交互

前言:上一篇我们介绍了适合长文本朗读的 TextReader。但在《智伴》的体感游戏场景中,我们需要的是低延迟、高响应的短语音反馈(例如击中怪兽时喊出“太棒了!”),以及能够听懂孩子指令的语音识别功能。这时,Speech Kit 就显得“太重”了,我们需要深入到底层的 Core Speech Kit,直接调用 TTS (Text-to-Speech) 和 ASR (Automatic Speech Recognition) 引擎。


一、 TTS 进阶:打造低延迟游戏语音引擎

在游戏中,声音反馈的及时性至关重要。如果玩家击中怪兽后,过了 1 秒才听到反馈,沉浸感会大打折扣。为此,我们在 entry/src/main/ets/common/speech/TTSEngine.ets 中封装了一个单例的 TTS 引擎。

1. 引擎创建与配置

textToSpeech.createEngine 允许我们深度定制 TTS 的行为,包括语速、音调、音量以及在线/离线模式。

import { textToSpeech } from '@kit.CoreSpeechKit';

export class TTSEngine {
  private engine?: textToSpeech.TextToSpeechEngine;

  async createEngine() {
    // 配置参数
    let extraParam: Record<string, Object> = {
      "style": 'interaction-broadcast', // 交互式广播风格,更生动
      "locate": 'CN',
      "name": 'ZhiBanTTS'
    };

    let initParams: textToSpeech.CreateEngineParams = {
      language: 'zh-CN',
      person: 0, // 0 通常代表标准女声,可以通过 listVoices 查询更多音色
      online: 1, // 1 表示优先使用在线模式(音质更好),0 为离线
      extraParams: extraParam
    };

    // 创建引擎实例
    this.engine = await textToSpeech.createEngine(initParams);
    
    // 设置监听器
    this.engine.setListener({
      onStart: (requestId) => { /* 播放开始 */ },
      onComplete: (requestId) => { /* 播放结束 */ },
      onError: (requestId, errorCode, errorMessage) => { 
        console.error(`TTS Error: ${errorMessage}`); 
      }
    });
  }
}

2. 实现“抢断式”播报

在激烈的游戏中,新的语音指令往往需要打断旧的指令(例如连续击中怪兽)。我们可以通过 SpeakParams 中的 queueMode 来控制这一行为。

speak(text: string) {
  if (!this.engine) return;

  let speakParams: textToSpeech.SpeakParams = {
    requestId: Date.now().toString(), // 唯一请求ID
    extraParams: {
      "speed": 1.2, // 稍微加快语速,提升游戏节奏感
      "volume": 1.0,
      "queueMode": 0 // 0: 排队模式(默认),1: 抢断模式
    }
  };

  // 在《智伴》中,对于连击音效,我们可能希望它不要重叠,而是快速连续播放
  // 或者对于重要通知,使用抢断模式打断背景音
  this.engine.speak(text, speakParams);
}

二、 ASR 实战:让应用听懂孩子的指令

除了“说”,《智伴》还能“听”。在 entry/src/main/ets/common/stotext/core/SpeechRecognizer.ets 中,我们利用 speechRecognizer 实现了端侧语音识别。

1. 初始化识别引擎

import { speechRecognizer } from '@kit.CoreSpeechKit';

export class SpeechRecognizer {
  private engine?: speechRecognizer.SpeechRecognitionEngine;

  async createEngine() {
    let initParams: speechRecognizer.CreateEngineParams = {
      language: 'zh-CN',
      online: 1, // 支持在线识别,准确率更高
      extraParams: {
        "locate": "CN",
        "recognizerMode": "short" // 短语音模式,适合指令识别
      }
    };

    // 创建识别引擎
    this.engine = await speechRecognizer.createEngine(initParams);
  }
}

2. 核心流程:录音与写入

HarmonyOS 的 ASR 引擎需要开发者主动将音频数据(PCM 格式)“喂”给它。这就涉及到了 AudioCapturer(音频采集器)的配合。

// 1. 开始监听
startListening() {
  let startParams: speechRecognizer.StartParams = {
    sessionId: 'session_cmd',
    audioInfo: {
      audioType: 'pcm',
      sampleRate: 16000, // 16k 采样率是 ASR 的标准
      soundChannel: 1,   // 单声道
      sampleBit: 16      // 16位深
    }
  };
  this.engine?.startListening(startParams);
}

// 2. 采集音频并写入引擎
async startRecording() {
  this.startListening();
  
  // 假设 audioCapturer 已经初始化
  this.audioCapturer.on('read', (buffer: ArrayBuffer) => {
    // 将采集到的 PCM 数据写入 ASR 引擎
    let uint8Array = new Uint8Array(buffer);
    this.engine?.writeAudio('session_cmd', uint8Array);
  });
  
  this.audioCapturer.start();
}

3. 处理识别结果

通过 setListener 获取识别结果。ASR 会返回中间结果(isFinal=false)和最终结果(isFinal=true)。

this.engine.setListener({
  onResult: (sessionId, result) => {
    console.info(`识别文本: ${result.result}, 是否最终结果: ${result.isFinal}`);
    
    if (result.isFinal) {
      // 处理最终指令,例如 "开始游戏"、"退出"
      this.handleCommand(result.result);
    }
  }
});

三、 性能与体验优化

在开发《智伴》的语音交互功能时,我们总结了以下几点经验:

  1. 音色选择:Core Speech Kit 提供了多种音色(男声、女声、童声)。针对儿童应用,选择亲切的童声或温柔的女声能显著提升亲和力。
  2. VAD(语音活动检测):在 ASR 参数中配置 vadBegin 和 vadEnd,可以让引擎自动判断说话的开始和结束,避免长时间录制静音数据,节省电量。
  3. 音频焦点管理:当 ASR 开始录音时,建议暂时降低游戏背景音乐的音量(Duck),识别结束后恢复,以提高识别准确率。

四、 总结

通过 Core Speech Kit,《智伴》实现了高度定制化的语音交互体验。TTS 为游戏注入了活力,ASR 让操作变得更加直观。这些原子化的能力,让开发者可以像搭积木一样,自由构建出各种充满想象力的语音应用。

解决了“听”和“说”的问题,接下来我们将进入《智伴》最硬核的部分——视觉智能。下一篇,我们将揭秘如何利用 objectDetection 实现“智能看护”。

【鸿蒙专题与实战】测试体系:单元测试、组件测试与 UI 测试 本文系统讲解鸿蒙开发中的三层测试实践:底层单元测试(用Hypium框架,优先覆盖纯函数、边界与异常)、中层ViewModel逻辑、顶层仅测3-5条关键UI路径。强调测试应“越往下写得越多”,因单元测试快且成本低,而UI测试慢易出错。通过实例说明断言拆分提升定位效率,结合覆盖率报告(hvigorwtest --coverage)发现盲区,核心是“用覆盖率找漏测,而非追求数字”。附五步落地清单:建测试文件、按优先级补用例、精简UI测试、生成报告、定位未覆盖行。下一篇将开启实战项目:从需求到上架全流程。 阅读详情

相关推荐

从零开始 使用OMNET++结合VEINS,INET和SUMO的联合仿真

搭建仿真的环境,导入VEINS和INET开源库,使用INET库中提供的网络协议和功能模型来模拟通信协议和网络功能,使用SUMO创建道路网络和车辆轨迹,并导出到OMNeT++中 在OMNeT++中使用VEINS通过socket和SUMO连接,借助VEINS实现的TRACI接口来设置车辆相关的行为和场景,最后在OMNET++中结合VEINS,SUMO和INET运行联合仿真实验,并分析车辆在遇到紧急情况下的通信状况和具体行为

mjmmm的博客 1万+

Vue3+Cesium 鼠标键盘交互大全(拾取、自定义相机、WASD 漫游、事件冲突处理)

内置相机交互,控制原生拖拽、旋转、缩放开关自定义屏幕事件,用来做点击拾取、标绘、hover、右键菜单键盘交互:原生没有自带 WASD 漫游,需要监听键盘 +camera移动 API 自己实现第一人称漫游开发痛点:做标绘绘制的时候,原生鼠标拖拽地图和绘制事件打架;很多人不知道怎么单独禁用旋转、平移,而不是直接关掉所有交互。环境:Vue3 + Vite + vite-plugin-cesium,和前面两篇保持一致。

On the way 212

数据资产目录(SailCatalog)和数据地图(SailMap)

笔者接下来准备开发大数据平台(XSailboat)中的数据资产目录(SailCatalog)和数据地图(SailMap)相关的功能,本文用以记录笔者关于此部分功能的概念梳理和主体功能设计。

OkGogooXSailboat的博客 2326

【Unity知识速递】第8期 IL2CPP 托管堆内存碎片与原生堆交互机制深度解析

在 IL2CPP 构建中,内存分布在三个独立区域:托管堆(Managed Heap)、C# 非托管内存(C# Unmanaged Memory)和原生堆(Native Heap)。多数开发者只关注托管堆的 GC 分配,但真正决定移动端 OOM 风险的,是托管堆碎片如何触发堆扩张、以及托管引用如何"拖住"原生对象不释放。理解三层内存的交互机制,是做中大型项目内存优化的第一道门槛。IL2CPP 的 GC 采用标记-清除(Mark-Sweep)算法,回收后释放的内存会变成"空洞"——这就是碎片。

crystal_WJT的博客 257

FINN vs GFED vs GFAS vs QFED:四大火灾排放清单实战对比(含Python数据处理代码)

本文针对GFED、FINN、GFAS、QFED四大主流火灾排放清单,提供了实战对比分析与Python数据处理代码。通过量化对比东南亚农业火点与亚马逊雨林大火两个典型场景,揭示了不同清单在时空分辨率、算法内核和应用场景上的核心差异,并给出了基于研究目标、区域和模型的清单选择决策框架,帮助研究人员为空气质量模拟或火灾影响评估挑选最合适的数据源。

s3t4u的博客 422

Codex 100个真实案例 - 用AI生成Blender 3D建模脚本(建模师要失业了?)

本案例将展示如何用 Codex 生成 Blender Python API(bpy)脚本,自动创建完整的 3D 模型。我们将从基础几何体开始,逐步实现布尔运算、材质设置、光照配置,最终完成一张精美桌子的 3D 建模——包括桌面、桌腿、倒角、木纹材质。还会实现参数化批量生成不同风格的桌子、渲染输出 PNG 图片、以及 360 度旋转动画。全程用自然语言驱动 Codex,让建模从"点鼠标"变成"说人话"!

yueyeguzhuo的专栏 630

TF-M 安全与非安全交互

AN521 中,NS应用调用psa_generate_random()触发安全交互。NS侧组织iovec并调用psa_call,经Secure Gateway进入Secure世界。SPM检查内存权限与参数合法性后,通过SFN backend切换至Crypto分区执行服务,生成随机数并写回NS缓冲区。完成后返回NS,应用读取结果。整个过程由SPM协调,确保安全隔离与内存访问控制。

tyustli 221

从原理到落地:Java+TensorRT打造YOLO模型GPU极致推理方案

Java+TensorRT的YOLO模型GPU加速方案,核心是通过JNI桥接实现Java与TensorRT的高效交互,结合TensorRT的底层优化能力,最大化GPU算力。该方案既保留了Java后端的工程化优势(如易维护、生态完善),又解决了AI模型推理的性能瓶颈,可落地于实时视频分析、智能监控、工业质检等场景。基于TensorRT Dynamic Shape实现多尺寸输入的自适应优化;结合Java的协程(Virtual Thread)提升异步推理的并发效率;

2601_94871597的博客 766

从零搭建一个能收款的服装品牌站:建站、生图、p5.js 交互、支付宝 AI 付接入全流程

以一个服装品牌站「昼白 ZHOUBAI」为例,完整走一遍从六行需求到能收钱的全流程:建站、生成八款衣服十四张图、用 p5.js 做面料纹样与版型轮廓交互、接入支付宝 AI 付、挂三条服务端定时任务。重点讲清楚每一步怎么做、为什么这样做、有哪些坑,以及这套方案适合和不适合什么场景。

qq_25897071的博客 319

第4-4课:状态压缩与动态规划

什么是状态压缩 动态规划问题中重要的一环就是确定状态的定义,在大多数情况下,状态中所包含的信息并不多,比如线性规划问题的状态一般表示为 d[i,j](i 表示状态的位置,j 表示状态的阶段),算法实现时可用二维数组保存计算过程中的状态。但是也有一些问题,它的状态中包含的信息很多,比如它的状态可能是一个集合中各个元素的情况,或者是像铺瓷砖问题这样,是某一行的覆盖状态。如果沿用简单的状态表示方法,则可...

oRbIt 的专栏 700

【RT-DETR有效改进】手把手带你调参RT-DETR,1:1复现官方版本实验环境

本文是带大家进行调参,利用ultralytics仓库1:1复现RT-DETR官方实验环境,从而在后期发表论文 的时候省去一些不必要的麻烦,例如被审稿人提出质疑,本文的调参内容均有依据,根据RT-DETR官方Github上发布的版本进行设置本文的调参以ResNet18为例,其余的何其的调参基本一致。RT-DETR剑指论文专栏,持续复现各种顶会内容——论文收割机RT-DETR。

Snu77的博客 9921

从Prompt到Context:企业级AI办公助手(Copilot)的交互形态演进

企业级AI助手正从“提示词工程”迈向“上下文工程”,核心在于构建可主动获取、安全过滤、智能压缩的多源上下文架构。通过集成CRM、知识库、IM等系统数据,结合GraphRAG、字段级RBAC与上下文压缩技术,实现精准、实时的决策支持。未来,Copilot将演变为环境感知的“数字员工”,在无感中完成跨系统任务闭环,推动企业智能化进入新阶段。

2601_96643963的博客 228

看懂 SAP S/4HANA 产品主数据里的 GTIN:一串号码背后的全球商品识别与业务协同

SAP S/4HANA中的GTIN管理是企业供应链运营的关键环节。本文深入解析GTIN的业务内涵及其在SAP系统中的实现方式:1) GTIN是全球通用的商品标识码,不同于企业内部物料编码;2) SAP主数据中GTIN与计量单位强绑定,需为不同包装层级维护独立GTIN;3) 同一产品可能因渠道、供应商差异存在多个GTIN;4) GTIN贯穿零售POS、仓储管理、EDI订单等核心业务流程;5) 通过典型案例说明错误维护GTIN将导致收银异常、仓库作业低效等运营问题。文章强调GTIN管理需结合包装层级、计量单位等

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1432

b-map-viewer:面向 Vue 3 的地图可视化 SDK,从接入到展示再到交互分析

的重点,是让地图应用围绕清晰的职责协作:组件管理 Viewer,底图模块管理地理背景,图层展示业务数据,拾取工具负责输入,分析类负责计算,天气系统补充场景效果。对于 Vue 3 开发者,可以先完成一个底图和设备点位页面,再逐步加入交互、分析和三维效果;需要更细的控制时,仍然可以通过ready返回的 Viewer 使用原生 Cesium API。欢迎通过在线示例体验效果,在技术文档查阅参数。项目采用 Apache-2.0 许可证。Cesium、地图服务与第三方资源的授权和署名要求,应分别遵守。

阿琰a_的博客 361

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Nature正刊:智能纤维赋能可穿戴式交互

本文提出CAI共传播轴互连技术,实现单根纤维内集成5000+微型LED芯片与同轴触摸传感层,突破芯片互连短路、错位难题。基于米级长像素纤维,通过纬编织造出96×54分辨率织物显示界面(30fps,8bit全彩),支持多点触控、视频播放、蓝牙通信及多模态传感,兼具透气、可机洗、耐弯折等纺织品特性。系统集成双MCU架构与自适应显示功能,首次在织物上实现接近智能手机的丰富交互,为织物原生交互式可穿戴计算提供全新硬件范式。

weixin_44887311的博客 86

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

libsherpacore - 基于 sherpa-onnx 的 C++ 语音交互静态库

基于sherpa-onnx的C++语音交互静态库,封装ASR、KWS、VAD、TTS四大功能,提供统一唤醒→识别→合成流程。采用纯C++17、PIMPL模式与sigslot信号槽,支持跨平台(Windows/Linux),实现多线程音频处理与事件循环。支持流式/非流式ASR、关键词唤醒与人声检测,可选三种TTS模型(Matcha/Kokoro/ZipVoice),并支持零样本语音克隆。通过配置文件灵活切换模型与推理后端,适用于阿福老年陪护机器人等场景。

akinggw的专栏 370

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Android 开发入门实践(七):用 Compose 状态实现实时搜索、图标交互与页面恢复

本章通过点击计数器学习 Compose 状态机制,掌握 mutableStateOf 创建可观察状态、remember 保持状态在重组间存活,并理解状态提升与组件解耦。实践实时搜索功能时,结合 TextField 实现输入响应、空结果提示与清空操作,通过 rememberSaveable 解决屏幕旋转后状态恢复问题。关键认知:可观察状态驱动界面更新,而普通计算结果仅在重组中重新生成。纠错过程强化了对“状态”与“计算”本质区别的理解。

Easyhood的博客 217

WorkBuddy 实战:一句话需求 → 七屏可交互原型,户外徒步 App 的 AI 设计全流程

本文记录使用 WorkBuddy(基于大模型的 AI 辅助原型生成工作流)从零生成“户外徒步 App”七屏可交互原型的完整过程。围绕提示词约束、状态管理选型、路由联调与性能验证等实际开发环节,拆解如何将模糊需求转化为可运行代码。重点说明 AI 生成代码的常见不一致问题及人工介入的验证方法,提供一套可复用的 AI 原型落地流程。

2402_83344867的博客 483

12 种高级 UI 交互效果及对应 AI 提示词:从按压回弹到底部抽屉的物理感教学

让 AI 做按钮只说“加个动效”,它只会给个普通缩放——高级 UI 交互的差别本质是“有没有物理感”:按压回弹、弹性开关、波纹跟随手指、液态滑块、卡片堆叠、底部抽屉,12 种交互都在模拟真实世界的力学。本文拆解每种交互的视觉特征、失败形态与一句话 AI 提示词,附 12 条提示词对照清单 + 一段可直接运行的 HTML/CSS Demo,帮你把“感觉不错”翻译成 AI 能听懂的具体指令。

郑恩赐,厦门工学院软件工程AI方向本科在读。专注AI全栈应用开发,熟练Vue3、Spring Boot、PyTorch等技术栈,正在探索多模态大模型应用。拥有多个全栈项目和AI应用开发经验,获国家级大创立项和发明专利,掘金优质作者榜第2名。 224

UI 适配的暗礁,沉浸式状态栏、安全区与软键盘交互重构

仔细一看确实惨不忍睹:顶部的背景图被状态栏的电池电量遮挡,底部的输入框在弹出软键盘后被顶飞到了屏幕之外,还有侧边的返回手势和页面里的侧滑控件严重冲突。如果你的页面里恰好有一个从侧边滑出的抽屉菜单(Drawer),这两者会直接打架。如果你的页面里有一个长列表,整个列表会瞬间被压缩,体验极差。如果页面没有明显的抖动跳跃,说明你的避让逻辑完全达标了。极其容易忽略的警示:在折叠屏展开或者横竖屏切换时,安全区的高度是动态变化的。设置之后,键盘弹出只会压缩当前窗口的高度,而不会平移整个页面。

2502_91284977的博客 410

Vue3 + Cesium 鼠标交互绘制多边形 / 线(贴地绘制,动态预览,Entity 实现)

上一篇我们是写死经纬度添加 Entity;业务中经常需要鼠标在地图上直接圈选绘制围栏、轨迹。:监听鼠标左击、移动、右击事件回调属性,实时返回坐标数组,实现鼠标拖动时图形实时刷新预览(重点!普通属性赋值不会动态更新)稀土掘金交互规则(和行业标绘工具保持一致)✅ 左键单击:添加顶点✅ 鼠标移动:实时预览橡皮筋线 / 面✅ 右键单击:结束当前绘制,生成最终 Entity✅ 支持贴地形✅ 绘制过程可见顶点标记点两种绘制模式:POLYLINE 折线 / POLYGON 多边形。

On the way 181

WorkBuddy怎么调用墨刀AI?用一段需求生成PRD、交互原型和应用

在检查原型时,最好逐个点击导航和关键按钮,确认页面能否到达、返回路径是否清楚、表单和空状态有没有遗漏,比如这个社区兴趣App还应检查发布内容后返回哪里、私信入口能否找到。如果发现问题,可以继续在同一任务中提出具体修改,例如“保留现有五个页面,只调整话题详情到发布页的跳转,并补充发布成功状态”。若目标是生成应用而非原型,就要在提示词里明确技术形式和功能边界,例如“做一个健身打卡的React应用,包含打卡记录、连续天数和日历视图,先使用本地模拟数据”,它也有。连接完成后,新建WorkBuddy任务,

m0_67717291的博客 152

〖物流终端实战 05〗纯血鸿蒙 ArkTS 高阶性能优化:长列表渲染、组件复用与内存泄漏排查

本文深度剖析鸿蒙ArkTS高阶性能优化,直击长列表卡顿与内存泄漏痛点。针对渲染,指出ForEach全量构建的缺陷,强调采用LazyForEach(V2推荐Repeat)配合增量通知及稳定业务Key;针对组件复用,明确@Reusable仅复用实例不重置状态,必须在aboutToReuse中手动清理UI状态;针对内存泄漏,总结全局监听未注销、定时器未清理及长生命周期对象持有页面引用三大元凶,并指导通过DevEco Profiler的Heap快照排查引用链。文章强调优化需遵循“先定位后改代码”原则,助力开发者打造

Eyf • 半字节的博客 641

HarmonyOS 7 端侧 AI 图像超分的工程化落地

用户抱怨网络差的时候图片传不上去,更严重的是,大量的私密照片上传到云端,引发了严重的隐私合规审查危机。痛定思痛后,我们决定把 AI 模型直接塞进手机里,用端侧的 NPU 来做推理,但这绝非易事。我们首先在服务端对模型进行了知识蒸馏,把参数砍掉了一大半,然后利用 MindSpore Lite 的转换工具,将模型转成了鸿蒙底层支持的。即便如此,模型依然有 20 多兆,我们最终选择了 FP16 量化,牺牲了极其微小的画质,换取了内存占用减半。推理过程极其消耗 CPU 和内存,稍微大一点的图,处理时间长达几秒。

2602_97267507的博客 158

AppGallery 上架自检 SOP:签名、隐私对齐与包体校验实战【鸿蒙心迹】

上架被驳回多因签名、隐私声明与包体不一致。本文提炼“签名→隐私对齐→包体校验”自检SOP,配套一键脚本与权限三角校验代码,实现90%驳回前置拦截。通过CI强制release签名、代码/声明/功能三者权限对齐、包体完整性校验,确保提审一次过。实战清单可直接抄,让过审从运气变为流程。

wdracky的专栏 322
上一篇: 华为创新赛获奖复盘:不仅是 TTS,用 HarmonyOS Speech Kit 让你的应用秒变“哄娃神器”
下一篇: 华为创新赛获奖复盘:把手机变成“AI 哨兵”,Core Vision 实时物体检测开发实战(附危险品预警源码)
秦城季
博客等级 码龄10年 46粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值