예제 #1
0
def run(exe_path, scp_path, out_dir, wave_len, num_outputs, remove_files,
        log_level):
    logging.basicConfig(level=log_level)
    for i in range(num_outputs):
        inputs = {
            'blackman_coeff':
            '%.4f' % (random.random() * 5),
            'dither':
            '0',
            'energy_floor':
            '%.4f' % (random.random() * 5),
            'frame_length':
            '%.4f' % (float(random.randint(2, wave_len - 1)) / 16000 * 1000),
            'frame_shift':
            '%.4f' % (float(random.randint(1, wave_len - 1)) / 16000 * 1000),
            'preemphasis_coefficient':
            '%.2f' % random.random(),
            'raw_energy':
            utils.generate_rand_boolean(),
            'remove_dc_offset':
            utils.generate_rand_boolean(),
            'round_to_power_of_two':
            utils.generate_rand_boolean(),
            'snip_edges':
            utils.generate_rand_boolean(),
            'subtract_mean':
            utils.generate_rand_boolean(),
            'window_type':
            utils.generate_rand_window_type()
        }

        fn = 'spec-' + ('-'.join(list(inputs.values())))

        out_fn = out_dir + fn + '.ark'

        arg = [exe_path]
        arg += ['--' + k.replace('_', '-') + '=' + inputs[k] for k in inputs]
        arg += [scp_path, out_fn]

        logging.info(fn)
        logging.info(inputs)
        logging.info(' '.join(arg))

        try:
            if log_level == 'INFO':
                subprocess.call(arg)
            else:
                subprocess.call(arg,
                                stderr=open(os.devnull, 'wb'),
                                stdout=open(os.devnull, 'wb'))
            logging.info('success')
        except Exception:
            if remove_files and os.path.exists(out_fn):
                os.remove(out_fn)
예제 #2
0
def run(exe_path, scp_path, out_dir, wave_len, num_outputs, remove_files,
        log_level):
    logging.basicConfig(level=log_level)
    for _ in range(num_outputs):
        try:
            nyquist = 16000 // 2
            high_freq = random.randint(1, nyquist)
            low_freq = random.randint(0, high_freq - 1)
            vtln_low = random.randint(low_freq + 1, high_freq - 1)
            vtln_high = random.randint(vtln_low + 1, high_freq - 1)
            vtln_warp_factor = random.uniform(
                0.0, 10.0) if random.random() < 0.3 else 1.0

        except Exception:
            continue

        if not ((0.0 <= low_freq < nyquist) and
                (0.0 < high_freq <= nyquist) and (low_freq < high_freq)):
            continue
        if not (vtln_warp_factor == 1.0 or
                ((low_freq < vtln_low < high_freq) and
                 (0.0 < vtln_high < high_freq) and (vtln_low < vtln_high))):
            continue

        inputs = {
            'blackman_coeff':
            '%.4f' % (random.random() * 5),
            'energy_floor':
            '%.4f' % (random.random() * 5),
            'frame_length':
            '%.4f' % (float(random.randint(3, wave_len - 1)) / 16000 * 1000),
            'frame_shift':
            '%.4f' % (float(random.randint(1, wave_len - 1)) / 16000 * 1000),
            'high_freq':
            str(high_freq),
            'htk_compat':
            utils.generate_rand_boolean(),
            'low_freq':
            str(low_freq),
            'num_mel_bins':
            str(random.randint(4, 8)),
            'preemphasis_coefficient':
            '%.2f' % random.random(),
            'raw_energy':
            utils.generate_rand_boolean(),
            'remove_dc_offset':
            utils.generate_rand_boolean(),
            'round_to_power_of_two':
            utils.generate_rand_boolean(),
            'snip_edges':
            utils.generate_rand_boolean(),
            'subtract_mean':
            utils.generate_rand_boolean(),
            'use_energy':
            utils.generate_rand_boolean(),
            'use_log_fbank':
            utils.generate_rand_boolean(),
            'use_power':
            utils.generate_rand_boolean(),
            'vtln_high':
            str(vtln_high),
            'vtln_low':
            str(vtln_low),
            'vtln_warp':
            '%.4f' % (vtln_warp_factor),
            'window_type':
            utils.generate_rand_window_type()
        }

        fn = 'fbank-' + ('-'.join(list(inputs.values())))
        out_fn = out_dir + fn + '.ark'

        arg = [exe_path]
        arg += ['--' + k.replace('_', '-') + '=' + inputs[k] for k in inputs]
        arg += ['--dither=0.0', scp_path, out_fn]

        logging.info(fn)
        logging.info(inputs)
        logging.info(' '.join(arg))

        try:
            if log_level == 'INFO':
                subprocess.call(arg)
            else:
                subprocess.call(arg,
                                stderr=open(os.devnull, 'wb'),
                                stdout=open(os.devnull, 'wb'))
            logging.info('success')
        except Exception:
            if remove_files and os.path.exists(out_fn):
                os.remove(out_fn)