Spaces:
Sleeping
Sleeping
File size: 2,341 Bytes
7afe4cc 11d9f5e 7afe4cc 11d9f5e 7afe4cc 321ba52 7afe4cc 2844670 7afe4cc 11d9f5e 7afe4cc 321ba52 7afe4cc 11d9f5e 7afe4cc 11d9f5e 7afe4cc 321ba52 7afe4cc 5a1477e 321ba52 5a1477e 7afe4cc 5a1477e 321ba52 7afe4cc 321ba52 7afe4cc 321ba52 7afe4cc |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
import { NextResponse } from 'next/server';
const VOICES = {
fr: {
LAWYER_VOICE: {
id: "XgXB0fxFNJAEDoy7QEp5",
volume: 0
},
GLITCH_VOICE: {
id: "MWhJLNn7P7uvQrOTocc8",
volume: -10
},
JUDGE_VOICE: {
id: "x2AhtLKBQ202WmP0eMAe",
volume: 0
}
},
en: {
LAWYER_VOICE: {
id: "bGLLbWl0MmTsn5gWQCuZ",
volume: 0
},
GLITCH_VOICE: {
id: "ZCgnAThIoaTqZwEGwRb4",
volume: -10
},
JUDGE_VOICE: {
id: "e170Z5cpDGpADYBfQKbs",
volume: 0
}
},
es: {
LAWYER_VOICE: {
id: "tozjSvFqKBPpgsJFDfS0",
volume: 0
},
GLITCH_VOICE: {
id: "AnLaVu7KDTirBKuGkCZt",
volume: -10
},
JUDGE_VOICE: {
id: "I2lWW75NJTSYfUWIunTb",
volume: 0
}
}
};
export async function POST(request: Request) {
try {
const { text, language = 'en', role } = await request.json();
console.log('language:', language);
console.log('text:', text);
console.log('role:', role)
let voice;
if (role === 'lawyer') {
voice = VOICES[language as keyof typeof VOICES].LAWYER_VOICE.id;
} else if (role === 'judge') {
voice = VOICES[language as keyof typeof VOICES].JUDGE_VOICE.id;
} else if (role === 'glitch') {
voice = VOICES[language as keyof typeof VOICES].GLITCH_VOICE.id;
}
console.log('voice:', voice);
const response = await fetch(
`https://api.elevenlabs.io/v1/text-to-speech/${voice}`,
{
method: 'POST',
headers: {
'Accept': 'audio/mpeg',
'Content-Type': 'application/json',
'xi-api-key': process.env.ELEVEN_LABS_API_KEY!
},
body: JSON.stringify({
text: text,
model_id: "eleven_flash_v2_5",
voice_settings: {
stability: 0.5,
similarity_boost: 0.75
}
})
}
);
if (!response.ok) {
throw new Error('Failed to generate voice');
}
const audioBuffer = await response.arrayBuffer();
return new NextResponse(audioBuffer, {
headers: {
'Content-Type': 'audio/mpeg'
}
});
} catch (error) {
console.error('Voice generation error:', error);
return NextResponse.json(
{ error: 'Failed to generate voice' },
{ status: 500 }
);
}
} |