WAV-файл после шифрования звучит так же, как и до шифрования - PullRequest
0 голосов
/ 02 мая 2019

Итак, я пытаюсь создать программу для шифрования звука, но моя проблема в том, что после того, как я зашифровал файл 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 )
...