Добавил:
chrysler_a57_mltbnk
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:практика научная / результат / test_2
.pyfrom librosa import load as lbrs_load
import numpy as np
from os.path import getsize
from soundfile import write as sf_write
from scipy.signal import firwin
#Кодирование
def encoder(samples):
#Необходимые для кодирования величины
array_diff = np.zeros(samples.shape)
array_diff[0][0] = samples[0][0]
array_diff[1][0] = samples[1][0]
counter = 1
while counter != len(array_diff[0]):
array_diff[0][counter]= samples[0][counter]-samples[0][counter-1]
array_diff[1][counter]= samples[1][counter]-samples[1][counter-1]
counter += 1
return array_diff
#Декодирование
def decoder(samples):
#Необходимые для декодирования величины
array_rslt = np.zeros(samples.shape)
array_rslt[0][0] = samples[0][0]
array_rslt[1][0] = samples[1][0]
counter = 1
while counter != len(samples[0]):
array_rslt[0][counter]= samples[0][counter]+array_rslt[0][counter-1]
array_rslt[1][counter]= samples[1][counter]+array_rslt[1][counter-1]
counter += 1
return array_rslt
#Синтез полосовых КИХ-фильтров
def filters_coeffs(sr,nt=3):
#Необходимые частоты полос пропускания
coeffs = []
freqs_bands = [[0.1,5500],[5501,11000],[11001,16500],[16500,22000]]
for i in freqs_bands:
coeffs.append(firwin(numtaps=nt+1,cutoff=i,pass_zero=False,fs=sr))
return coeffs
#Фильтрация
def filtration(samples,coeffs,sr,nt=3):
filtered_array = [[],[]]
for i in range(0,len(samples[0])):
tmp = [0,0]
if i <= N:
c = 0
k = i
while True:
tmp[0] += coeffs[c]*samples[0][k]
tmp[1] += coeffs[c]*samples[1][k]
if k == 0:
break
c += 1
k -= 1
filtered_array[0].append(tmp[0])
filtered_array[1].append(tmp[1])
else:
c = 0
k = i
while True:
tmp[0] += coeffs[c]*samples[0][k]
tmp[1] += coeffs[c]*samples[1][k]
if c == N:
break
c += 1
k -= 1
filtered_array[0].append(tmp[0])
filtered_array[1].append(tmp[1])
return filtered_array
#Считывание аудиофайла
audio_file_input = "Eurobeat Brony - Diamond Dogs.wav"
audio_file_output = "output_audio.wav"
samples_orig, sample_rate = lbrs_load(audio_file_input,sr=44100,mono=False,duration=1)
#Фильтрация по диапазонам
N = 3 #Порядок фильтра
filters_coeffs = filters_coeffs(sample_rate, N)
filtered_samples = filtration(samples_orig,filters_coeffs[1],sample_rate,N)
print(f' {min(filtered_samples[0])}\n {max(filtered_samples[0])}\n \
{min(samples_orig[0])}\n {max(samples_orig[0])}')
samples_diff = encoder(samples_orig)
samples_rslt = decoder(samples_diff)
sf_write(audio_file_output,samples_rslt.T,sample_rate,subtype='PCM_16')
Соседние файлы в папке результат
