def METHOD_NAME(
        data_path_and_name_and_type,
        raw_inputs: Union[np.ndarray, torch.Tensor] = None,
        output_dir_v2: Optional[str] = None,
        fs: dict = None,
        param_dict: dict = None
):
    # 3. Build data-iterator
    if data_path_and_name_and_type is None and raw_inputs is not None:
        if isinstance(raw_inputs, torch.Tensor):
            raw_inputs = raw_inputs.numpy()
        data_path_and_name_and_type = [raw_inputs, "speech", "waveform"]
    loader = build_streaming_iterator(
        task_name="ss",
        preprocess_args=None,
        data_path_and_name_and_type=data_path_and_name_and_type,
        dtype=dtype,
        fs=fs,
        batch_size=batch_size,
        num_workers=num_workers,
    )
    # 4 .Start for-loop
    output_path = output_dir_v2 if output_dir_v2 is not None else output_dir
    if not os.path.exists(output_path):
        cmd = 'mkdir -p ' + output_path 
        os.system(cmd)       
    for keys, batch in loader:
        assert isinstance(batch, dict), type(batch)
        assert all(isinstance(s, str) for s in keys), keys
        _bs = len(next(iter(batch.values())))
        assert len(keys) == _bs, f"{len(keys)} != {_bs}"
        # do speech separation
        logging.info('decoding: {}'.format(keys[0]))
        ss_results = speech_separator(**batch)
        for spk in range(num_spks):
            sf.write(os.path.join(output_path, keys[0] + '_s' + str(spk+1)+'.wav'), ss_results[spk], sample_rate)
    torch.cuda.empty_cache()
    return ss_results