Files
2026-01-12 17:52:15 +08:00

173 lines
5.8 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/**
* @module BaseBeautyState
* @module_description
* 基础美颜管理模块
* 核心功能:提供磨皮、美白、红润等基础美颜效果调节,支持实时美颜参数调整。
* 技术特点:支持实时美颜处理、参数平滑调节、性能优化等高级技术。
* 业务价值:为直播平台提供基础的美颜能力,提升用户形象和直播质量。
* 应用场景:美颜直播、形象优化、美颜调节、直播美化等需要美颜功能的场景。
*/
import { ref } from "vue";
import { SetSmoothLevelOptions, SetWhitenessLevelOptions, SetRuddyLevelOptions } from "@/uni_modules/tuikit-atomic-x";
import { getRTCRoomEngineManager } from "./rtcRoomEngine";
import { callUTSFunction, safeJsonParse } from "../utils/utsUtils";
/**
* 磨皮级别 取值范围[0,9]: 0 表示关闭9 表示效果最明显
* @type {Ref<number>}
* @memberof module:BaseBeautyState
* @example
* import { useBaseBeautyState } from '@/uni_modules/tuikit-atomic-x/state/BaseBeautyState';
* const { smoothLevel } = useBaseBeautyState('your_live_id');
*
* // 监听磨皮级别变化
* watch(smoothLevel, (newLevel) => {
* console.log('磨皮级别:', newLevel);
* });
*
* // 获取当前磨皮级别
* const level = smoothLevel.value;
* console.log('当前磨皮级别:', level);
*/
const smoothLevel = ref<number>(0);
/**
* 美白级别 取值范围[0,9]: 0 表示关闭9 表示效果最明显
* @type {Ref<number>}
* @memberof module:BaseBeautyState
* @example
* import { useBaseBeautyState } from '@/uni_modules/tuikit-atomic-x/state/BaseBeautyState';
* const { whitenessLevel } = useBaseBeautyState('your_live_id');
*
* // 监听美白级别变化
* watch(whitenessLevel, (newLevel) => {
* console.log('美白级别:', newLevel);
* });
*
* // 获取当前美白级别
* const level = whitenessLevel.value;
* console.log('当前美白级别:', level);
*/
const whitenessLevel = ref<number>(0);
/**
* 红润级别 取值范围[0,9]: 0 表示关闭9 表示效果最明显
* @type {Ref<number>}
* @memberof module:BaseBeautyState
* @example
* import { useBaseBeautyState } from '@/uni_modules/tuikit-atomic-x/state/BaseBeautyState';
* const { ruddyLevel } = useBaseBeautyState('your_live_id');
*
* // 监听红润级别变化
* watch(ruddyLevel, (newLevel) => {
* console.log('红润级别:', newLevel);
* });
*
* // 获取当前红润级别
* const level = ruddyLevel.value;
* console.log('当前红润级别:', level);
*/
const ruddyLevel = ref<number>(0);
const realUiValues = ref({
whiteness: 0,
smooth: 0,
ruddy: 0
});
/**
* 设置磨皮级别
* @param {SetSmoothLevelOptions} params - 磨皮参数,取值范围[0,9]: 0 表示关闭9 表示效果最明显
* @returns {void}
* @memberof module:BaseBeautyState
* @example
* import { useBaseBeautyState } from '@/uni_modules/tuikit-atomic-x/state/BaseBeautyState';
* const { setSmoothLevel } = useBaseBeautyState('your_live_id');
* setSmoothLevel({ smoothLevel: 5 });
*/
function setSmoothLevel(params: SetSmoothLevelOptions): void {
callUTSFunction("setSmoothLevel", params);
}
/**
* 设置美白级别
* @param {SetWhitenessLevelOptions} params - 美白参数,取值范围[0,9]: 0 表示关闭9 表示效果最明显
* @returns {void}
* @memberof module:BaseBeautyState
* @example
* import { useBaseBeautyState } from '@/uni_modules/tuikit-atomic-x/state/BaseBeautyState';
* const { setWhitenessLevel } = useBaseBeautyState('your_live_id');
* setWhitenessLevel({ whitenessLevel: 6 });
*/
function setWhitenessLevel(params: SetWhitenessLevelOptions): void {
callUTSFunction("setWhitenessLevel", params);
}
/**
* 设置红润级别
* @param {SetRuddyLevelOptions} params - 红润参数,取值范围[0,9]: 0 表示关闭9 表示效果最明显
* @returns {void}
* @memberof module:BaseBeautyState
* @example
* import { useBaseBeautyState } from '@/uni_modules/tuikit-atomic-x/state/BaseBeautyState';
* const { setRuddyLevel } = useBaseBeautyState('your_live_id');
* setRuddyLevel({ ruddyLevel: 4 });
*/
function setRuddyLevel(params: SetRuddyLevelOptions): void {
callUTSFunction("setRuddyLevel", params);
}
function setRealUiValue(type: 'whiteness' | 'smooth' | 'ruddy', value: number): void {
realUiValues.value[type] = value;
}
function getRealUiValue(type: 'whiteness' | 'smooth' | 'ruddy'): number {
return realUiValues.value[type];
}
function resetRealUiValues(): void {
realUiValues.value.whiteness = 0;
realUiValues.value.smooth = 0;
realUiValues.value.ruddy = 0;
}
const onBeautyStoreChanged = (eventName: string, res: string): void => {
try {
if (eventName === "smoothLevel") {
const data = safeJsonParse<number>(res, 0);
smoothLevel.value = data;
} else if (eventName === "whitenessLevel") {
const data = safeJsonParse<number>(res, 0);
whitenessLevel.value = data;
} else if (eventName === "ruddyLevel") {
const data = safeJsonParse<number>(res, 0);
ruddyLevel.value = data;
}
} catch (error) {
console.error("onBeautyStoreChanged error:", error);
}
};
function bindEvent(liveID: string): void {
getRTCRoomEngineManager().on("beautyStoreChanged", onBeautyStoreChanged, liveID);
}
export function useBaseBeautyState(liveID: string) {
bindEvent(liveID);
return {
smoothLevel, // 磨皮级别状态
whitenessLevel, // 美白级别状态
ruddyLevel, // 红润级别状态
setSmoothLevel, // 设置磨皮级别方法
setWhitenessLevel, // 设置美白级别方法
setRuddyLevel, // 设置红润级别方法
realUiValues,
setRealUiValue,
getRealUiValue,
resetRealUiValues,
};
}
export default useBaseBeautyState;