Короче я должен создать и отправить звуковой сигнал в котором зашифровано сообщение. Сообщение создать/перевести в сигнал я могу, но вот отправить и получить как то не выходит, помогите, прилагаю код для отправки и получения
Спасибо большое заранее
Спасибо большое заранее
Python:
import sounddevice as sd
import soundfile as sf
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
import wave
import time
import socket
import os
#-----------------------CREATION DICTIONNAIRE-----------------------
def creer_dict():
n=256
return{chr(i):i for i in range(n)}
#----------------------------COMPRESSION-----------------------------
def encode_lzw(texte):
dico = creer_dict()
dict_size = len(dico)
w=""
result=[]
for c in texte:
wc = w + c
if wc in dico:
w = wc
else:
result.append(dico[w])
dico[wc] = dict_size
dict_size += 1
w = c
if w:
result.append(dico[w])
return result
#--------------(ENCODAGE)CONVERSION DECIMAL-BINAIRE---------------
def conv_bin(decimal_chaine):
result=[]
for i in range (0, len(decimal_chaine)):
result.append(bin(decimal_chaine)[2:])
return result
#-------------------------GENERRATION ET MODULATION----------------------------------------
def modulation(bin_chaine):
chaine_binaire=str()
for i in range (0, len(bin_chaine)-1):
chaine_binaire += bin_chaine
print(chaine_binaire)
f = 21000
w = 2*f
x = []
y = []
pas = 1/f
a = 0
for i in range(0, len(chaine_binaire)-1) :
for t in np.arange(0,0.01,pas):
x.append(a+t)
if (chaine_binaire, chaine_binaire[i+1]) == ("0", "0"):
amp = 0
elif (chaine_binaire, chaine_binaire[i+1]) == ("0", "1"):
amp = 1
elif (chaine_binaire, chaine_binaire[i+1])== ("1", "0"):
amp = 2
elif (chaine_binaire, chaine_binaire[i+1]) == ("1", "1"):
amp = 3
y.append(amp*np.sin(w*(a+t)))
a=a+t
plt.plot(x,y)
plt.title('Signal')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
sf.write("signalmodule.wav", y, f)
input("")
chaine = input('Ecrire : ')
creer_dict()
decimal_chaine = encode_lzw(chaine)
print(decimal_chaine)
bin_chaine = conv_bin(decimal_chaine)
print(bin_chaine)
modulation(bin_chaine)
signal_porteur = 'signalmodule.wav'
data, reading = sf.read(signal_porteur)
play = sd.play(data, reading)
sd.wait()
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host, port = ('localhost', 4548)
import socket
adresseIP = "93.4.249.98" # Ici, le poste local
port = 50000 # Se connecter sur le port 50000
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect((adresseIP, port))
print("Connecté au serveur")
client.send("Bonjour, je suis le client".encode("utf-8"))
reponse = client.recv(255)
print(reponse.decode("utf-8"))
print("Connexion fermée")
client.close()
И код для получения
import socket
import sounddevice as sd
import soundfile as sf
import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
import time
def BinDec (b) :
n=0
for i in range (7):
n=n+b[len(b)-(i+1)]*(2^i)
return n
socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
host, port = ('', 4548)
socket.bind((host, port))
socket.listen(5)
client, address = socket.accept()
print("New connexion")
liste =['1000101', '1010011', '1000011', '1000001', '1010000', '1000101', '1001011', '0110001', '0110111']
def creer_dict():
n=256
return{chr(i):i for i in range(n)}
def inverse_dict(dico):
return { v:k for k,v in dico.items() }
def decodde_lzw(texte):
dico = creer_dict
dico = inverse_dict(dico)
dict_size = len(dico)
result = ""
w =chr(texte.pop(0))
result += w
for k in decimal_chaine:
if k in dico:
entry = w + w[0]
elif k == dict_size:
entry = w + w[0]
result += entry
dico[dict_size] = w + entry[0]
dict_size += 1
w =entry
return result
def conv_bindec(liste):
k = len(liste)
x = 0
liste2 = []
for i in range (k):
n = liste[x]
resultat=0
nchaine=str(n)
nliste=list(nchaine)
pgexposant=len(nliste)
for i in range(pgexposant):
int(i)
ajout=int(nliste)*2**(pgexposant-1-i)
resultat=resultat+ajout
x = x + 1
liste2.append(resultat)
print(liste2)
return
#liste_dec = conv_bindec(liste)
#print(liste_dec)
#texte = decodde_lzw(liste_dec)
#print(texte)
def filtrage():
Fc = 20000 #Fréquence de coupure
Fe = 44100 #Fréquence d'échantillonage
#chercher le fichier son et lire le signal
signalaudio = 'signalmoduleconf.wav'
data, reading = sf.read(signalaudio)
#application du filtre passe haut
filtre_passe_haut = signal.firwin(101, Fc, fs = Fe, pass_zero = False)
signalaudio = signal.lfilter(filtre_passe_haut, [1.0], data)
#lire le fichier son
play = sd.play(signalaudio, reading)
statust = sd.wait()
plt.plot(signalaudio)
plt.title('Signal')
plt.xlabel('x')
plt.ylabel('y')
plt.show()
filtrage()
while True:
data = []
data = client.recv(256)
for i in range(0, len(data)):
data.decode("utf8")
print(data)
n = BinDec(data)
print(n)
client.close()
socket.close()/CODE]