Exemple #1
0
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)
Exemple #2
0
        # 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)
Exemple #3
0
    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)
Exemple #5
0
    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()