no message

This commit is contained in:
Evan
2026-09-14 17:52:02 +08:00
parent 11d7496b54
commit 4499d7fdef
369 changed files with 39 additions and 29 deletions

View File

@@ -852,7 +852,7 @@ class MenuBar extends React.Component {
let realLvId_tmp = '';
// 发送消息给 Unity 实例,切换关卡
if (localStorage.getItem('platformMode') === 'normal') {
realLvId_tmp = CONFIG.getRealLvId(window.gamelvdataJson.gamelv, window.gamelvdataJson.gameid, window.gamelvdataJson.ismatch, window.gamelvdataJson.gameNumber) + window.gamelvdata.currentlv;
realLvId_tmp = CONFIG.getRealLvId(window.gamelvdataJson.gamelv, window.gamelvdataJson.gameid, window.gamelvdataJson.ismatch, window.gamelvdataJson.gameNumber, window.gamelvdataJson.gamemode) + window.gamelvdata.currentlv;
} else {
realLvId_tmp = CONFIG.getRealLvId(window.gamelvdataJson.gamelv, window.gamelvdataJson.gameid, window.gamelvdataJson.ismatch, window.gamelvdataJson.gameNumber);
}
@@ -902,7 +902,8 @@ class MenuBar extends React.Component {
window.gamelvdataJson.gamelv,
window.gamelvdataJson.gameid,
window.gamelvdataJson.ismatch,
window.gamelvdataJson.gameNumber
window.gamelvdataJson.gameNumber,
window.gamelvdataJson.gamemode
) + (window.gamelvdata ? window.gamelvdata.currentlv : '');
} else {
realLvId_tmp = CONFIG.getRealLvId(

View File

@@ -148,7 +148,7 @@ const CurrentLevelChoose = ({ onCancel }) => {
console.warn('window.loadCppProject 未定义或不是函数');
}
}
const realLvId_tmp = CONFIG.getRealLvId(window.gamelvdataJson.gamelv, window.gamelvdataJson.gameid, window.gamelvdataJson.ismatch, window.gamelvdataJson.gameNumber);
const realLvId_tmp = CONFIG.getRealLvId(window.gamelvdataJson.gamelv, window.gamelvdataJson.gameid, window.gamelvdataJson.ismatch, window.gamelvdataJson.gameNumber, window.gamelvdataJson.gamemode);
const realLvId = realLvId_tmp + cellIndex
window.unityInstance.SendMessage("GameController", "SwitchLevel", realLvId);
CONFIG.checkGameStyle(realLvId);

View File

@@ -144,7 +144,7 @@ const CurrentLevelChoose = ({ onCancel }) => {
// 清除所有代码
window.loadPythonProject(`` + `\n`.repeat(50));
}
const realLvId_tmp = CONFIG.getRealLvId(window.gamelvdataJson.gamelv, window.gamelvdataJson.gameid, window.gamelvdataJson.ismatch, window.gamelvdataJson.gameNumber);
const realLvId_tmp = CONFIG.getRealLvId(window.gamelvdataJson.gamelv, window.gamelvdataJson.gameid, window.gamelvdataJson.ismatch, window.gamelvdataJson.gameNumber, window.gamelvdataJson.gamemode);
const realLvId = realLvId_tmp + cellIndex
window.unityInstance.SendMessage("GameController", "SwitchLevel", realLvId);
CONFIG.checkGameStyle(realLvId);

View File

@@ -613,18 +613,18 @@
<div class="section-card" id="ttsVoiceCard">
<div class="section-title" style="margin-bottom:4px;">选择音色</div>
<div class="section-sub" style="margin-bottom:10px;font-size:12px;">想用自己的声音?先在下方「自定义音色」录一段 5~10 秒</div>
<div class="section-sub" style="margin-bottom:10px;font-size:12px;">选「我的声音」前,请先在下方录制或上传 5~10 秒参考人声</div>
<div class="voice-grid" id="ttsVoiceGrid"></div>
</div>
<div class="section-card" id="ttsMineVoiceCard">
<div class="section-title">自定义音色(录一段你的声音)</div>
<div class="section-sub">录一段 10 秒以内的话AI 就能模仿你的声音说话啦!建议 5~10 秒,清晰无背景音(必填)</div>
<div class="section-sub">仅选择「我的声音」时需要。录一段 5~10 秒清晰人声AI 就能模仿你说话</div>
<div class="record-box">
<div class="record-box__icon"><img src="../images/aigc/icon-voice-mic.png" alt="" /></div>
<div class="record-box__body">
<div class="record-box__title">录一段你的声音</div>
<div class="record-box__sub">请录制 5~10 秒清晰人声,完成后即可选中「我的声音」</div>
<div class="record-box__sub">完成后即可选中「我的声音」;选其他音色无需录音</div>
<div class="record-box__status" id="recordStatus"></div>
</div>
<div class="record-box__actions">
@@ -1331,19 +1331,21 @@
if (!selectedTtsVoiceId || !voiceOpt) {
return fail('请选择音色', document.getElementById('ttsVoiceCard'));
}
// 无论选哪种音色,都必须录制/上传参考音频
if (!voiceBlob) {
return fail('请先录制或上传自定义音色', mineCard);
}
if (!isVoiceDurationValid(voiceDurationSec)) {
return fail(
'自定义音色需 ' + MIN_VOICE_SECONDS + '~' + MAX_VOICE_SECONDS + ' 秒,当前约 ' +
Math.max(0, Math.floor(Number(voiceDurationSec) || 0)) + ' 秒,请重新录制或上传',
mineCard
);
}
if (voiceBlob.size > 10 * 1024 * 1024) {
return fail('参考音频不能超过 10MB', mineCard);
// 只有选择「我的声音」时才必须录制/上传参考音频
if (voiceOpt.mine) {
if (!voiceBlob) {
return fail('请先录制或上传自定义音色', mineCard);
}
if (!isVoiceDurationValid(voiceDurationSec)) {
return fail(
'自定义音色需 ' + MIN_VOICE_SECONDS + '~' + MAX_VOICE_SECONDS + ' 秒,当前约 ' +
Math.max(0, Math.floor(Number(voiceDurationSec) || 0)) + ' 秒,请重新录制或上传',
mineCard
);
}
if (voiceBlob.size > 10 * 1024 * 1024) {
return fail('参考音频不能超过 10MB', mineCard);
}
}
if (!speedEl || !isFinite(speedIdx) || speedIdx < 0 || speedIdx > 7 || !speedLabels[speedIdx]) {
return fail('请设置语速', document.getElementById('ttsSliderCard') || speedEl);
@@ -2009,12 +2011,12 @@
return voiceId;
}
async function generateTtsAudio(text, voiceId) {
if (!voiceId) throw new Error('缺少复刻音色,请先完成 voice-clone');
async function generateTtsAudio(text, voiceId, modelName) {
if (!voiceId) throw new Error('缺少音色');
var payload = {
text: text,
voice: voiceId,
model_name: TTS_MODEL,
model_name: modelName || TTS_MODEL,
instruction: buildTtsInstruction()
};
@@ -2136,14 +2138,21 @@
setVoicePreviewLoading('正在准备合成…');
try {
// 无论选哪种音色:先 voice-clone再 tts/generate
btn.textContent = '复刻中…';
setVoicePreviewLoading('正在上传参考音频并复刻音色…');
var voiceId = await cloneVoiceFromFile(voiceBlob, voiceFileName);
if (!voiceId) throw new Error('音色复刻失败,未返回 voice_id');
var voiceId;
var modelName = TTS_MODEL;
if (voiceOpt.mine) {
btn.textContent = '复刻中…';
setVoicePreviewLoading('正在上传参考音频并复刻音色…');
voiceId = await cloneVoiceFromFile(voiceBlob, voiceFileName);
if (!voiceId) throw new Error('音色复刻失败,未返回 voice_id');
} else {
// 预设音色:与「声音变声」同一套 model / voice
voiceId = CHANGE_VOICE;
modelName = CHANGE_MODEL;
}
btn.textContent = '合成中…';
setVoicePreviewLoading('正在用「' + voiceOpt.name + '」合成语音…');
var gen = await generateTtsAudio(text, voiceId);
var gen = await generateTtsAudio(text, voiceId, modelName);
var meta = '语速 ' + speedLabels[params.speedIdx] +
' · 语调 ' + pitchLabels[params.pitchIdx] +
' · 情绪 ' + emotionLabels[params.emotionIdx];

Some files were not shown because too many files have changed in this diff Show More