Beispiel #1
0
def run(mic_observation_path, OUT_wav_path):
    data, rate = read_mic_wav_from_folder(mic_observation_path, max_len_sec=45)
    stft_arr = mic_stft.stft_arr(x_arr=data, fftsize=512)
    sensor_positions = mic_geometry.get_sensor_positions(hor_mic_count,
                                                         vert_mic_count,
                                                         dHor=dHor,
                                                         dVert=dVert)
    source_position = mic_geometry.get_source_position(0, 0)
    steering_vector = mic_steering.propagation_vector_free_field(
        sensor_positions, source_position, N_fft=512,
        F_s=rate).transpose(1, 0)
    S_spec = gsc_griffiths_filter(stft_arr=stft_arr,
                                  d_arr=steering_vector,
                                  mic_pos='closed')

    # ISFFT signal
    sig_out = istft(S_spec.transpose(1, 0), overlap=2)
    # ISFFT signal
    sf.write(OUT_wav_path, sig_out, rate)
Beispiel #2
0
    #################################################################
    # 2 - Do STFT
    stft_all_arr = stft_arr(x_all_arr, fftsize=n_fft)
    stft_noise_arr = stft_arr(x_noise_arr, fftsize=n_fft)
    (n_bins, n_sensors, n_frames) = stft_all_arr.shape

    print ("STFT calc done!")
    print ("    n_bins     = ", n_bins)
    print ("    n_sensors  = ", n_sensors)
    print ("    n_frames   = ", n_frames)

    #################################################################
    # 3 - Calc  steering vector
    print ('Calc  steering vector!')
    print ('    (angle_h, angle_v) = ', angle_h, angle_v)
    sensor_positions         = get_sensor_positions(hor_mic_count, vert_mic_count, dHor  = dHor, dVert = dVert)
    source_position          = get_source_position(angle_h, angle_v, radius = 6.0)
    d_arr                    = propagation_vector_free_field(sensor_positions, source_position, N_fft = n_fft, F_s = sr)

    #################################################################
    # 4 - Calc GSC filter output

    psd_V0 = calc_psd_v0(stft_noise_arr=stft_noise_arr)
    track_cov_mat_filter(stft_arr=stft_all_arr, d_arr=d_arr.T, psd_V0=psd_V0)

    #################################################################
    # 5 inverse STFT and save
    #sig_out = istft(result_spec.transpose((1,0)), overlap = 2)
    #sf.write(r"out/out_GSC.wav", sig_out, sr)

Beispiel #3
0
def main():

    # #################################################################
    # # 1.0 - LANDA PROFILE
    # vert_mic_count = 1
    # hor_mic_count  = 8
    # dHor           = 0.05
    # dVert          = 0.05
    # max_len_sec    = 60
    # n_fft          = 512
    # n_overlap      = 2
    #
    # (angle_hor_log, angle_vert_log) = (16.0, 0.0)
    # angle_h = -angle_hor_log
    # angle_v = -angle_vert_log
    #
    # _mix_start     = 17
    # _mix_end       = 40
    #
    # in_wav_path    = r'./data/_landa/'
    # out_wav_path   = r'./data/out/'
    # #################################################################

    #################################################################
    # 1.0 - _du_hast PROFILE

    #vert_mic_count = 6
    #hor_mic_count  = 11

    vert_mic_count = 1
    hor_mic_count = 11
    dHor = 0.035
    dVert = 0.05
    max_len_sec = 45

    n_fft = 512
    n_overlap = 2

    (angle_hor_log, angle_vert_log) = (12.051, 5.88161)
    angle_h = -angle_hor_log
    angle_v = -angle_vert_log

    _mix_start = 17
    _mix_end = 40

    in_wav_path = r'./data/_du_hast/'
    out_wav_path = r'./data/out/'
    #################################################################

    #################################################################
    # 1.0 - Read signal
    x_all_arr, sr = read_mic_wav_from_folder(in_wav_path,
                                             vert_mic_count,
                                             hor_mic_count,
                                             max_len_sec=max_len_sec)
    x_all_arr = x_all_arr[:, (np.int32)(_mix_start * sr):(np.int32)(_mix_end *
                                                                    sr)]
    (n_channels, n_samples) = x_all_arr.shape

    print("Array data read done!")
    print("    n_channels  = ", n_channels)
    print("    n_samples   = ", n_samples)
    print("    freq        = ", sr)

    #################################################################
    # 2 - Do STFT
    stft_all = stft_arr(x_all_arr, fftsize=n_fft, overlap=n_overlap)
    (n_bins, n_sensors, n_frames) = stft_all.shape

    print("STFT calc done!")
    print("    n_bins     = ", n_bins)
    print("    n_sensors  = ", n_sensors)
    print("    n_frames   = ", n_frames)

    #################################################################
    # 3 - Calc  steering vector
    print('Calc  steering vector!')
    print('    (angle_h, angle_v) = ', angle_h, angle_v)
    sensor_positions = get_sensor_positions(hor_mic_count,
                                            vert_mic_count,
                                            dHor=dHor,
                                            dVert=dVert)
    source_position = get_source_position(angle_h, angle_v, radius=6.0)
    d_arr = propagation_vector_free_field(sensor_positions,
                                          source_position,
                                          N_fft=n_fft,
                                          F_s=sr)

    #################################################################
    # Reshape to (nframes, nfrequencies, nchannels)
    M_spec = stft_all.transpose((2, 0, 1))

    def callback_fn(X):
        print('    invoke callback_fn')

    # #(nfrequencies, nchannels, nchannels)
    # W = np.array([np.eye(n_sensors, n_sensors) for f in range(n_bins)], dtype=M_spec.dtype)
    # for i in range(n_bins):
    #     W[i, : , 0 ] = d_arr[:, i]/8.0
    # Y = np.zeros((n_frames, n_bins, n_sensors), dtype=M_spec.dtype)
    # def demix(Y, X, W):
    #     for f in range(n_bins):
    #         Y[:,f,:] = np.dot(X[:,f,:], np.conj(W[f,:,:]))
    # demix(Y, M_spec, W)

    # # IVA Demix
    Y = pyroomacoustics.bss.auxiva(M_spec,
                                   n_iter=20,
                                   proj_back=True,
                                   callback=callback_fn)

    # Save result
    for i in range(Y.shape[2]):
        sig_out = istft(Y[:, :, i], overlap=n_overlap)
        sf.write(r'out/iva_res_{}.wav'.format(i), sig_out, sr)
Beispiel #4
0
def run_once():

    # #################################################################
    # # 1.0 - _wav_wbn45_dict0 PROFILE
    #
    # vert_mic_count = 6
    # hor_mic_count  = 11
    # dHor           = 0.035
    # dVert          = 0.05
    # max_len_sec    = 45
    # n_fft          = 512
    #
    # (angle_hor_log, angle_vert_log) = (0.0, 0.0)
    # (angle_inf_hor_log, angle_inf_vert_log) = (45, 0)
    #
    # angle_h = -angle_hor_log
    # angle_v = -angle_vert_log
    #
    # angle_inf_h = -angle_inf_hor_log
    # angle_inf_v = -angle_inf_vert_log
    #
    # angle_h = -angle_hor_log
    # angle_v = -angle_vert_log
    #
    # _mix_start     = 0.0
    # _mix_end       = 20.0
    #
    # in_wav_path    = r'./data/_wav_wbn45_dict0/'
    # out_wav_path   = r'./data/out/'
    # #################################################################

    # #################################################################
    # 1.0 - _sol PROFILE MVDR
    vert_mic_count = 6
    hor_mic_count = 11
    dHor = 0.035
    dVert = 0.05
    max_len_sec = 3 * 60
    n_fft = 512

    (angle_hor_log, angle_vert_log) = (13.8845, 6.60824)
    (angle_inf_hor_log, angle_inf_vert_log) = (-15.06, -0.31)

    angle_h = -angle_hor_log
    angle_v = -angle_vert_log

    angle_inf_h = -angle_inf_hor_log
    angle_inf_v = -angle_inf_vert_log

    in_wav_path = r'./data/_sol/'
    out_wav_path = r'./data/out/'

    _mix_start = 28
    _mix_end = 48
    #################################################################

    #################################################################
    # 1.0 - Read signal
    x_all_arr, sr = read_mic_wav_from_folder(in_wav_path,
                                             vert_mic_count,
                                             hor_mic_count,
                                             max_len_sec=max_len_sec)
    x_all_arr = x_all_arr[:, (np.int32)(_mix_start * sr):(np.int32)(_mix_end *
                                                                    sr)]

    (n_channels, n_samples) = x_all_arr.shape
    print("Array data read done!")
    print("    n_channels  = ", n_channels)
    print("    n_samples   = ", n_samples)
    print("    freq        = ", sr)

    #################################################################
    # 2 - Do STFT
    stft_all = stft_arr(x_all_arr, fftsize=n_fft)
    (n_bins, n_sensors, n_frames) = stft_all.shape

    print("STFT calc done!")
    print("    n_bins     = ", n_bins)
    print("    n_sensors  = ", n_sensors)
    print("    n_frames   = ", n_frames)

    #################################################################
    # 3 - Calc  steering vector
    print('Calc  steering vector!')
    print('    (angle_h, angle_v) = ', angle_h, angle_v)
    print('    (angle_inf_h, angle_inf_v) = ', angle_inf_h, angle_inf_v)
    sensor_positions = get_sensor_positions(hor_mic_count,
                                            vert_mic_count,
                                            dHor=dHor,
                                            dVert=dVert)
    source_position = get_source_position(angle_h, angle_v, radius=6.0)
    source_position_inf = get_source_position(angle_inf_h,
                                              angle_inf_v,
                                              radius=6.0)

    d_arr = propagation_vector_free_field(sensor_positions,
                                          source_position,
                                          N_fft=n_fft,
                                          F_s=sr)
    d_arr_inf = propagation_vector_free_field(sensor_positions,
                                              source_position_inf,
                                              N_fft=n_fft,
                                              F_s=sr)

    #################################################################
    # 4 - Calc DS beamforming in desired and noise direction
    result_spec = ds_beamforming(stft_all, d_arr.T)
    result_spec_inf = ds_beamforming(stft_all, d_arr_inf.T)

    #################################################################
    # 5 - ISTFT
    sig_sp = istft(result_spec.transpose((1, 0)), overlap=2)
    sig_inf = istft(result_spec_inf.transpose((1, 0)), overlap=2)

    sf.write(r"out/out_ds_sp.wav", sig_sp, sr)
    sf.write(r"out/out_ds_inf.wav", sig_inf, sr)

    #################################################################
    # 4 - NULL filter output
    result_spec, _ = null_filter(stft_all,
                                 d_arr_sp=d_arr.T,
                                 d_arr_inf=d_arr_inf.T)
    sig_out = istft(result_spec.transpose((1, 0)), overlap=2)
    sf.write(r"out/out_null.wav", sig_out, sr)

    #result_spec, _ = null_filter_ex(stft_mix_arr, d_arr_sp=d_arr.T, lst_d_arr_inf=[d_arr_inf.T, d_arr_inf_d1.T, d_arr_inf_d2.T])

    # #################################################################
    # # 6 - AP filter
    # M = 200
    # step = 0.05
    # L = 5
    # sig_result =  affine_projection_filter(main=sig_sp, ref=sig_inf, M=M,step=step,L=5)

    #################################################################
    # 6.1 - AP filter + cyclic parameters
    # M = 200
    # step = 0.05
    # L = 5
    # leak = 0.0
    # delay = -5

    #params = [(200, 0.005, 5), (200, 0.05, 5), (200, 0.1, 5), (200, 0.5, 5)]
    #params = [(200, 0.005, 5),(200, 0.005, 11), (200, 0.005, 25) , (200, 0.005, 35)]

    params = [(100, 0.01, 5, 0.01, -5)]
    for (M, step, L, leak, delay) in params:
        print("process     M = {}, step = {}, L = {}, leak = {}, dealy = {}".
              format(M, step, L, leak, delay))
        sig_inf = np.roll(sig_inf, delay)
        sig_result = affine_projection_filter(main=sig_sp,
                                              ref=sig_inf,
                                              M=M,
                                              step=step,
                                              L=L,
                                              leak=leak)
        sf.write(
            r"out/out_ap_null_M_{}_step_{}_L_{}_leak_{}_delay_{}.wav".format(
                M, step, L, leak, delay), sig_result, sr)

        sdr_impr, sir_impr, sar_impr, sdr_base, sir_base, sar_base = calc_sdr_impr_metric(
            ref_sp, ref_mus, mix, sig_result)

        print(base_name)
        print(
            "sdr_impr, sir_impr, sar_impr  =  {}, {}, {},  sdr_base, sir_base, sar_base  =  {}, {}, {}\n"
            .format(sdr_impr, sir_impr, sar_impr, sdr_base, sir_base,
                    sar_base))
Beispiel #5
0
def params_iterate_null():

    #base_name = 'out_mus1_spk1_snr_-10'
    base_name = 'out_wgn_spk_snr_-10'

    config = cfg.ConfigParser()
    config.read(os.path.join(r'./data/_sdr_test', base_name, 'config.cfg'))

    in_Main = r'./data/_sdr_test/' + base_name + r'/ds_mix.wav'
    in_Main_Sp = r'./data/_sdr_test/' + base_name + r'/ds_spk.wav'
    in_Main_Mus = r'./data/_sdr_test/' + base_name + r'/ds_mus.wav'

    # #################################################################
    # 1.0 - read PROFILE
    vert_mic_count = int(config['MIC_CFG']['vert_mic_count'])
    hor_mic_count = int(config['MIC_CFG']['hor_mic_count'])
    dHor = float(config['MIC_CFG']['dhor'])
    dVert = float(config['MIC_CFG']['dvert'])
    max_len_sec = int(config['MIC_CFG']['max_len_sec'])
    n_fft = int(config['MIC_CFG']['fft_size'])

    angle_h = -float(config['FILTER_CFG']['angle_h'])
    angle_v = -float(config['FILTER_CFG']['angle_v'])
    angle_inf_h = -float(config['FILTER_CFG']['angle_inf_h'])
    angle_inf_v = -float(config['FILTER_CFG']['angle_inf_v'])

    in_wav_path = r'./data/_sdr_test/' + base_name + r'/mix'
    out_wav_path = r'./data/out/'

    _mix_start = float(config['FILTER_CFG']['start_mix_time'])
    _mix_end = 30
    #################################################################

    #################################################################
    # 1.0 - Read signal
    x_all_arr, sr = read_mic_wav_from_folder(in_wav_path,
                                             vert_mic_count,
                                             hor_mic_count,
                                             max_len_sec=max_len_sec)

    ref_sp, _ = sf.read(in_Main_Sp)
    ref_mus, _ = sf.read(in_Main_Mus)
    mix, _ = sf.read(in_Main)

    x_all_arr = x_all_arr[:, (np.int32)(_mix_start * sr):(np.int32)(_mix_end *
                                                                    sr)]

    ref_sp = ref_sp[:(np.int32)((_mix_end - _mix_start) * sr)]
    ref_mus = ref_mus[:(np.int32)((_mix_end - _mix_start) * sr)]
    mix = mix[(np.int32)(_mix_start * sr):(np.int32)(_mix_end * sr)]

    (n_channels, n_samples) = x_all_arr.shape
    print("Array data read done!")
    print("    n_channels  = ", n_channels)
    print("    n_samples   = ", n_samples)
    print("    freq        = ", sr)

    #################################################################
    # 2 - Do STFT
    stft_all = stft_arr(x_all_arr, fftsize=n_fft)
    (n_bins, n_sensors, n_frames) = stft_all.shape

    print("STFT calc done!")
    print("    n_bins     = ", n_bins)
    print("    n_sensors  = ", n_sensors)
    print("    n_frames   = ", n_frames)

    #################################################################
    # 3 - Calc  steering vector
    print('Calc  steering vector!')
    print('    (angle_h, angle_v) = ', angle_h, angle_v)
    print('    (angle_inf_h, angle_inf_v) = ', angle_inf_h, angle_inf_v)
    sensor_positions = get_sensor_positions(hor_mic_count,
                                            vert_mic_count,
                                            dHor=dHor,
                                            dVert=dVert)
    source_position = get_source_position(angle_h, angle_v, radius=6.0)
    source_position_inf = get_source_position(angle_inf_h,
                                              angle_inf_v,
                                              radius=6.0)

    d_arr = propagation_vector_free_field(sensor_positions,
                                          source_position,
                                          N_fft=n_fft,
                                          F_s=sr)
    d_arr_inf = propagation_vector_free_field(sensor_positions,
                                              source_position_inf,
                                              N_fft=n_fft,
                                              F_s=sr)

    #################################################################
    # 4 - Calc DS beamforming in desired and noise direction
    result_spec = ds_beamforming(stft_all, d_arr.T)
    result_spec_inf = ds_beamforming(stft_all, d_arr_inf.T)

    #################################################################
    # 5 - ISTFT
    sig_sp = istft(result_spec.transpose((1, 0)), overlap=2)
    sig_inf = istft(result_spec_inf.transpose((1, 0)), overlap=2)

    sf.write(r"out/out_ds_sp.wav", sig_sp, sr)
    sf.write(r"out/out_ds_inf.wav", sig_inf, sr)

    #################################################################
    # 5.1 - NULL filter + cyclic parameters
    out_spec, _ = null_filter(stft_all,
                              d_arr_sp=d_arr.T,
                              d_arr_inf=d_arr_inf.T)
    sig_out = istft(out_spec.transpose((1, 0)), overlap=2)
    sf.write(r"out/out_null.wav", sig_out, sr)

    #result_spec, _ = null_filter_ex(stft_mix_arr, d_arr_sp=d_arr.T, lst_d_arr_inf=[d_arr_inf.T, d_arr_inf_d1.T, d_arr_inf_d2.T])

    sdr_impr, sir_impr, sar_impr, sdr_base, sir_base, sar_base = calc_sdr_impr_metric(
        ref_sp, ref_mus, mix, sig_out)

    print(base_name)
    print(
        "sdr_impr, sir_impr, sar_impr  =  {}, {}, {},  sdr_base, sir_base, sar_base  =  {}, {}, {}\n"
        .format(sdr_impr, sir_impr, sar_impr, sdr_base, sir_base, sar_base))
    print('---------------------------------------------')
Beispiel #6
0
def params_iterate():

    base_name = 'out_mus1_spk1_snr_-10'
    #base_name = 'out_wgn_spk_snr_-10'

    config = cfg.ConfigParser()
    config.read(os.path.join(r'./data/_sdr_test', base_name, 'config.cfg'))

    in_Main = r'./data/_sdr_test/' + base_name + r'/ds_mix.wav'
    in_Main_Sp = r'./data/_sdr_test/' + base_name + r'/ds_spk.wav'
    in_Main_Mus = r'./data/_sdr_test/' + base_name + r'/ds_mus.wav'

    # #################################################################
    # 1.0 - read PROFILE
    vert_mic_count = int(config['MIC_CFG']['vert_mic_count'])
    hor_mic_count = int(config['MIC_CFG']['hor_mic_count'])
    dHor = float(config['MIC_CFG']['dhor'])
    dVert = float(config['MIC_CFG']['dvert'])
    max_len_sec = int(config['MIC_CFG']['max_len_sec'])
    n_fft = int(config['MIC_CFG']['fft_size'])

    angle_h = -float(config['FILTER_CFG']['angle_h'])
    angle_v = -float(config['FILTER_CFG']['angle_v'])
    angle_inf_h = -float(config['FILTER_CFG']['angle_inf_h'])
    angle_inf_v = -float(config['FILTER_CFG']['angle_inf_v'])

    in_wav_path = r'./data/_sdr_test/' + base_name + r'/mix'
    out_wav_path = r'./data/out/'

    _mix_start = float(config['FILTER_CFG']['start_mix_time'])
    _mix_end = 30
    #################################################################

    #################################################################
    # 1.0 - Read signal
    x_all_arr, sr = read_mic_wav_from_folder(in_wav_path,
                                             vert_mic_count,
                                             hor_mic_count,
                                             max_len_sec=max_len_sec)

    ref_sp, _ = sf.read(in_Main_Sp)
    ref_mus, _ = sf.read(in_Main_Mus)
    mix, _ = sf.read(in_Main)

    x_all_arr = x_all_arr[:, (np.int32)(_mix_start * sr):(np.int32)(_mix_end *
                                                                    sr)]

    ref_sp = ref_sp[:(np.int32)((_mix_end - _mix_start) * sr)]
    ref_mus = ref_mus[:(np.int32)((_mix_end - _mix_start) * sr)]
    mix = mix[(np.int32)(_mix_start * sr):(np.int32)(_mix_end * sr)]

    (n_channels, n_samples) = x_all_arr.shape
    print("Array data read done!")
    print("    n_channels  = ", n_channels)
    print("    n_samples   = ", n_samples)
    print("    freq        = ", sr)

    #################################################################
    # 2 - Do STFT
    stft_all = stft_arr(x_all_arr, fftsize=n_fft)
    (n_bins, n_sensors, n_frames) = stft_all.shape

    print("STFT calc done!")
    print("    n_bins     = ", n_bins)
    print("    n_sensors  = ", n_sensors)
    print("    n_frames   = ", n_frames)

    #################################################################
    # 3 - Calc  steering vector
    print('Calc  steering vector!')
    print('    (angle_h, angle_v) = ', angle_h, angle_v)
    print('    (angle_inf_h, angle_inf_v) = ', angle_inf_h, angle_inf_v)
    sensor_positions = get_sensor_positions(hor_mic_count,
                                            vert_mic_count,
                                            dHor=dHor,
                                            dVert=dVert)
    source_position = get_source_position(angle_h, angle_v, radius=6.0)
    source_position_inf = get_source_position(angle_inf_h,
                                              angle_inf_v,
                                              radius=6.0)

    d_arr = propagation_vector_free_field(sensor_positions,
                                          source_position,
                                          N_fft=n_fft,
                                          F_s=sr)
    d_arr_inf = propagation_vector_free_field(sensor_positions,
                                              source_position_inf,
                                              N_fft=n_fft,
                                              F_s=sr)

    #################################################################
    # 4 - Calc DS beamforming in desired and noise direction
    result_spec = ds_beamforming(stft_all, d_arr.T)
    result_spec_inf = ds_beamforming(stft_all, d_arr_inf.T)

    #################################################################
    # 5 - ISTFT
    sig_sp = istft(result_spec.transpose((1, 0)), overlap=2)
    sig_inf = istft(result_spec_inf.transpose((1, 0)), overlap=2)

    sf.write(r"out/out_ds_sp.wav", sig_sp, sr)
    sf.write(r"out/out_ds_inf.wav", sig_inf, sr)

    #################################################################
    # 6.1 - AP filter + cyclic parameters
    # M = 200
    # step = 0.05
    # L = 5
    # leak = 0.0
    # delay = -5

    params = [
        #(150, 0.005, 5, 0.001, 0),
        (150, 0.005, 5, 0.001, 0),
        (200, 0.05, 5, 0.001, 0),
    ]

    for (M, step, L, leak, delay) in params:
        print("process     M = {}, step = {}, L = {}, leak = {}, delay = {}".
              format(M, step, L, leak, delay))
        sig_inf = np.roll(sig_inf, delay)

        sig_result = affine_projection_filter(main=sig_sp,
                                              ref=sig_inf,
                                              M=M,
                                              step=step,
                                              L=L,
                                              leak=leak)
        sf.write(
            r"out/out_ap_null_M_{}_step_{}_L_{}_leak_{}_delay_{}.wav".format(
                M, step, L, leak, delay), sig_result, sr)

        sdr_impr, sir_impr, sar_impr, sdr_base, sir_base, sar_base = calc_sdr_impr_metric(
            ref_sp, ref_mus, mix, sig_result)

        print(base_name)
        print(
            "sdr_impr, sir_impr, sar_impr  =  {}, {}, {},  sdr_base, sir_base, sar_base  =  {}, {}, {}\n"
            .format(sdr_impr, sir_impr, sar_impr, sdr_base, sir_base,
                    sar_base))
        print('---------------------------------------------')
Beispiel #7
0
def do_ds():
    #################################################################
    # 1.0 - out_mus1_spk1_snr_-10 PROFILE

    vert_mic_count = 6
    hor_mic_count = 11
    dHor = 0.035
    dVert = 0.05
    max_len_sec = 60
    n_fft = 512

    # (angle_hor_log, angle_vert_log) = (7.1539, 7.39515)
    (angle_hor_log, angle_vert_log) = (-16.0721, -0.163439)

    angle_h = -angle_hor_log
    angle_v = -angle_vert_log

    _mix_start = 10
    _mix_end = 50

    in_wav_path = r'./data/_sdr_test/out_mus1_spk1_snr_-15/mix/'
    out_wav_path = r'./data/out/'
    #################################################################

    #################################################################
    # 1.0 - Read signal
    x_all_arr, sr = read_mic_wav_from_folder(in_wav_path,
                                             vert_mic_count,
                                             hor_mic_count,
                                             max_len_sec=max_len_sec)
    x_all_arr = x_all_arr[:, (np.int32)(_mix_start * sr):(np.int32)(_mix_end *
                                                                    sr)]

    (n_channels, n_samples) = x_all_arr.shape

    print("Array data read done!")
    print("    n_channels  = ", n_channels)
    print("    n_samples   = ", n_samples)
    print("    freq        = ", sr)

    #################################################################
    # 2 - Do STFT
    stft_all = stft_arr(x_all_arr, fftsize=n_fft)
    (n_bins, n_sensors, n_frames) = stft_all.shape

    print("STFT calc done!")
    print("    n_bins     = ", n_bins)
    print("    n_sensors  = ", n_sensors)
    print("    n_frames   = ", n_frames)

    #################################################################
    # 3 - Calc  steering vector
    print('Calc  steering vector!')
    print('    (angle_h, angle_v) = ', angle_h, angle_v)
    sensor_positions = get_sensor_positions(hor_mic_count,
                                            vert_mic_count,
                                            dHor=dHor,
                                            dVert=dVert)
    source_position = get_source_position(angle_h, angle_v, radius=6.0)
    d_arr = propagation_vector_free_field(sensor_positions,
                                          source_position,
                                          N_fft=n_fft,
                                          F_s=sr)

    #################################################################
    # 4 - Calc DS filter output
    result_spec = ds_beamforming(stft_all, d_arr.T)

    #################################################################
    # 5 inverse STFT and save
    sig_out = istft(result_spec.transpose((1, 0)), overlap=2)
    sf.write(r"out/out_DS.wav", sig_out, sr)