def plot_wavefile(fname, target_rate=None): """ 绘制wav文件 Args: fname (str): 文件名 target_rate (int.): 信号的绘图采样率, 可选 """ rate, signal = read_signal(fname) if not target_rate: target_rate = rate signal = util.set_frame_rate(signal, rate, target_rate) #signal = util.slice(signal, 1000, 60*10, 60*15) plot_signal(signal, target_rate)
# convert ary_sound = sp.fromstring(data_sound, sp.int16) ary_noise = sp.fromstring(data_noise, sp.int16) int32_ary_sound = sp.int32(ary_sound) int32_ary_noise = sp.int32(ary_noise) ary2 = sp.int16(int32_ary_sound + int32_ary_noise) data2 = ary2.tostring() synth.writeframes(data2) remain = remain - s sound.close() noise.close() synth.close() infile = 'tools/sound/noisy.wav' signal, params = read_signal(infile, WINSIZE) nf = len(signal) / (WINSIZE / 2) - 1 sig_out = sp.zeros(len(signal), sp.float32) window = sp.hanning(WINSIZE) ms = MinimumStatistics(WINSIZE, window, params[2]) NP_lambda = compute_avgpowerspectrum(signal[0:WINSIZE * int(params[2] / float(WINSIZE) / 3.0)], WINSIZE, window) ms.init_noise_profile(NP_lambda) ss = JointMap(WINSIZE, window) for no in xrange(nf): frame = get_frame(signal, WINSIZE, no) n_pow = ms.compute(frame, no) res = ss.compute_by_noise_pow(frame, n_pow) add_signal(sig_out, res, WINSIZE, no)
window = winfunc(size) s = s[0:size] shat = shat[0:size] s_amp = np.absolute(np.fft.fftpack.fft(s * window)) shat_amp = np.absolute(np.fft.fftpack.fft(shat * window)) return np.sqrt(np.mean((np.log10(s_amp / shat_amp) * 10.0) ** 2.0)) def segmental_log_spectrum_distance(s, shat, winsize, winfunc): size = min(len(s), len(shat)) nf = size / (winsize / 2) - 1 ret = [] for no in xrange(nf): s_i = get_frame(s, winsize, no) shat_i = get_frame(shat, winsize, no) ret.append(log_spectrum_distance(s_i, shat_i, winfunc)) return ret if __name__ == "__main__": import sys winsize = int(sys.argv[1]) s = read_signal(sys.argv[2], winsize)[0] shat = read_signal(sys.argv[3], winsize)[0] sissd = segmental_itakura_saito_spectrum_distance(s, shat, winsize, np.hanning) import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) ax.plot(sissd) plt.show()
#convert ary_sound = sp.fromstring(data_sound, sp.int16) ary_noise = sp.fromstring(data_noise, sp.int16) int32_ary_sound = sp.int32(ary_sound) int32_ary_noise = sp.int32(ary_noise) ary2 = sp.int16(int32_ary_sound + int32_ary_noise) data2 = ary2.tostring() synth.writeframes(data2) remain = remain - s sound.close() noise.close() synth.close() infile = 'tools/sound/noisy.wav' signal, params = read_signal(infile, WINSIZE) nf = len(signal) / (WINSIZE / 2) - 1 sig_out = sp.zeros(len(signal), sp.float32) window = sp.hanning(WINSIZE) ms = MinimumStatistics(WINSIZE, window, params[2]) NP_lambda = compute_avgpowerspectrum( signal[0:WINSIZE * int(params[2] / float(WINSIZE) / 3.0)], WINSIZE, window) ms.init_noise_profile(NP_lambda) ss = JointMap(WINSIZE, window) for no in xrange(nf): frame = get_frame(signal, WINSIZE, no) n_pow = ms.compute(frame, no) res = ss.compute_by_noise_pow(frame, n_pow) add_signal(sig_out, res, WINSIZE, no)
s = s[0:size] shat = shat[0:size] s_amp = np.absolute(np.fft.fftpack.fft(s * window)) shat_amp = np.absolute(np.fft.fftpack.fft(shat * window)) return np.sqrt(np.mean((np.log10(s_amp / shat_amp) * 10.0)**2.0)) def segmental_log_spectrum_distance(s, shat, winsize, winfunc): size = min(len(s), len(shat)) nf = size / (winsize / 2) - 1 ret = [] for no in xrange(nf): s_i = get_frame(s, winsize, no) shat_i = get_frame(shat, winsize, no) ret.append(log_spectrum_distance(s_i, shat_i, winfunc)) return ret if __name__ == "__main__": import sys winsize = int(sys.argv[1]) s = read_signal(sys.argv[2], winsize)[0] shat = read_signal(sys.argv[3], winsize)[0] sissd = segmental_itakura_saito_spectrum_distance(s, shat, winsize, np.hanning) import matplotlib.pyplot as plt fig = plt.figure() ax = fig.add_subplot(111) ax.plot(sissd) plt.show()