Added ESP32 side of the transceiver

This commit is contained in:
Denakosg945
2026-06-04 17:01:14 +03:00
parent bcf7bede0f
commit fa830b2c37
2303 changed files with 497306 additions and 0 deletions
+155
View File
@@ -0,0 +1,155 @@
import socket as s
import sounddevice as sd
import wavio as wv
import os
import wave
import numpy as np
import time
#esp32 default IP address
HOST = "192.168.4.1"
#port for UDP audio streaming
PORT = 3333
frequency = 44100 #Hz
sd.default.dtype = 'int32'
def record():
while True:
print("Enter duration you would like to record(seconds): ", end="")
try:
duration = int(input())
except ValueError:
print("Enter a valid integer number!")
duration = 0
continue
if duration == 0:
continue
print("Press enter to start recording for " + str(duration) + " seconds...")
input()
print("\n\nRECORDING STARTED")
recording = sd.rec(int(duration*frequency),samplerate=frequency, channels=2)
sd.wait()
print("\n\nRECORDING STOPPED")
print("Enter a name to save the recording: ",end="")
name = str(input())
name = name + ".wav"
#writes the audio as 32(4byte) samples at a frequency of 44100Hz
wv.write(name,recording,frequency,sampwidth=4)
return
def stream(sock):
counter = 0
print("Select a file from current directory or another...")
sound_list = list()
for string in os.listdir(os.getcwd()):
if string.endswith(".wav"):
sound_list.append(string)
print("Current directory files:")
for i in range(len(sound_list)):
print(str(i+1) + "." + sound_list[i])
print()
#Open file based on index
while True:
print("Enter the number of the file:", end="")
try:
index = int(input())
except ValueError:
print("Enter a valid integer number!")
index = 0
continue
#reduces the input index so that the index matches with the list
index = index-1
if index < 0 or index > len(sound_list)-1:
print("Enter a valid integer number between 1-",len(sound_list))
continue
break
file = None
try:
file = wave.open(sound_list[index],"rb")
except:
print("Could not open the file...Try again!")
return
print("\nFile was opened successfully...Beginning streaming!\n")
CHUNK_FRAMES = 128
sample_rate = file.getframerate()
channels = file.getnchannels()
sample_width = file.getsampwidth()
print("Sample rate: ",sample_rate)
print("Channel: " + "Stereo" if channels == 2 else "Mono")
print("Sample size(bits): ", 32 if sample_width == 4 else 16)
for _ in range(50):
aud_chunk = file.readframes(CHUNK_FRAMES)
if not aud_chunk:
break
print(f"Python Sending Hex: {aud_chunk[:4].hex()}")
sock.sendto(aud_chunk,(HOST,PORT))
while True:
aud_chunk = file.readframes(CHUNK_FRAMES)
if not aud_chunk:
break
sock.sendto(aud_chunk,(HOST,PORT))
time.sleep(CHUNK_FRAMES/sample_rate)
wav = wave.open(sound_list[index],"rb")
data = np.frombuffer(wav.readframes(10),dtype=np.int32)
print(data[:10])
print("File finished streaming...")
wav.close()
file.close()
def main():
sock = s.socket(s.AF_INET,s.SOCK_DGRAM)
while True:
print("Options:\n1.Record audio\n2.Select audio\n3.Exit")
try:
usr_in = int(input("Enter number: "))
except ValueError:
print("Enter a valid integer number!")
usr_in = 4
if usr_in < 1 or usr_in > 3:
continue
match usr_in:
case 1:
record()
case 2:
stream(sock)
case 3:
print("Terminating audio streaming application...")
exit()
sock.close()
if __name__ == "__main__":
main()