#!/usr/bin/python import socket import Queue import threading try: import ossaudiodev except ImportError: print "Emulating ossaudiodev" class ossaudiodev(object): open = lambda self, x:ossaudiodev write = lambda self, x:None speed = lambda self, x:None channels = lambda self, x:None setfmt = lambda self, x:None AFMT_U8 = None ossaudiodev = ossaudiodev() class AudioOutput(object): rate = 8000 def __init__(self): self.p = self.createPipe() # store 100 fragments of data max. self.q = Queue.Queue(maxsize=100) def createPipe(self): p = ossaudiodev.open('w') p.setfmt(ossaudiodev.AFMT_U8) p.speed(self.rate) p.channels(1) return p def feed(self, data): try: self.q.add(data) except Queue.Full: pass def runForever(self): while 1: data = self.q.get(block=True) self.p.write(data) class UDPListener(object): def __init__(self, port): self.s = self.createSocket(port) def createSocket(self, port): s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind(('', port)) return s def listenForever(self, output): while 1: data, addr = self.s.recvfrom(output.rate/10) output.feed(data) def main(): port = 8051 host = '224.0.0.1' output = AudioOutput() listener = UDPListener(port) audio_thread = threading.Thread(target=output.runForever) audio_thread.setDaemon(True) listener.listenForever(output) if __name__ == '__main__': main()