Итак, я пытаюсь создать программу для шифрования звука, но моя проблема в том, что после того, как я зашифровал файл wav, я все еще могу слышать оригинальный звук поверх шума.
Это некоторые из оригинальных волнЗначения файла: https://imgur.com/OgT8bzk
Это значения после шифрования: https://imgur.com/WCV7kGy
Изначально я пытался создать файл WAV с этими зашифрованными значениями, но некоторые из них требуют более 32 бит,поэтому я нормализовал их от -1 до 1.
Нормализованные значения: https://imgur.com/wuLJkUr
Теперь проблема в том, что после создания wav с этими нормализованными значениями я все еще могу слышать оригинальный звуки я не уверен, почему.
Вот оригинальный звук и зашифрованный, если вы хотите их услышать: https://ufile.io/c684hbdu
class Spectrum:
def __init__(self,ampArray,freqArray,framerate):
self.ampArray=ampArray
self.freqArray=freqArray
self.framerate=framerate
def make_wave(self,size):
data=np.fft.irfft(self.ampArray,size)
return Wave(data,framerate=self.framerate)
# encryption
# basically i change the values generated by FFT (the values are in ampArray).
#I write the complex and real part as a Fraction and the new values (the encrypted ones) will be the lenght of the numerator + the numerator + the denominator
def make_spectrum_crypted(self):
ampArrayCopy=copy.deepcopy(self.ampArray)
for i in range(len(self.ampArray)):
fractionR=Fraction(self.ampArray[i].real).limit_denominator()
numeratorR=fractionR.numerator;
denominatorR=fractionR.denominator;
fractionI=Fraction(self.ampArray[i].imag).limit_denominator()
numeratorI=fractionI.numerator;
denominatorI=fractionI.denominator;
realPartString=str(len(str(abs((numeratorR)))))+str(abs(numeratorR))+str(abs(denominatorR))
imagPartString=str(len(str(abs((numeratorI)))))+str(abs(numeratorI))+str(abs(denominatorI))
wr=int(realPartString)
wi=int(imagPartString)
if(numeratorR<0):
wr=-wr;
if(numeratorI<0):
wi=-wi;
ampArrayCopy[i]=complex(wr,wi);
return Spectrum(ampArrayCopy,self.freqArray,self.framerate)
# read data from wav
data=read_wave('count.wav')
# encryption and creating the encrypted wav
spectrum=data.make_spectrum()
spectrumC=spectrum.make_spectrum_crypted()
wave=spectrumC.make_wave(len(data))
#normalize encrypted wav values between -1 and 1
old_max = np.max(wave.data)
old_min = np.min(wave.data)
new_min = -1
new_max = 1
normalizeList=[]
for i in range(len(wave.data.tolist())):
normalizeList.append(( (wave.data[i] - old_min) / (old_max - old_min) ) * (new_max - new_min) + new_min)
# create wave
dataToWrite = np.array(normalizeList, dtype=np.float32)
scipy.io.wavfile.write('encrypted.wav',wave.framerate,dataToWrite )