aiplexdeveloper commited on
Commit
3a67b40
·
verified ·
1 Parent(s): 0b2e466

Create handler.py

Browse files
Files changed (1) hide show
  1. handler.py +44 -0
handler.py ADDED
@@ -0,0 +1,44 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ from typing import Dict, List, Any
2
+ from kokoro import KPipeline
3
+ from IPython.display import display, Audio
4
+ import soundfile as sf
5
+ import torch
6
+ import io
7
+ import os
8
+
9
+ class EndpointHandler():
10
+ def __init__(self):
11
+ self.pipeline = KPipeline(lang_code='a')
12
+
13
+ def __call__(self, inputs: Dict[str, Any]) -> Dict[str, Any]:
14
+
15
+ text = inputs["text"]
16
+ voice = inputs["voice"]
17
+
18
+ audio_segments = []
19
+
20
+ generator = self.pipeline(text, voice)
21
+ for i, (gs, ps, audio) in enumerate(generator):
22
+ # Save temporarily just in case (optional if you skip saving to disk)
23
+ filename = f"{i}.wav"
24
+ sf.write(filename, audio, 24000)
25
+ audio_segments.append(audio)
26
+
27
+ # Concatenate all audio segments
28
+ full_audio = torch.cat([torch.tensor(a) for a in audio_segments])
29
+
30
+ # Write full audio to a binary buffer
31
+ buffer = io.BytesIO()
32
+ sf.write(buffer, full_audio.numpy(), 24000, format='WAV')
33
+ buffer.seek(0)
34
+
35
+ # Clean up temp files
36
+ for i in range(len(audio_segments)):
37
+ try:
38
+ os.remove(f"{i}.wav")
39
+ except FileNotFoundError:
40
+ pass
41
+
42
+ return {
43
+ "audio": buffer.read()
44
+ }