四零语境后端代码仓库
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

243 lines
5.9 KiB

/**
* UniApp TTS接口配置文件
* 用于配置文字转语音相关的API接口和参数
*/
// API配置
export const API_CONFIG = {
// 开发环境API地址
DEV_BASE_URL: 'http://localhost:8080',
// 生产环境API地址(请根据实际情况修改)
PROD_BASE_URL: 'https://your-domain.com',
// 接口路径
ENDPOINTS: {
// 获取音色列表
VOICE_LIST: '/appletApi/tts/list',
// 文字转语音
TEXT_TO_VOICE: '/appletApi/tts/textToVoice'
},
// 请求超时时间(毫秒)
TIMEOUT: 30000
};
// TTS参数配置
export const TTS_CONFIG = {
// 语速配置
SPEED: {
MIN: -2,
MAX: 6,
DEFAULT: 0,
OPTIONS: [
{ value: -2, label: '0.6倍速', description: '很慢' },
{ value: -1, label: '0.8倍速', description: '慢' },
{ value: 0, label: '1.0倍速', description: '正常' },
{ value: 1, label: '1.2倍速', description: '快' },
{ value: 2, label: '1.5倍速', description: '很快' },
{ value: 6, label: '2.5倍速', description: '极快' }
]
},
// 音量配置
VOLUME: {
MIN: -10,
MAX: 10,
DEFAULT: 0
},
// 音频格式配置
CODEC: {
OPTIONS: [
{ value: 'wav', label: 'WAV', description: '无损音质,文件较大' },
{ value: 'mp3', label: 'MP3', description: '压缩音质,文件适中' },
{ value: 'pcm', label: 'PCM', description: '原始音频,文件最大' }
],
DEFAULT: 'wav'
},
// 文本限制
TEXT: {
MAX_LENGTH: 500,
MIN_LENGTH: 1
}
};
// 错误码配置
export const ERROR_CODES = {
// 网络错误
NETWORK_ERROR: 'NETWORK_ERROR',
// 参数错误
PARAM_ERROR: 'PARAM_ERROR',
// 服务器错误
SERVER_ERROR: 'SERVER_ERROR',
// 音频播放错误
AUDIO_ERROR: 'AUDIO_ERROR',
// 文件操作错误
FILE_ERROR: 'FILE_ERROR'
};
// 错误消息配置
export const ERROR_MESSAGES = {
[ERROR_CODES.NETWORK_ERROR]: '网络连接失败,请检查网络设置',
[ERROR_CODES.PARAM_ERROR]: '参数错误,请检查输入内容',
[ERROR_CODES.SERVER_ERROR]: '服务器错误,请稍后重试',
[ERROR_CODES.AUDIO_ERROR]: '音频播放失败,请重试',
[ERROR_CODES.FILE_ERROR]: '文件操作失败,请重试'
};
// 工具函数
export const UTILS = {
/**
* 获取当前环境的API基础地址
*/
getBaseUrl() {
// #ifdef MP-WEIXIN
// 微信小程序环境
return process.env.NODE_ENV === 'production' ? API_CONFIG.PROD_BASE_URL : API_CONFIG.DEV_BASE_URL;
// #endif
// #ifdef H5
// H5环境
return process.env.NODE_ENV === 'production' ? API_CONFIG.PROD_BASE_URL : API_CONFIG.DEV_BASE_URL;
// #endif
// #ifdef APP-PLUS
// App环境
return API_CONFIG.PROD_BASE_URL;
// #endif
return API_CONFIG.DEV_BASE_URL;
},
/**
* 构建完整的API地址
* @param {string} endpoint 接口路径
*/
buildApiUrl(endpoint) {
return this.getBaseUrl() + endpoint;
},
/**
* 格式化文件大小
* @param {number} bytes 字节数
*/
formatFileSize(bytes) {
if (bytes === 0) return '0 B';
const k = 1024;
const sizes = ['B', 'KB', 'MB', 'GB'];
const i = Math.floor(Math.log(bytes) / Math.log(k));
return parseFloat((bytes / Math.pow(k, i)).toFixed(2)) + ' ' + sizes[i];
},
/**
* 验证文本长度
* @param {string} text 文本内容
*/
validateText(text) {
if (!text || typeof text !== 'string') {
return { valid: false, message: '请输入文本内容' };
}
const trimmedText = text.trim();
if (trimmedText.length < TTS_CONFIG.TEXT.MIN_LENGTH) {
return { valid: false, message: '文本内容不能为空' };
}
if (trimmedText.length > TTS_CONFIG.TEXT.MAX_LENGTH) {
return { valid: false, message: `文本长度不能超过${TTS_CONFIG.TEXT.MAX_LENGTH}个字符` };
}
return { valid: true, text: trimmedText };
},
/**
* 验证语速参数
* @param {number} speed 语速值
*/
validateSpeed(speed) {
if (typeof speed !== 'number') {
return { valid: false, message: '语速参数必须为数字' };
}
if (speed < TTS_CONFIG.SPEED.MIN || speed > TTS_CONFIG.SPEED.MAX) {
return { valid: false, message: `语速范围为${TTS_CONFIG.SPEED.MIN}${TTS_CONFIG.SPEED.MAX}` };
}
return { valid: true, speed };
},
/**
* 验证音量参数
* @param {number} volume 音量值
*/
validateVolume(volume) {
if (typeof volume !== 'number') {
return { valid: false, message: '音量参数必须为数字' };
}
if (volume < TTS_CONFIG.VOLUME.MIN || volume > TTS_CONFIG.VOLUME.MAX) {
return { valid: false, message: `音量范围为${TTS_CONFIG.VOLUME.MIN}${TTS_CONFIG.VOLUME.MAX}` };
}
return { valid: true, volume };
},
/**
* 获取语速描述
* @param {number} speed 语速值
*/
getSpeedDescription(speed) {
const option = TTS_CONFIG.SPEED.OPTIONS.find(item => item.value === speed);
return option ? option.description : '未知';
},
/**
* 获取音频格式描述
* @param {string} codec 音频格式
*/
getCodecDescription(codec) {
const option = TTS_CONFIG.CODEC.OPTIONS.find(item => item.value === codec);
return option ? option.description : '未知格式';
},
/**
* 生成唯一ID
*/
generateId() {
return 'id_' + Date.now() + '_' + Math.random().toString(36).substr(2, 9);
},
/**
* 获取当前时间戳
*/
getCurrentTimestamp() {
return Date.now();
},
/**
* 格式化时间
* @param {number} timestamp 时间戳
*/
formatTime(timestamp) {
const date = new Date(timestamp);
return date.toLocaleString('zh-CN', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit'
});
}
};
// 默认导出配置对象
export default {
API_CONFIG,
TTS_CONFIG,
ERROR_CODES,
ERROR_MESSAGES,
UTILS
};