Glavni problem s pythonom izvornog koda za uklanjanje vokala je taj što nije otvorenog koda. To znači da kôd nije dostupan nikome za pregled i eventualno poboljšanje. To može dovesti do problema s pouzdanošću softvera i ukupnom kvalitetom.
import numpy as np import matplotlib.pyplot as plt from scipy.io import wavfile from scipy import signal from scipy.fftpack import fft, ifft import os def vocal_remover(filename): # read in audio file fs, data = wavfile.read(filename) # take the absolute value of the signal data = np.absolute(data) # find the length of the signal N = len(data) # take the Fourier Transform of the signal fourier = fft(data) # create a list of frequencies corresponding to the length of the signal freqs = np.fft.fftfreq(N, 1/fs) # find all frequencies above 1000 Hz (1 kHz) and set them to 0 in Fourier Transform for i in range (len(fourier)): if abs(freqs[i]) > 1000: fourier[i] = 0+0j # take inverse Fourier Transform to get back to time domain inverse_fourier = ifft(fourier).real return inverse_fourier
Ovaj kôd uvozi razne biblioteke koje će se koristiti u funkciji vocal_remover.
Funkcija vocal_remover uzima unos naziva datoteke i čita audio datoteku pomoću biblioteke wavfile.
Zatim uzima apsolutnu vrijednost signala i pronalazi duljinu signala.
Signal se zatim stavlja kroz Fourierovu transformaciju, koja stvara popis frekvencija koje odgovaraju duljini signala.
Sve frekvencije iznad 1000 Hz postavljene su na 0 u Fourierovoj transformaciji. To je zato što većina vokala leži unutar ovog raspona frekvencija.
Poduzima se inverzna Fourierova transformacija kako bi se vratila u vremensku domenu, a ovaj konačni signal vraća funkcija.
Rad s likovima
Postoji nekoliko načina za rad sa znakovima u Pythonu. Jedan od načina je korištenje funkcije str() za dobivanje string reprezentacije znaka. Na primjer, sljedeći kod ispisuje slovo "a" na ekranu:
print(“Slovo 'a'.”)
Drugi način rada sa znakovima u Pythonu je korištenje funkcije chr(). Ova funkcija uzima cijeli broj kao ulaz i vraća znak koji odgovara tom broju. Na primjer, sljedeći kod ispisuje slovo "a" na ekranu:
print("Znak 'a' je")
chr(1)
Tekst i objekti
U Pythonu je tekst predstavljen nizom Unicode znakova. Objekti su također nizovi Unicode znakova, ali mogu sadržavati i druge tipove podataka, poput brojeva i nizova.