254 lines
13 KiB
HTML
254 lines
13 KiB
HTML
{% extends "base.html" %}
|
||
|
||
{% block title %}CosyVoice API 测试 - 儿童语言学习系统{% endblock %}
|
||
|
||
{% block content %}
|
||
<div class="container py-4">
|
||
<!-- 页面标题 -->
|
||
<div class="row mb-4">
|
||
<div class="col-12">
|
||
<div class="d-flex align-items-center">
|
||
<a href="{{ url_for('main.dashboard') }}" class="btn btn-outline-secondary me-3">
|
||
<i class="fas fa-arrow-left me-2"></i>返回主页
|
||
</a>
|
||
<div>
|
||
<h2 class="fw-bold mb-1">
|
||
<i class="fas fa-microphone-alt text-primary me-2"></i>
|
||
CosyVoice API 测试
|
||
</h2>
|
||
<p class="text-muted mb-0">测试语音合成的各种功能</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 连接状态检测 -->
|
||
<div class="row mb-4">
|
||
<div class="col-12">
|
||
<div class="card border-0 shadow-sm">
|
||
<div class="card-body">
|
||
<h5 class="card-title">
|
||
<i class="fas fa-plug me-2"></i>服务连接状态
|
||
</h5>
|
||
<div class="d-flex align-items-center">
|
||
<button id="test-connection-btn" class="btn btn-primary me-3">
|
||
<i class="fas fa-wifi me-2"></i>测试连接
|
||
</button>
|
||
<div id="connection-status" class="flex-grow-1">
|
||
<span class="text-muted">点击测试连接按钮检查服务状态</span>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 功能测试区域 -->
|
||
<div class="row">
|
||
<!-- 预训练音色测试 -->
|
||
<div class="col-lg-6 mb-4">
|
||
<div class="card border-0 shadow-sm h-100">
|
||
<div class="card-body">
|
||
<h5 class="card-title text-primary">
|
||
<i class="fas fa-user-tie me-2"></i>预训练音色测试
|
||
</h5>
|
||
<form id="preset-voice-form">
|
||
<div class="mb-3">
|
||
<label class="form-label">要合成的文本</label>
|
||
<textarea class="form-control" id="preset-text" rows="3"
|
||
placeholder="输入要转换成语音的文字...">今天天气真不错,适合出门散步。</textarea>
|
||
</div>
|
||
<div class="mb-3">
|
||
<label class="form-label">选择音色</label>
|
||
<select class="form-select" id="preset-voice">
|
||
<option value="中文女">中文女</option>
|
||
<option value="中文男">中文男</option>
|
||
<option value="播报女">播报女</option>
|
||
<option value="新闻播报男">新闻播报男</option>
|
||
<option value="英文女">英文女</option>
|
||
<option value="英文男">英文男</option>
|
||
</select>
|
||
</div>
|
||
<div class="row mb-3">
|
||
<div class="col-6">
|
||
<label class="form-label">随机种子</label>
|
||
<div class="input-group">
|
||
<input type="number" class="form-control" id="preset-seed" value="42">
|
||
<button type="button" class="btn btn-outline-secondary" id="preset-random-seed">
|
||
<i class="fas fa-dice"></i>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<div class="col-6">
|
||
<label class="form-label">语速</label>
|
||
<input type="range" class="form-range" id="preset-speed" min="0.5" max="2" step="0.1" value="1">
|
||
<small class="text-muted">当前: <span id="preset-speed-value">1.0</span>x</small>
|
||
</div>
|
||
</div>
|
||
<button type="submit" class="btn btn-primary w-100">
|
||
<i class="fas fa-play me-2"></i>生成语音
|
||
</button>
|
||
</form>
|
||
<div id="preset-result" class="mt-3" style="display: none;">
|
||
<div class="alert alert-success">
|
||
<i class="fas fa-check-circle me-2"></i>生成成功!
|
||
<audio controls class="d-block mt-2 w-100">
|
||
<source id="preset-audio-source" type="audio/wav">
|
||
您的浏览器不支持音频播放。
|
||
</audio>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 自然语言控制测试 -->
|
||
<div class="col-lg-6 mb-4">
|
||
<div class="card border-0 shadow-sm h-100">
|
||
<div class="card-body">
|
||
<h5 class="card-title text-success">
|
||
<i class="fas fa-comments me-2"></i>自然语言控制测试
|
||
</h5>
|
||
<form id="natural-control-form">
|
||
<div class="mb-3">
|
||
<label class="form-label">要合成的文本</label>
|
||
<textarea class="form-control" id="natural-text" rows="3"
|
||
placeholder="输入要转换成语音的文字...">这是一段测试文本,用于验证自然语言控制功能。</textarea>
|
||
</div>
|
||
<div class="mb-3">
|
||
<label class="form-label">语音指令</label>
|
||
<textarea class="form-control" id="natural-instruction" rows="2"
|
||
placeholder="描述你想要的语音风格...">请用温柔甜美的女声朗读</textarea>
|
||
<div class="form-text">
|
||
示例:请用活泼开朗的语调、请用严肃正式的男声、请用轻柔的语气等
|
||
</div>
|
||
</div>
|
||
<div class="mb-3">
|
||
<label class="form-label">随机种子</label>
|
||
<div class="input-group">
|
||
<input type="number" class="form-control" id="natural-seed" value="42">
|
||
<button type="button" class="btn btn-outline-secondary" id="natural-random-seed">
|
||
<i class="fas fa-dice"></i>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<button type="submit" class="btn btn-success w-100">
|
||
<i class="fas fa-magic me-2"></i>生成语音
|
||
</button>
|
||
</form>
|
||
<div id="natural-result" class="mt-3" style="display: none;">
|
||
<div class="alert alert-success">
|
||
<i class="fas fa-check-circle me-2"></i>生成成功!
|
||
<audio controls class="d-block mt-2 w-100">
|
||
<source id="natural-audio-source" type="audio/wav">
|
||
您的浏览器不支持音频播放。
|
||
</audio>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 语音克隆测试 -->
|
||
<div class="col-12 mb-4">
|
||
<div class="card border-0 shadow-sm">
|
||
<div class="card-body">
|
||
<h5 class="card-title text-warning">
|
||
<i class="fas fa-clone me-2"></i>语音克隆测试
|
||
</h5>
|
||
<div class="row">
|
||
<div class="col-lg-6">
|
||
<h6 class="fw-bold mb-3">1. 上传参考音频</h6>
|
||
<form id="audio-upload-form" enctype="multipart/form-data">
|
||
<div class="mb-3">
|
||
<input type="file" class="form-control" id="reference-audio"
|
||
accept=".wav,.mp3,.m4a,.flac" required>
|
||
<div class="form-text">
|
||
支持格式:WAV、MP3、M4A、FLAC,建议3-10秒
|
||
</div>
|
||
</div>
|
||
<button type="submit" class="btn btn-outline-warning">
|
||
<i class="fas fa-upload me-2"></i>上传并识别
|
||
</button>
|
||
</form>
|
||
<div id="upload-result" class="mt-3" style="display: none;">
|
||
<div class="alert alert-info">
|
||
<h6><i class="fas fa-text-width me-2"></i>识别的文本内容:</h6>
|
||
<textarea class="form-control mt-2" id="recognized-text" rows="3"></textarea>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
<div class="col-lg-6">
|
||
<h6 class="fw-bold mb-3">2. 生成克隆语音</h6>
|
||
<form id="voice-clone-form">
|
||
<div class="mb-3">
|
||
<label class="form-label">要合成的文本</label>
|
||
<textarea class="form-control" id="clone-text" rows="3"
|
||
placeholder="输入要用克隆声音说的话...">这是使用克隆声音合成的新内容。</textarea>
|
||
</div>
|
||
<div class="mb-3">
|
||
<label class="form-label">随机种子</label>
|
||
<div class="input-group">
|
||
<input type="number" class="form-control" id="clone-seed" value="42">
|
||
<button type="button" class="btn btn-outline-secondary" id="clone-random-seed">
|
||
<i class="fas fa-dice"></i>
|
||
</button>
|
||
</div>
|
||
</div>
|
||
<button type="submit" class="btn btn-warning w-100" disabled>
|
||
<i class="fas fa-clone me-2"></i>生成克隆语音
|
||
</button>
|
||
</form>
|
||
<div id="clone-result" class="mt-3" style="display: none;">
|
||
<div class="alert alert-success">
|
||
<i class="fas fa-check-circle me-2"></i>克隆成功!
|
||
<audio controls class="d-block mt-2 w-100">
|
||
<source id="clone-audio-source" type="audio/wav">
|
||
您的浏览器不支持音频播放。
|
||
</audio>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- 测试记录区域 -->
|
||
<div class="row">
|
||
<div class="col-12">
|
||
<div class="card border-0 shadow-sm">
|
||
<div class="card-body">
|
||
<h5 class="card-title">
|
||
<i class="fas fa-history me-2"></i>测试记录
|
||
<button class="btn btn-outline-secondary btn-sm float-end" id="clear-log">
|
||
<i class="fas fa-trash me-1"></i>清空
|
||
</button>
|
||
</h5>
|
||
<div id="test-log" class="border rounded p-3" style="height: 300px; overflow-y: auto; background-color: #f8f9fa;">
|
||
<p class="text-muted">测试记录将显示在这里...</p>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
<!-- Loading Modal -->
|
||
<div class="modal fade" id="loadingModal" data-bs-backdrop="static" data-bs-keyboard="false" tabindex="-1">
|
||
<div class="modal-dialog modal-dialog-centered">
|
||
<div class="modal-content">
|
||
<div class="modal-body text-center py-4">
|
||
<div class="spinner-border text-primary mb-3" role="status"></div>
|
||
<h5 id="loading-message">正在处理中...</h5>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
{% endblock %}
|
||
|
||
{% block scripts %}
|
||
<script src="{{ url_for('static', filename='js/voice_test.js') }}"></script>
|
||
{% endblock %}
|