/**
|
|
* 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
|
|
};
|