From d77a665cfc538a19f22c0d30f4f4e0723639ca83 Mon Sep 17 00:00:00 2001 From: Marc Herbert Date: Tue, 11 Aug 2020 11:56:11 -0700 Subject: [PATCH] wavetool.py: clarify cmd_args. No functional change. The output of argparse was disguised with two steps: - it was converted to (slightly more verbose) dictionary for no particular reason - that dictionary was passed entirely as is as kwargs to every function, looking like these functions could be called with changing parameters. Remove these two steps and make it clear that these values are always the same global constants. No other change; no functional change. Signed-off-by: Marc Herbert --- tools/wavetool.py | 43 ++++++++++++++++++++++--------------------- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/tools/wavetool.py b/tools/wavetool.py index 1c257139..1814aeee 100755 --- a/tools/wavetool.py +++ b/tools/wavetool.py @@ -50,37 +50,37 @@ def generate_sinusoids(**p): data = p['amp'] * func(2 * np.pi * p['freq'] * time + p['phase']) return np.reshape(np.repeat(data, p['chan']),[len(data), p['chan']]) -def generate_wav(**cmd): - if cmd['generate'] in ['sine', 'cosine']: +def generate_wav(): + if cmd.generate in ['sine', 'cosine']: wave_param = { - 'type': cmd['generate'], 'amp': cmd['amp'][0], 'freq': cmd['freq'][0], - 'phase': cmd['phase'][0], 'chan': cmd['channel'], 'sample_rate': cmd['sample_rate'], - 'duration': cmd['duration'][0] + 'type': cmd.generate, 'amp': cmd.amp[0], 'freq': cmd.freq[0], + 'phase': cmd.phase[0], 'chan': cmd.channel, 'sample_rate': cmd.sample_rate, + 'duration': cmd.duration[0] } wave_data = generate_sinusoids(**wave_param) else: raise Exception('invalid generate function, will generate nothing') return wave_data -def save_wave(wave_data, **cmd): - wave_path = cmd['output'] +def save_wave(wave_data): + wave_path = cmd.output if wave_path == '.' or not wave_path.endswith('wav'): wave_path = wave_path + '/tmp.wav' - sample_bits = cmd['bits'] + sample_bits = cmd.bits np_types = {'S8': np.int8, 'S16': np.int16, 'S32': np.int32} if sample_bits in np_types.keys(): # range of wave_data is floating point [-1.0, 1.0]. When saving to any integer format use its full range. wave_data = (np.iinfo(np_types[sample_bits]).max * wave_data).astype(np_types[sample_bits]) - wavefile.write(wave_path, cmd['sample_rate'], wave_data) + wavefile.write(wave_path, cmd.sample_rate, wave_data) -def do_wave_analysis(**cmd): - fs_wav, wave = wavefile.read(cmd['recorded_wave']) - fs_ref, ref_wave = wavefile.read(cmd['reference_wave']) +def do_wave_analysis(): + fs_wav, wave = wavefile.read(cmd.recorded_wave) + fs_ref, ref_wave = wavefile.read(cmd.reference_wave) if fs_wav != fs_ref: print('Can not compare wave with different sample rate') sys.exit(1) - if cmd['analyze'] == 'smart_amp': - analyze_wav_smart_amp(wave, ref_wave, fs_wav, cmd['zero_threshold']) + if cmd.analyze == 'smart_amp': + analyze_wav_smart_amp(wave, ref_wave, fs_wav, cmd.zero_threshold) # remove digital zeros in two sides def trim_wave(wave, zero_threshold): @@ -144,17 +144,18 @@ def parse_cmdline(): parser.add_argument('-R', '--recorded_wave', type=str, help='path of recorded wave') parser.add_argument('-r', '--reference_wave', type=str, help='path of reference wave') parser.add_argument('-Z', '--zero_threshold', type=float, default=-50.3, help='zero threshold in dBFS') - return vars(parser.parse_args()) + return parser.parse_args() def main(): - cmd_args = parse_cmdline() + global cmd + cmd = parse_cmdline() - if cmd_args['generate'] is not None: - wave_data = generate_wav(**cmd_args) - save_wave(wave_data, **cmd_args) + if cmd.generate is not None: + wave_data = generate_wav() + save_wave(wave_data) - if cmd_args['analyze'] is not None: - do_wave_analysis(**cmd_args) + if cmd.analyze is not None: + do_wave_analysis() if __name__ == '__main__': main()