def process_music_data(data_in, is_fft, is_energy, n_output_bins, n_fft, is_visual):
# length is len(data_in)/4
data_np = np.fromstring(data_in, 'Float32')
# visualizer
if is_visual:
visualizer(data_np)
# energy
if is_energy:
energy = np.abs(data_np) ** 2
energy = energy.sum()
energy *= 2**5
energy_output = energy.astype(np.uint16)
else:
energy_output = np.zeros(2).astype(np.uint16)
# fft
if is_fft:
global sample_rate
# down-sample by 4, with filtering, energy not scaled
data_np = librosa.resample(data_np,
sample_rate,
sample_rate/4,
res_type='kaiser_fast')
# short time fft over n_fft samples
fft_data = librosa.stft(data_np, n_fft,
hop_length=n_fft,
center=False)
fft_data_mag = np.abs(fft_data[0:n_fft//2]) ** 2
# magnitude scaling
fft_data_mag *= 2**3
fft_output = get_output_fft_bins(fft_data_mag, n_output_bins)
fft_output = fft_output.astype(np.uint8)
else:
fft_output = np.zeros(n_output_bins).astype(np.uint8)
return fft_output, energy_output
评论列表
文章目录