2017-05-02 1 views
0

Ich habe einen udp Server in Python, die Sprach-Pakete von einem Client im Rohformat, Array von Bytes kontinuierlich empfängt. Wie kann ich die Stimme auf der Serverseite in Echtzeit wiedergeben? Irgendwelche empfohlenen Bibliotheken oder Möglichkeiten, es zu tun?spielen unaufbereiteten Audiodatei in Echtzeit in Python

Hier ist mein sehr einfacher Server-Code, wenn nötig (was ich bezweifle)

import socket 

UDP_IP = "192.168.1.105" 
UDP_PORT = 5005 

sock = socket.socket(socket.AF_INET, # Internet 
        socket.SOCK_DGRAM) # UDP 
sock.bind((UDP_IP, UDP_PORT)) 

while True: 
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes 
    #what to do to stream the incoming voice packets? 

Antwort

2

PyAudio https://people.csail.mit.edu/hubert/pyaudio/

import pyaudio 

p = pyaudio.PyAudio() 

stream = p.open(format=pyaudio.paFloat32, 
       channels=1, 
       rate=44100, 
       output=True) 

data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes 

while data != '': 
    stream.write(data) 
    data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes 

stream.stop_stream() 
stream.close() 

p.terminate() 

Es gibt einen Weg, um eine Callback-Methode zu verwenden, die besser sein könnten.

+0

Dieser erhält nur den eingehenden Stream und speichert sie in einem PyAudio Objekt, nicht wahr? Oder spielt es es auch? –

+1

Es spielt die Rohdaten über die Lautsprecher. Sie müssen 'input = True' anstelle von' output = True' verwenden, um Audiodaten von einem Mikrofon aufzunehmen. – HashSplat

+0

Sie müssen Ihre Datenformat ändern, Anzahl der Kanäle, und Ihre Sample-Rate zu entsprechen, was Ihre Audiodaten. Stellen Sie außerdem sicher, dass Sie schnell genug streamen. Wenn 'data, addr = sock.recvfrom (1024)' zu lange dauert, wird es wahrscheinlich zu Überspringungen Ihrer Audiodaten führen. – HashSplat