136 lines
3.5 KiB
TypeScript
136 lines
3.5 KiB
TypeScript
/**
|
|
* 音效系统 - 前端 IPC 调用包装
|
|
*/
|
|
|
|
|
|
const soundEffect = {
|
|
/**
|
|
* 获取所有内置音效
|
|
*/
|
|
async getBuiltinEffects() {
|
|
try {
|
|
return await ipcRenderer.invoke('soundEffect:getBuiltinEffects');
|
|
} catch (error) {
|
|
console.error('[soundEffect:getBuiltinEffects] IPC 调用失败:', error);
|
|
throw error;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 🆕 获取所有音效(内置 + 用户自定义)
|
|
*/
|
|
async getAllEffects() {
|
|
try {
|
|
return await ipcRenderer.invoke('soundEffect:getAllEffects');
|
|
} catch (error) {
|
|
console.error('[soundEffect:getAllEffects] IPC 调用失败:', error);
|
|
throw error;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 获取所有用户自定义音效
|
|
*/
|
|
async getUserEffects() {
|
|
try {
|
|
return await ipcRenderer.invoke('soundEffect:getUserEffects');
|
|
} catch (error) {
|
|
console.error('[soundEffect:getUserEffects] IPC 调用失败:', error);
|
|
throw error;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 导入用户音效文件
|
|
*/
|
|
async importUserEffect(filePath: string, name: string, description?: string) {
|
|
try {
|
|
return await ipcRenderer.invoke('soundEffect:importUserEffect', {
|
|
filePath,
|
|
name,
|
|
description
|
|
});
|
|
} catch (error) {
|
|
console.error('[soundEffect:importUserEffect] IPC 调用失败:', error);
|
|
throw error;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 删除用户自定义音效
|
|
*/
|
|
async deleteUserEffect(effectId: string) {
|
|
try {
|
|
return await ipcRenderer.invoke('soundEffect:deleteUserEffect', effectId);
|
|
} catch (error) {
|
|
console.error('[soundEffect:deleteUserEffect] IPC 调用失败:', error);
|
|
throw error;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 生成音效文件
|
|
*/
|
|
async generateEffect(effectId: string, params: any, outputPath: string) {
|
|
try {
|
|
return await ipcRenderer.invoke('soundEffect:generateEffect', {
|
|
effectId,
|
|
params,
|
|
outputPath
|
|
});
|
|
} catch (error) {
|
|
console.error('[soundEffect:generateEffect] IPC 调用失败:', error);
|
|
throw error;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 预览音效
|
|
* @param effectId 音效ID(内置或用户自定义,用户音效使用 user_ 前缀)
|
|
* @param userEffectId 已弃用,保留用于兼容
|
|
*/
|
|
async previewEffect(effectId?: string, userEffectId?: string) {
|
|
try {
|
|
// 统一使用 effectId,兼容旧的调用方式
|
|
const id = effectId || userEffectId;
|
|
return await ipcRenderer.invoke('soundEffect:previewEffect', {
|
|
effectId: id
|
|
});
|
|
} catch (error) {
|
|
console.error('[soundEffect:previewEffect] IPC 调用失败:', error);
|
|
throw error;
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 🆕 获取音效文件路径(用于视频生成时混音)
|
|
*/
|
|
async getFilePath(effectId?: string, userEffectId?: string) {
|
|
try {
|
|
return await ipcRenderer.invoke('soundEffect:getFilePath', {
|
|
effectId,
|
|
userEffectId
|
|
});
|
|
} catch (error) {
|
|
console.error('[soundEffect:getFilePath] IPC 调用失败:', error);
|
|
return { success: false, message: `获取失败: ${error}` };
|
|
}
|
|
},
|
|
|
|
/**
|
|
* 🆕 批量获取音效文件路径(用于视频生成时的批量处理)
|
|
*/
|
|
async getBatchFilePaths(soundInstances: any[]) {
|
|
try {
|
|
return await ipcRenderer.invoke('soundEffect:getBatchFilePaths', {
|
|
soundInstances
|
|
});
|
|
} catch (error) {
|
|
console.error('[soundEffect:getBatchFilePaths] IPC 调用失败:', error);
|
|
return { success: false, message: `获取失败: ${error}` };
|
|
}
|
|
}
|
|
};
|
|
|
|
export default soundEffect;
|