File size: 902 Bytes
4a9ec15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import asyncio
from kokoro import KPipeline
import numpy as np
import struct
import time

async def main():
    pipeline = KPipeline(lang_code='a')
    generator = pipeline("Hello, this is a test of streaming audio from Kokoro.", voice="am_adam", speed=1, split_pattern=r'\n+')
    
    with open("test_stream.wav", "wb") as f:
        # Write WAV header
        # chunk_size = 36 + data_size
        header = struct.pack('<4sI4s4sIHHIIHH4sI',
            b'RIFF', 0xFFFFFFFF, b'WAVE', 
            b'fmt ', 16, 1, 1, 24000, 48000, 2, 16,
            b'data', 0xFFFFFFFF
        )
        f.write(header)
        
        for gs, ps, audio in generator:
            if audio is not None:
                print("Got chunk:", len(audio))
                pcm = (np.clip(audio, -1.0, 1.0) * 32767).astype(np.int16).tobytes()
                f.write(pcm)

if __name__ == "__main__":
    asyncio.run(main())