File size: 2,046 Bytes
7afe4cc
 
 
 
 
11d9f5e
7afe4cc
 
 
11d9f5e
7afe4cc
321ba52
 
 
 
7afe4cc
 
 
 
11d9f5e
7afe4cc
 
 
11d9f5e
7afe4cc
321ba52
 
 
 
7afe4cc
 
 
 
11d9f5e
7afe4cc
 
 
11d9f5e
7afe4cc
321ba52
 
 
 
7afe4cc
 
 
 
 
 
 
321ba52
 
7afe4cc
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
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: "fd4ATHXiyini901jkN6M",
      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' } = await request.json();
    console.log('language:', language);
    console.log('text:', text);

    const voice = VOICES[language as keyof typeof VOICES].LAWYER_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 }
    );
  }
}