Skip to main content
基于RTOS SDK (License模式) 实现聊天能力

RTOS SDK (License模式) 实现音量控制

本文介绍如何基于RTOS SDK(License模式)实现音量控制能力。

1. 开发准备

1.1. 前置说明

1.2. 配置音量控制

  • 百炼控制台创建应用
  • 点击技能/指令开启音量设置 在弹出的指令弹窗中,选择系统指令页签。

2. 端侧功能开发

2.1. SDK目录及文件结构说明

获取SDK包可以参考文档:RTOS C SDK(License模式)
aliyun_sdk/
├── include
│   ├── c_mmi_cmd
│   │   ├──c_mmi_cmd_volume.h
│   │   ├──c_mmi_cmd.h
│   │   └── ...
├── libs
│   ├── libc_mmi_cmd_volume.a
│   ├── libc_mmi_cmd.a
│   └── ...
└── ...
启用音量控制功能的时候需要加载libc_mmi_cmd.alibc_mmi_cmd_volume.a静态库文件。

2.2. 示例代码

SDK已将音量控制功能抽象成下列5种事件
//event 音量设置相关命令的枚举定义
enum {
    C_MMI_CMD_VOLUME_UNKNOWN = 0,
    C_MMI_CMD_VOLUME_INCREASE,
    C_MMI_CMD_VOLUME_DECREASE,
    C_MMI_CMD_VOLUME_SET,
    C_MMI_CMD_VOLUME_MUTE,
    C_MMI_CMD_VOLUME_UNMUTE
};
触发事件时传入参数格式如下
//params 音量设置相关命令的参数定义
typedef struct {
    uint32_t value;
    uint32_t type;
} c_mm_volume_param_t;
参数说明
在多模态链路中,c_mm_volume_param_t.type表示设置的音量类型,正常情况下可忽略该参数,具体枚举值如下:
enum {
    C_MM_CMD_TYPE_UNKNOWN = 0,
    C_MM_CMD_TYPE_SYSTEM,	// 系统
    C_MM_CMD_TYPE_MEDIA,	// 媒体
    C_MM_CMD_TYPE_CALL		// 通话
};
参数c_mm_volume_param_t.value取值范围0-100,映射至设备端的实际音量调整关系由应用层根据实际情况自行决定。当参数c_mm_volume_param_t.value == C_MMI_CMD_VOLUME_DEFAULT_VALUE时,表示音量调整默认等级,具体默认等级调整量由应用层根据实际情况自行决定。
示例代码
#include "c_mmi_cmd.h"
#include "c_mmi_cmd_volume.h"
static int32_t _cmd_vol_callback(uint32_t event, void *p)
{
    c_mm_volume_param_t *param = (c_mm_volume_param_t *)p;
    switch (event) {
        case C_MMI_CMD_VOLUME_SET:
            UTIL_LOG_I("set volume to [%u] for [%u]", param->value, param->type);
            break;
        case C_MMI_CMD_VOLUME_INCREASE:
            UTIL_LOG_I("increase volume by [%u] for [%u]", param->value, param->type);
            break;
        case C_MMI_CMD_VOLUME_DECREASE:
            UTIL_LOG_I("decrease volume by [%u] for [%u]", param->value, param->type);
            break;
        case C_MMI_CMD_VOLUME_MUTE:
            UTIL_LOG_I("mute");
            break;
        case C_MMI_CMD_VOLUME_UNMUTE:
            UTIL_LOG_I("unmute");
            break;
        default:
            UTIL_LOG_W("invalid volume command");
            return UTIL_ERR_FAIL;
            break;
    }
    return UTIL_SUCCESS;
}
int32_t main(void)
{
    int32_t err = c_mmi_cmd_volume_register(_cmd_vol_callback);
    if (err) {
        UTIL_LOG_E("volume no load");
    }
    return 0;
}
Managed Agents
数据连接
Skill
应用评测
应用广场
权限管理