本文引用的文件
本指南围绕“音色选择”功能,面向平台用户提供从音色特点与适用场景、音色提供商集成架构、参数配置、预览与切换体验到最佳实践的全链路使用说明。平台提供10+音色,覆盖不同性别、年龄与风格,并支持语速、音调、音量等基础参数与高级参数设置。后端通过统一的服务层聚合多家TTS提供商(如阿里云、MiniMax),前端提供直观的音色选择、参数调节与预览播放体验。
前端位于 my-uniapp-vue3,包含音色选择页面、播放器与下载组件等。
graph TB
subgraph "前端"
UI["生成页面<br/>create/index.vue"]
Store["音频状态与播放<br/>store/audio.ts"]
Player["迷你播放器<br/>components/MiniPlayer.vue"]
DL["下载组件<br/>components/AudioDownload.vue"]
end
subgraph "后端"
C["控制器<br/>tts.controller.ts"]
S["服务层<br/>tts.service.ts"]
A["阿里云提供商<br/>aliyun.provider.ts"]
M["MiniMax提供商<br/>minimax.provider.ts"]
K["Mock提供商<br/>mock.provider.ts"]
T["类型定义<br/>types/index.ts"]
CFG["配置<br/>config/index.ts"]
end
UI --> Store
UI --> C
Store --> C
C --> S
S --> A
S --> M
S --> K
S --> CFG
S --> T
Player --> Store
DL --> C
图表来源
章节来源
章节来源
后端采用“控制器-服务层-提供商适配器”的分层架构。服务层负责:
状态查询与回调
sequenceDiagram
participant U as "用户"
participant FE as "前端页面<br/>create/index.vue"
participant ST as "状态管理<br/>store/audio.ts"
participant CTRL as "控制器<br/>tts.controller.ts"
participant SVC as "服务层<br/>tts.service.ts"
participant ALI as "阿里云提供商<br/>aliyun.provider.ts"
participant MM as "MiniMax提供商<br/>minimax.provider.ts"
U->>FE : 选择音色/调节参数
FE->>CTRL : POST /tts/generate
CTRL->>SVC : generateAudio(text, voiceId, voiceParams)
SVC->>SVC : 选择提供商优先级
alt MiniMax优先
SVC->>MM : synthesize(长文本, params)
MM-->>SVC : 输出MP3路径
else 阿里云优先
SVC->>ALI : synthesize(分段, params)
ALI-->>SVC : 输出MP3路径
end
SVC->>SVC : 合并分段/上传存储
SVC-->>CTRL : 返回音频ID/URL
CTRL-->>FE : 生成任务已创建
FE-->>ST : 触发播放/下载
图表来源
章节来源
Mock:本地占位,用于开发或无API Key场景。
classDiagram
class TtsService {
+getVoices()
+generateAudio(...)
+processAudioGeneration(...)
+getAvailableProviders()
+generatePreview(...)
}
class AliyunTtsProvider {
+synthesize(text, voiceId, params, outputPath, retries, modelOverride)
}
class MiniMaxTtsProvider {
+synthesize(text, voiceId, params, outputPath, retries, _modelOverride)
-createTask(...)
-queryTask(...)
-pollUntilComplete(...)
-downloadAudio(...)
-extractMp3FromTar(...)
}
class MockTtsProvider {
+synthesize(text, voiceId, params, outputPath)
}
TtsService --> AliyunTtsProvider : "调用"
TtsService --> MiniMaxTtsProvider : "调用"
TtsService --> MockTtsProvider : "降级"
图表来源
章节来源
章节来源
前端播放:H5环境直接播放,非H5环境提示试听已播放。
sequenceDiagram
participant FE as "前端页面"
participant CTRL as "控制器<br/>tts.controller.ts"
participant SVC as "服务层<br/>tts.service.ts"
participant PRV as "提供商适配器"
FE->>CTRL : POST /tts/preview {voiceId, voiceParams}
CTRL->>SVC : generatePreview(voiceId, voiceParams)
SVC->>PRV : generate(短文本, voiceName, params)
PRV-->>SVC : 音频Buffer/URL
SVC-->>CTRL : {audioId, audioUrl}
CTRL-->>FE : 返回预览URL
FE->>FE : 播放/提示
图表来源
章节来源
确认机制:生成完成后弹窗提示,支持立即播放与分享。
flowchart TD
Start(["进入生成页"]) --> LoadVoices["加载音色列表"]
LoadVoices --> SelectVoice["点击音色卡片"]
SelectVoice --> AdjustParams["调节语速/音调/音量"]
AdjustParams --> Preview["点击试听"]
Preview --> Play["播放预览"]
Play --> Decide{"确认使用该音色?"}
Decide --> |是| Generate["提交生成请求"]
Decide --> |否| AdjustParams
Generate --> Success["生成成功弹窗"]
Success --> Action{"选择操作"}
Action --> |立即播放| Player["跳转播放器"]
Action --> |分享| Share["复制链接"]
Action --> |继续生成| AdjustParams
图表来源
章节来源
章节来源
前端通过Pinia集中管理播放状态,组件化复用播放与下载能力。
graph LR
CTRL["tts.controller.ts"] --> SVC["tts.service.ts"]
SVC --> ALI["aliyun.provider.ts"]
SVC --> MM["minimax.provider.ts"]
SVC --> MOCK["mock.provider.ts"]
SVC --> CFG["config/index.ts"]
SVC --> TYPES["types/index.ts"]
FE["create/index.vue"] --> STORE["store/audio.ts"]
STORE --> CTRL
图表来源
章节来源
章节来源
章节来源
平台通过统一的服务层抽象多家TTS提供商,结合前端直观的音色选择与参数调节界面,为用户提供了高效、稳定的音色选择与生成体验。依托预览与播放器能力,用户可在生成前快速试听并确认音色,显著提升创作效率。建议在正式生产环境中优先配置可用的API Key,并结合会员配额策略合理规划用量。
章节来源