Fix timeout for TTS service

This commit is contained in:
2025-06-07 10:33:09 +09:00
parent 7e17e30925
commit 698b73afaa

View File

@ -19,11 +19,11 @@ export async function generateTTS(
if (!itemId || itemId.trim() === "") { if (!itemId || itemId.trim() === "") {
throw new Error("Item ID is required for TTS generation"); throw new Error("Item ID is required for TTS generation");
} }
if (!scriptText || scriptText.trim() === "") { if (!scriptText || scriptText.trim() === "") {
throw new Error("Script text is required for TTS generation"); throw new Error("Script text is required for TTS generation");
} }
console.log(`TTS生成開始: ${itemId}`); console.log(`TTS生成開始: ${itemId}`);
const encodedText = encodeURIComponent(scriptText); const encodedText = encodeURIComponent(scriptText);
@ -41,7 +41,9 @@ export async function generateTTS(
if (!queryResponse.ok) { if (!queryResponse.ok) {
const errorText = await queryResponse.text(); const errorText = await queryResponse.text();
throw new Error(`VOICEVOX audio query failed (${queryResponse.status}): ${errorText}`); throw new Error(
`VOICEVOX audio query failed (${queryResponse.status}): ${errorText}`,
);
} }
const audioQuery = await queryResponse.json(); const audioQuery = await queryResponse.json();
@ -53,12 +55,15 @@ export async function generateTTS(
"Content-Type": "application/json", "Content-Type": "application/json",
}, },
body: JSON.stringify(audioQuery), body: JSON.stringify(audioQuery),
signal: AbortSignal.timeout(10000000), // タイムアウトを10分に設定
}); });
if (!audioResponse.ok) { if (!audioResponse.ok) {
const errorText = await audioResponse.text(); const errorText = await audioResponse.text();
console.error(`音声合成失敗: ${itemId}`); console.error(`音声合成失敗: ${itemId}`);
throw new Error(`VOICEVOX synthesis failed (${audioResponse.status}): ${errorText}`); throw new Error(
`VOICEVOX synthesis failed (${audioResponse.status}): ${errorText}`,
);
} }
const audioArrayBuffer = await audioResponse.arrayBuffer(); const audioArrayBuffer = await audioResponse.arrayBuffer();
@ -78,7 +83,7 @@ export async function generateTTS(
console.log(`WAVファイル保存完了: ${wavFilePath}`); console.log(`WAVファイル保存完了: ${wavFilePath}`);
console.log(`MP3変換開始: ${wavFilePath} -> ${mp3FilePath}`); console.log(`MP3変換開始: ${wavFilePath} -> ${mp3FilePath}`);
const ffmpegCmd = ffmpegPath || "ffmpeg"; const ffmpegCmd = ffmpegPath || "ffmpeg";
const result = Bun.spawnSync({ const result = Bun.spawnSync({
cmd: [ cmd: [
@ -93,9 +98,11 @@ export async function generateTTS(
mp3FilePath, mp3FilePath,
], ],
}); });
if (result.exitCode !== 0) { if (result.exitCode !== 0) {
const stderr = result.stderr ? new TextDecoder().decode(result.stderr) : "Unknown error"; const stderr = result.stderr
? new TextDecoder().decode(result.stderr)
: "Unknown error";
throw new Error(`FFmpeg conversion failed: ${stderr}`); throw new Error(`FFmpeg conversion failed: ${stderr}`);
} }
@ -103,12 +110,14 @@ export async function generateTTS(
if (fs.existsSync(wavFilePath)) { if (fs.existsSync(wavFilePath)) {
fs.unlinkSync(wavFilePath); fs.unlinkSync(wavFilePath);
} }
console.log(`TTS生成完了: ${itemId}`); console.log(`TTS生成完了: ${itemId}`);
return path.basename(mp3FilePath); return path.basename(mp3FilePath);
} catch (error) { } catch (error) {
console.error("Error generating TTS:", error); console.error("Error generating TTS:", error);
throw new Error(`Failed to generate TTS: ${error instanceof Error ? error.message : 'Unknown error'}`); throw new Error(
`Failed to generate TTS: ${error instanceof Error ? error.message : "Unknown error"}`,
);
} }
} }