aboutsummaryrefslogtreecommitdiff
path: root/utils.py
diff options
context:
space:
mode:
authorDavid Doan <daviddoan@Davids-MacBook-Pro-193.local>2023-12-14 18:18:07 -0500
committerDavid Doan <daviddoan@Davids-MacBook-Pro-193.local>2023-12-14 18:18:07 -0500
commitf21474ef27f630d093a116b82fc2147b775eb832 (patch)
tree92e15d41f2012f4a110f1eb96d203ff98c8ebb21 /utils.py
parent25aa2dd624776f460c7424431b62958f9c524e3d (diff)
utils and threading updates
Diffstat (limited to 'utils.py')
-rw-r--r--utils.py75
1 files changed, 69 insertions, 6 deletions
diff --git a/utils.py b/utils.py
index ffa671f..f11adb3 100644
--- a/utils.py
+++ b/utils.py
@@ -2,15 +2,20 @@
# given the cmdline arg, turns the byte sequencies into a list of frequencies, and vice versa
# 1875 1924 +24, -25, range/2, 1, flipping new info 2 sending or not
+import numpy as np
+import pyaudio
+import threading
def make_frequencies_map(start_freq, freq_step, byte_per_transmit, is_sender=True):
- freq_list = [None] * (byte_per_transmit + 3)
+ # start_freq += 1500
+ freq_list = []
sender_range = freq_step // 2
plus_minus = sender_range // (byte_per_transmit + 3)
for i in range(byte_per_transmit + 3):
- freq_list[i] = start_freq + i * plus_minus
+ # print(start_freq + i * plus_minus, sender_range, plus_minus)
+ freq_list.append(start_freq + i * plus_minus)
if not is_sender:
freq_list[i] += sender_range
@@ -19,13 +24,71 @@ def make_frequencies_map(start_freq, freq_step, byte_per_transmit, is_sender=Tru
def frequencies_to_bytes(frequencies, start_freq, freq_step, byte_per_transmit, is_sender=True):
freq_list = make_frequencies_map(start_freq, freq_step, byte_per_transmit, is_sender)
- byte_list = [None] * len(frequencies)
+ byte_list = []
sender_range = freq_step // 2
plus_minus = sender_range // (byte_per_transmit + 3)
for i in range(len(frequencies)):
- byte_list[i] = 0
- if frequencies[i] <= freq_list[i] < frequencies[i] + plus_minus - 1: byte_list[i] = 1
+ if frequencies[i] <= freq_list[i] < frequencies[i] + plus_minus - 1:
+ byte_list.append("1")
+ else:
+ byte_list.append("0")
+
+ return byte_list
+
+def play_frequency(freq, p, duration=1.0, samplingRate=44100):
+ amplitude = 1.0 # Maximum amplitude
+ samples = (amplitude * np.sin(2 * np.pi * np.arange(samplingRate * duration) * freq / samplingRate)).astype(np.float32).tobytes()
+ stream = p.open(format=pyaudio.paFloat32, channels=1, rate=samplingRate, output=True)
+ stream.write(samples)
+
+
+ # thread for listening here
+
+ stream.stop_stream()
+ stream.close()
+
+# def play_data(data, start_freq, freq_step, byte_per_transmit):
+# p = pyaudio.PyAudio()
+# freq_list = make_frequencies_map(start_freq, freq_step, byte_per_transmit)
+# print(freq_list, data)
+
+# def play_thread(freq):
+# play_frequency(freq, p=p)
+
+# threads = []
+# for item in data:
+# for i, bit in enumerate(item):
+# if bit == '1':
+# thread = threading.Thread(target=play_thread, args=(freq_list[i],))
+# threads.append(thread)
+# thread.start()
+
+# for thread in threads:
+# thread.join()
+
+# p.terminate()
+
+def play_data(data, start_freq, freq_step, byte_per_transmit, p):
+ freq_list = make_frequencies_map(start_freq, freq_step, byte_per_transmit)
+
+
+ threads = []
+ for item in data:
+ for i, bit in enumerate(item):
+ if bit == '1':
+ thread = threading.Thread(target=play_frequency, args=(freq_list[i], p, 1.0))
+ threads.append(thread)
+ thread.start()
+
+ for thread in threads:
+ thread.join()
+
+
+# def listen_for_confirmation(stream):
+# # Logic to listen and decode the confirmation data
+# # This function should run in its own thread
+
+# recieved_data = stream.read(1024)
- return byte_list \ No newline at end of file