import { Transformer } from './interface'; interface Unit { hue: number; saturation: number; } export interface MicMusicData { v?: number; power: boolean; id?: number; isLight: number; mode: number; speed?: number; sensitivity?: number; a?: number; b?: number; c?: number; brightness: number; colors: Unit[]; } /** * 本地麦克风音乐律动标准 DP 协议转换器,用于本地音乐律动配置与 DP 十六进制协议的双向转换 * * @public * @since @ray-js/panel-sdk 1.0.0 * @remarks * 适用于灯带类产品的本地麦克风音乐 DP(如 `mic_music`),支持多种音乐变化模式(跳变、渐变、呼吸、闪烁) * 和多颜色单元配置。协议包含电源开关、模式 ID、灯光状态、速度、灵敏度、亮度及颜色列表等。 * 每个颜色单元为 hue(4位) + saturation(4位)。 * * @example * ```ts * import { MicMusicTransformer } from '@ray-js/panel-sdk'; * * const transformer = new MicMusicTransformer(); * // 解析本地音乐 DP 字符串 * const data = transformer.parser('0101003364320000006400000064007800640078006400f0006400500064011800640190006401180064'); * * // 格式化为 DP 字符串 * const dpStr = transformer.formatter({ * v: 1, power: true, id: 0, isLight: 0, mode: 3, * speed: 100, sensitivity: 50, a: 0, b: 0, c: 0, * brightness: 100, * colors: [{ hue: 0, saturation: 100 }, { hue: 120, saturation: 100 }], * }); * ``` */ export default class MicMusicTransformer implements Transformer { /** * @internal */ uuid: string; /** * @internal */ defaultValue: MicMusicData; /** * 创建本地麦克风音乐转换器实例 * * @public * @since @ray-js/panel-sdk 1.0.0 * @param uuid - DP 标识符,默认为 `mic_music` 标准 DP Code * @param defaultValue - 默认音乐数据,当解析失败时返回此值 */ constructor(uuid?: string, defaultValue?: null); /** * 解析颜色单元列表 * * @internal * @param step - generateDpStrStep 生成的步进解析函数 * @returns 颜色单元数组,每项包含 hue 和 saturation */ parseUnits(step: any): never[]; /** * 校验字符串是否为合法的十六进制字符串 * * @internal * @param str - 待校验字符串 * @returns 是否为合法十六进制字符串 */ isHexadecimal(str: any): boolean; /** * 将 DP 十六进制字符串解析为本地音乐律动数据对象 * * @public * @since @ray-js/panel-sdk 1.0.0 * @param value - 十六进制 DP 字符串 * @returns 本地音乐数据对象,包含版本、电源、模式、速度、灵敏度、亮度、颜色列表等;解析失败时返回默认值 * * @example * ```ts * const data = transformer.parser('0101003364320000006400000064007800640078006400f00064'); * // => { v: 1, power: true, id: 0, isLight: 0, mode: 3, speed: 100, sensitivity: 50, ... } * ``` */ parser(value: string): MicMusicData | { v: any; power: boolean; id: any; isLight: number; mode: number; sensitivity: any; speed: any; a: any; b: any; c: any; brightness: any; colors: never[]; }; /** * 将十进制数值转为指定长度的十六进制字符串 * * @internal * @param value - 十进制数值或布尔值 * @param length - 目标十六进制字符串长度 * @returns 补零后的十六进制字符串 */ to16(value: number | boolean, length: number): string; /** * 将本地音乐律动数据对象格式化为 DP 十六进制字符串 * * @public * @since @ray-js/panel-sdk 1.0.0 * @param data - 本地音乐数据对象,包含版本、电源、模式、颜色列表等 * @returns 十六进制 DP 字符串;data 为空时返回空字符串 * * @example * ```ts * const dpStr = transformer.formatter({ * v: 1, power: true, id: 0, isLight: 0, mode: 3, * speed: 100, sensitivity: 50, a: 0, b: 0, c: 0, * brightness: 100, * colors: [{ hue: 0, saturation: 100 }, { hue: 120, saturation: 100 }], * }); * ``` */ formatter(data: MicMusicData): string; } export {};