Initial clean project import
This commit is contained in:
@@ -0,0 +1,75 @@
|
||||
/**
|
||||
* 阿里云语音服务模块入口
|
||||
* 整合 CosyVoice (TTS) 和 FunASR (ASR) 功能
|
||||
*/
|
||||
|
||||
import * as cosyvoice from './cosyvoice';
|
||||
import * as funasr from './funasr';
|
||||
import * as enrollment from './enrollment';
|
||||
import logger from '../log/main';
|
||||
|
||||
export {
|
||||
cosyvoice,
|
||||
funasr,
|
||||
enrollment
|
||||
};
|
||||
|
||||
// 导出主要函数
|
||||
export const {
|
||||
synthesizeSpeech,
|
||||
getAvailableVoices
|
||||
} = cosyvoice;
|
||||
|
||||
export const {
|
||||
recognizeAudio,
|
||||
detectAudioFormat
|
||||
} = funasr;
|
||||
|
||||
// 导出类型
|
||||
export type {
|
||||
CosyVoiceConfig,
|
||||
CosyVoiceResult
|
||||
} from './cosyvoice';
|
||||
|
||||
export type {
|
||||
FunAsrConfig,
|
||||
FunAsrResult,
|
||||
AsrSentence,
|
||||
AsrWord
|
||||
} from './funasr';
|
||||
|
||||
/**
|
||||
* 执行声音复刻流程
|
||||
*/
|
||||
export async function enrollVoice(params: {
|
||||
apiKey: string,
|
||||
audioPath: string,
|
||||
name: string
|
||||
}): Promise<{ success: boolean, voiceId?: string, error?: string }> {
|
||||
try {
|
||||
logger.info('[Aliyun] 开始执行声音复刻', { name: params.name, audioPath: params.audioPath });
|
||||
|
||||
// 1. 上传文件获取 URL
|
||||
const audioUrl = await enrollment.uploadFileToLease(params.apiKey, params.audioPath);
|
||||
|
||||
// 2. 创建音色
|
||||
// 使用 name 作为 prefix,但需过滤非法字符(仅允许数字、字母、下划线)
|
||||
// 阿里云要求 prefix: [a-zA-Z0-9_]{1,10}
|
||||
// 如果 name 有中文,替换为 custom
|
||||
let prefix = params.name.replace(/[^a-zA-Z0-9_]/g, '');
|
||||
// 阿里云要求 prefix: [a-zA-Z0-9_]{1,10}
|
||||
// 如果处理后为空,或者还是太长,则进行截断或使用默认值
|
||||
if (!prefix) {
|
||||
prefix = 'custom';
|
||||
} else if (prefix.length > 10) {
|
||||
prefix = prefix.substring(0, 10);
|
||||
}
|
||||
|
||||
const voiceId = await enrollment.createVoice(params.apiKey, audioUrl, prefix);
|
||||
|
||||
return { success: true, voiceId };
|
||||
} catch (error: any) {
|
||||
logger.error('[Aliyun] 声音复刻失败', error);
|
||||
return { success: false, error: error.message };
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user