diff options
author | AL-LCL <alvin@alvinhavel.com> | 2023-05-19 10:39:49 +0200 |
---|---|---|
committer | AL-LCL <alvin@alvinhavel.com> | 2023-05-19 10:39:49 +0200 |
commit | 58ebd3bc0f00c532e97e9a5571471ffab87934ba (patch) | |
tree | 6e099e59af07206df6edf2b0c585d0c5a466d4bd /server/modules/audio.py |
Diffstat (limited to 'server/modules/audio.py')
-rw-r--r-- | server/modules/audio.py | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/server/modules/audio.py b/server/modules/audio.py new file mode 100644 index 0000000..6938606 --- /dev/null +++ b/server/modules/audio.py @@ -0,0 +1,53 @@ +''' + Handles the audio stream module connection. + Setting up the output stream & making sure + it's cleaned up from memory & data structures. + Independent of failure or success. + + Verified: 2021 February 7 + * Follows PEP8 + * Tested Platforms + * Windows 10 + * Third Party Modules + * pyaudio +''' + +from server.modules.module import Module +from shared.helper import Helper +from server.state import Dynamic +from shared.error import Error +from shared.data import Data + +import pyaudio + + +class Audio(Module): + + def __init__(self, conn, token, connect_ip): + super().__init__(conn, token, connect_ip) + self.__audio = pyaudio.PyAudio() + + @Error.quiet_thread + def __recv(self, channels, rate): + try: + try: + stream = self.__audio.open(format=pyaudio.paInt16, + channels=channels, rate=rate, + frames_per_buffer=Data.BUFFER_SIZE, + output=True) + + try: + with self.conn as sock: + while True: + stream.write(Data.recv(sock, True, False)) + Data.send(sock) + finally: + stream.stop_stream() + stream.close() + finally: + self.__audio.terminate() + finally: + del Dynamic.MODULES[self.token] + + def live(self, *args): + Helper.thread(self.__recv, *args) |