khurrameycon commited on
Commit
fce7c66
·
verified ·
1 Parent(s): 4278031

updated with PCM

Browse files
Files changed (1) hide show
  1. app.py +34 -7
app.py CHANGED
@@ -19,13 +19,40 @@ async def generate_audio(text: str, voice: str = "af_heart", speed: float = 1.0)
19
  split_pattern=r'\n+'
20
  )
21
 
22
- # Save first segment only for demo
 
 
 
 
 
 
 
 
 
 
 
 
23
  for i, (gs, ps, audio) in enumerate(generator):
24
- sf.write(f"output_{i}.wav", audio, 24000)
25
- return FileResponse(
26
- f"output_{i}.wav",
27
- media_type="audio/wav",
28
- filename="output.wav"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
29
  )
30
-
31
  return Response("No audio generated", status_code=400)
 
19
  split_pattern=r'\n+'
20
  )
21
 
22
+ # # Save first segment only for demo
23
+ # for i, (gs, ps, audio) in enumerate(generator):
24
+ # sf.write(f"output_{i}.wav", audio, 24000)
25
+ # return FileResponse(
26
+ # f"output_{i}.wav",
27
+ # media_type="audio/wav",
28
+ # filename="output.wav"
29
+ # )
30
+
31
+ # return Response("No audio generated", status_code=400)
32
+
33
+
34
+ # Process only the first segment for demo
35
  for i, (gs, ps, audio) in enumerate(generator):
36
+ # Convert to 16-bit PCM
37
+ # Ensure the audio is in the range [-1, 1] first
38
+ audio = np.clip(audio, -1, 1)
39
+ # Convert to 16-bit signed integers
40
+ pcm_data = (audio * 32767).astype(np.int16)
41
+
42
+ # Convert to bytes, ensuring little-endian
43
+ raw_audio = pcm_data.tobytes(order='C')
44
+
45
+ # Return PCM data with appropriate headers
46
+ return Response(
47
+ content=raw_audio,
48
+ media_type="audio/l16", # Linear PCM
49
+ headers={
50
+ "Content-Disposition": f'attachment; filename="output.pcm"',
51
+ "X-Sample-Rate": "24000",
52
+ "X-Bits-Per-Sample": "16",
53
+ "X-Channels": "1",
54
+ "X-Encoding": "signed-integer",
55
+ "X-Endian": "little"
56
+ }
57
  )
 
58
  return Response("No audio generated", status_code=400)