// 一次性探针:验证 DashScope CosyVoice(SpeechSynthesizer) 的正确 model/voice 参数组合 // 用法:node dev_test_scripts/debug/debug_tts_cosy_probe.js const fs = require('fs') const path = require('path') const userProfile = process.env.USERPROFILE || process.env.HOME || require('os').homedir() const credsPath = path.join(userProfile, 'Toolbox_local_creds.env.local') if (fs.existsSync(credsPath)) { fs.readFileSync(credsPath, 'utf-8').split(/\r?\n/).forEach(line => { const trimmed = line.trim() if (!trimmed || trimmed.startsWith('#')) return const idx = trimmed.indexOf('=') if (idx <= 0) return const key = trimmed.slice(0, idx).trim() const val = trimmed.slice(idx + 1).trim() if (key && !Object.prototype.hasOwnProperty.call(process.env, key)) process.env[key] = val }) } const apiKey = process.env.DASHSCOPE_API_KEY || '' const CASES = [ ['cosyvoice-v3-flash/longanyang (当前配置)', { model: 'cosyvoice-v3-flash', input: { text: '测试一下', voice: 'longanyang', format: 'mp3', sample_rate: 24000 } }], ['cosyvoice-v2/Cherry', { model: 'cosyvoice-v2', input: { text: '测试一下', voice: 'Cherry', format: 'mp3', sample_rate: 24000 } }], ['cosyvoice-v2/longxiaoxue', { model: 'cosyvoice-v2', input: { text: '测试一下', voice: 'longxiaoxue', format: 'mp3', sample_rate: 24000 } }], ['cosyvoice-v1/Cherry', { model: 'cosyvoice-v1', input: { text: '测试一下', voice: 'Cherry', format: 'mp3', sample_rate: 24000 } }], ['cosyvoice-v2-flash/Cherry', { model: 'cosyvoice-v2-flash', input: { text: '测试一下', voice: 'Cherry', format: 'mp3', sample_rate: 24000 } }], ] ;(async () => { for (const [name, body] of CASES) { const t0 = Date.now() try { const resp = await fetch('https://dashscope.aliyuncs.com/api/v1/services/audio/tts/SpeechSynthesizer', { method: 'POST', headers: { 'Authorization': `Bearer ${apiKey}`, 'Content-Type': 'application/json' }, body: JSON.stringify(body), }) const txt = await resp.text().catch(() => '') const ok = resp.ok && txt.includes('http') console.log(`[${ok ? '✔' : '✘'}]`, name, 'HTTP', resp.status, (Date.now() - t0) + 'ms', (resp.ok ? txt.slice(0, 120) : txt.slice(0, 200)).replace(/\s+/g, ' ')) } catch (e) { console.log('[✘]', name, 'fetch 异常:', String(e && e.message || e)) } } process.exit(0) })()