diff -ur v2/snddiv.py v3/snddiv.py --- v2/snddiv.py 2020-01-19 16:31:38.000000000 +0900 +++ v3/snddiv.py 2020-01-20 12:13:42.792518000 +0900 @@ -24,7 +24,9 @@ if not os.path.exists( name_mp3 ): dbg.err_exit( 'not found {}'.format(name_mp3) ) cmd = 'lame --decode {} > /dev/null 2>&1'.format( name_mp3 ) + dbg.out('make {}.wav ... '.format(name), '') cmd_ut.call(cmd) + dbg.out('OK') def raw_opt_new(): cmd = 'sox --info {}.wav'.format(name) @@ -59,7 +61,9 @@ if os.path.exists( name + '.raw' ): return cmd = 'sox {}.wav {}.raw'.format(name, name) + dbg.out('make {}.raw ... '.format(name), '') cmd_ut.call(cmd) + dbg.out('OK') make_wav() opt = raw_opt_new() @@ -72,8 +76,10 @@ n = opt.byte_per_smp m = len(dat) // n + dbg.out('make smp_lst ... ', '') smp_lst = list( map( lambda i: dat[i*n:i*n+n], range(m) ) ) smp_rlst = smp_lst[::-1] + dbg.out('OK') def get_smp_sec(sec, reverse): m = opt.smp_sec(sec) @@ -89,7 +95,7 @@ return empty.new( locals() ) -def play_new(dat, opt, r_rate=1.0): +def play_new(dat, opt, sudo_passwd='', r_rate=1.0): e = empty.new() e.dat = dat e.run = False @@ -100,14 +106,9 @@ last_sec = opt.byte_to_sec( len(dat) ) def proc_new(): - sudo_passwd = '' cmd = 'play {} -'.format( opt.get_raw_opt(r_rate) ) - if sudo_passwd: - cmd = 'sudo -S ' + cmd PIPE = cmd_ut.PIPE - proc = cmd_ut.proc_new(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE) - if sudo_passwd: - proc.write_stdin_flush( sudo_passwd + '\n' ) + proc = cmd_ut.proc_new(cmd, stdin=PIPE, stdout=PIPE, stderr=PIPE, sudo_pw=sudo_passwd) return proc def update(): @@ -164,21 +165,34 @@ return empty.to_attr( e, locals() ) +def get_args(): + av = sys.argv[1:] + k = '-S' + sudo_passwd = '' + try: + if k in av: + i = av.index(k) + av.pop(i) + sudo_passwd = av.pop(i) + return ( av[0], sudo_passwd ) + except: + dbg.err_exit( 'Usage: {} [{} sudo_passwd] filename_mp3'.format( sys.argv[0], k ) ) + if __name__ == "__main__": - if not sys.argv[1:]: - dbg.err_exit( 'Usage: {} filename_mp3'.format( sys.argv[0] ) ) + ( filename_mp3, sudo_passwd ) = get_args() - data = data_new( sys.argv[1] ) + data = data_new(filename_mp3) dbg.out( 'last_sec={}'.format( data.last_sec ) ) opt = data.opt dat = data.get_dat_sec(10, False) - play = play_new(dat, opt) + play = play_new(dat, opt, sudo_passwd) while True: dbg.out('snd> ', '') s = sys.stdin.readline() if not s: + dbg.out('') break exec(s) # EOF