Fix GPU exec
Browse files
app.py
CHANGED
|
@@ -2,6 +2,7 @@ import os
|
|
| 2 |
import io
|
| 3 |
import spaces
|
| 4 |
import tempfile
|
|
|
|
| 5 |
#import soundfile as sf
|
| 6 |
import numpy as np
|
| 7 |
from pydub import AudioSegment
|
|
@@ -99,15 +100,32 @@ def clean(output_markdown):
|
|
| 99 |
|
| 100 |
|
| 101 |
@spaces.GPU
|
| 102 |
-
|
| 103 |
-
|
| 104 |
-
|
| 105 |
-
|
| 106 |
-
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 111 |
|
| 112 |
|
| 113 |
with gr.Blocks() as demo:
|
|
|
|
| 2 |
import io
|
| 3 |
import spaces
|
| 4 |
import tempfile
|
| 5 |
+
import asyncio
|
| 6 |
#import soundfile as sf
|
| 7 |
import numpy as np
|
| 8 |
from pydub import AudioSegment
|
|
|
|
| 100 |
|
| 101 |
|
| 102 |
@spaces.GPU
|
| 103 |
+
def text_to_speech(output_text, voice, speed, lang):
|
| 104 |
+
async def stream_audio(output_text, voice, speed, lang):
|
| 105 |
+
stream = kokoro.create_stream(
|
| 106 |
+
output_text,
|
| 107 |
+
voice=voice,
|
| 108 |
+
speed=float(speed),
|
| 109 |
+
lang=lang
|
| 110 |
+
)
|
| 111 |
+
async for samples, sample_rate in stream:
|
| 112 |
+
yield numpy_to_mp3(samples, sampling_rate=sample_rate)
|
| 113 |
+
|
| 114 |
+
async def run_stream():
|
| 115 |
+
async for chunk in stream_audio(output_text, voice, speed, lang):
|
| 116 |
+
yield chunk
|
| 117 |
+
|
| 118 |
+
# Create a new event loop for this thread
|
| 119 |
+
loop = asyncio.new_event_loop()
|
| 120 |
+
asyncio.set_event_loop(loop)
|
| 121 |
+
|
| 122 |
+
# Use the new loop to run the async generator
|
| 123 |
+
iterator = run_stream().__aiter__()
|
| 124 |
+
while True:
|
| 125 |
+
try:
|
| 126 |
+
yield loop.run_until_complete(iterator.__anext__())
|
| 127 |
+
except StopAsyncIteration:
|
| 128 |
+
break
|
| 129 |
|
| 130 |
|
| 131 |
with gr.Blocks() as demo:
|