From d90fabd597d1dfe86b3525cb1de0af27f5be27d6 Mon Sep 17 00:00:00 2001 From: Media Rogc Date: Sat, 28 Jun 2025 01:15:45 -0500 Subject: [PATCH] Initial commit of Music Player --- .DS_Store | Bin 0 -> 6148 bytes player.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 56 insertions(+) create mode 100644 .DS_Store create mode 100644 player.py diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..3340c2ca5e1ff724e8aa055da1e82eb10e021a1e GIT binary patch literal 6148 zcmeHKJ5Iwu5S=lWh(wbTy1hbfU?L+9kPDy?1Vw_=klGyw;Q}0ijtg-B-h2qLtWZ+G z8)@cw=i^hbR<=JYM|OX*7vi;ZMWHuGLJi~ww9gT z$)oHJ>#LV*JI_A0>DqR=?w0V`VcsrI-!F&p)sOM*!}r;$k5`mZ$N(8217v^<{7VMV zvrQ&vfwW|R43L3619m?Ys9}@X2l~|k<0Amje&b#6?6U;0m;=}(_JQy~G)jR{sySk4 zl*3;#uSx6!qg>Q?#(Q#S%?U+)cle8^i#CC@WPl6|890gM)cXGw^vL`_EaHj`kbytN zfY$Azo#T_Tw~ju}dToK;K)(dJo(|)!80f7S3v0#a2YJPw5pNRvKre^i%Ypn6FkUER I;5Qif1kc$h7XSbN literal 0 HcmV?d00001 diff --git a/player.py b/player.py new file mode 100644 index 0000000..bb9efc9 --- /dev/null +++ b/player.py @@ -0,0 +1,56 @@ +import jack +import socket +import numpy as np +import time + +PORT = 5004 +JACK_CLIENT_NAME = "Player" +BUFFER_SIZE = 4096 + +sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) +sock.bind(("0.0.0.0", PORT)) +sock.setblocking(False) + +client = jack.Client(JACK_CLIENT_NAME) + +out_l = client.outports.register("out_l") +out_r = client.outports.register("out_r") + +buffer = np.zeros((2, 0), dtype=np.float32) + +def fetch_samples(): + global buffer + try: + data, _ = sock.recvfrom(BUFFER_SIZE) + int16 = np.frombuffer(data, dtype=np.int16) + interleaved = int16.reshape(-1, 2).T + float_audio = interleaved.astype(np.float32) / 32767.0 + buffer = np.concatenate((buffer, float_audio), axis=1) + except BlockingIOError: + pass + +@client.set_process_callback +def process(frames): + global buffer + fetch_samples() + needed = frames + + if buffer.shape[1] >= needed: + chunk = buffer[:, :needed] + buffer = buffer[:, needed:] + else: + chunk = np.zeros((2, needed), dtype=np.float32) + if buffer.shape[1] > 0: + chunk[:, :buffer.shape[1]] = buffer + buffer = np.zeros((2, 0), dtype=np.float32) + + out_l.get_array()[:] = chunk[0] + out_r.get_array()[:] = chunk[1] + +with client: + print(f"Receving on UDP port {PORT} and playing via JACK") + try: + while True: + time.sleep(0.1) + except KeyboardInterrupt: + print("Exiting...") \ No newline at end of file