Skip to content

Commit 3a9b0a5

Browse files
committed
make console folder for CLI
1 parent 431a35e commit 3a9b0a5

5 files changed

Lines changed: 150 additions & 105 deletions

File tree

pytsmod/console.py

Lines changed: 0 additions & 100 deletions
This file was deleted.

pytsmod/console/__init__.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
from .console import run
2+
3+
# run()

pytsmod/console/console.py

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
import sys
2+
sys.path.append('./')
3+
4+
from pytsmod import ola, wsola
5+
from pytsmod import phase_vocoder as pv
6+
from pytsmod import phase_vocoder_int as pv_int
7+
from .descs import *
8+
import argparse
9+
import soundfile as sf
10+
11+
12+
def run():
13+
parser = argparse.ArgumentParser(description=TSMOD_DESC)
14+
subparsers = parser.add_subparsers(help=SUBPARSER_HELP,
15+
dest='subparser_name')
16+
17+
# create parser for OLA.
18+
parser_ola = subparsers.add_parser('ola', help=OLA_HELP,
19+
description=OLA_DESC)
20+
parser_ola.add_argument('input_file', type=str, help=INPUT_HELP)
21+
parser_ola.add_argument('output_file', type=str, help=OUTPUT_HELP)
22+
parser_ola.add_argument('alpha', type=float, help=A_HELP)
23+
parser_ola.add_argument('--win_type', '-wt', default='hann', type=str,
24+
help=WT_HELP)
25+
parser_ola.add_argument('--win_size', '-ws', default=1024, type=int,
26+
help=WS_HELP)
27+
parser_ola.add_argument('--syn_hop_size', '-sh', default=512, type=int,
28+
help=SH_HELP)
29+
30+
# create parser for WSOLA.
31+
parser_wsola = subparsers.add_parser('wsola', help=WSOLA_HELP,
32+
description=WSOLA_DESC)
33+
parser_wsola.add_argument('input_file', type=str, help=INPUT_HELP)
34+
parser_wsola.add_argument('output_file', type=str, help=OUTPUT_HELP)
35+
parser_wsola.add_argument('alpha', type=float, help=A_HELP)
36+
parser_wsola.add_argument('--win_type', '-wt', default='hann', type=str,
37+
help=WT_HELP)
38+
parser_wsola.add_argument('--win_size', '-ws', default=1024, type=int,
39+
help=WS_HELP)
40+
parser_wsola.add_argument('--syn_hop_size', '-sh', default=512, type=int,
41+
help=SH_HELP)
42+
parser_wsola.add_argument('--tolerance', '-t', default=512, type=int,
43+
help=TOL_HELP)
44+
45+
# create parser for phase-vocoder.
46+
parser_pv = subparsers.add_parser('pv', help=PV_HELP,
47+
description=PV_DESC)
48+
parser_pv.add_argument('input_file', type=str, help=INPUT_HELP)
49+
parser_pv.add_argument('output_file', type=str, help=OUTPUT_HELP)
50+
parser_pv.add_argument('alpha', type=float, help=A_HELP)
51+
parser_pv.add_argument('--win_type', '-wt', default='sin', type=str,
52+
help=WT_HELP)
53+
parser_pv.add_argument('--win_size', '-ws', default=2048, type=int,
54+
help=WS_HELP)
55+
parser_pv.add_argument('--syn_hop_size', '-sh', default=512, type=int,
56+
help=SH_HELP)
57+
parser_pv.add_argument('--zero_pad', '-z', default=0, type=int,
58+
help=ZP_HELP)
59+
parser_pv.add_argument('--restore_energy', '-e', action='store_true',
60+
help=RE_HELP)
61+
parser_pv.add_argument('--fft_shift', '-fs', action='store_true',
62+
help=FS_HELP)
63+
parser_pv.add_argument('--phase_lock', '-pl', action='store_true',
64+
help=PL_HELP)
65+
66+
# create parser for phase-vocoder int.
67+
parser_pvi = subparsers.add_parser('pv_int', help=PVI_HELP,
68+
description=PVI_DESC)
69+
parser_pvi.add_argument('input_file', type=str, help=INPUT_HELP)
70+
parser_pvi.add_argument('output_file', type=str, help=OUTPUT_HELP)
71+
parser_pvi.add_argument('alpha', type=int, help=A_PVI_HELP)
72+
parser_pvi.add_argument('--win_type', '-wt', default='hann', type=str,
73+
help=WT_HELP)
74+
parser_pvi.add_argument('--win_size', '-ws', default=2048, type=int,
75+
help=WS_HELP)
76+
parser_pvi.add_argument('--syn_hop_size', '-sh', default=512, type=int,
77+
help=SH_HELP)
78+
parser_pvi.add_argument('--zero_pad', '-z', default=None, type=int,
79+
help=ZP_HELP)
80+
parser_pvi.add_argument('--restore_energy', '-e', action='store_true',
81+
help=RE_HELP)
82+
parser_pvi.add_argument('--fft_shift', '-fs', action='store_true',
83+
help=FS_HELP)
84+
85+
args = parser.parse_args()
86+
87+
x, sr = sf.read(args.input_file)
88+
89+
if args.subparser_name == 'ola':
90+
y = ola(x, args.alpha, win_type=args.win_type, win_size=args.win_size,
91+
syn_hop_size=args.syn_hop_size)
92+
elif args.subparser_name == 'wsola':
93+
y = wsola(x, args.alpha, win_type=args.win_type,
94+
win_size=args.win_size, syn_hop_size=args.syn_hop_size,
95+
tolerance=args.tolerance)
96+
elif args.subparser_name == 'pv':
97+
y = pv(x, args.alpha, win_type=args.win_type, win_size=args.win_size,
98+
syn_hop_size=args.syn_hop_size, zero_pad=args.zero_pad,
99+
restore_energy=args.restore_energy, fft_shift=args.fft_shift,
100+
phase_lock=args.phase_lock)
101+
elif args.subparser_name == 'pv_int':
102+
y = pv_int(x, args.alpha, win_type=args.win_type,
103+
win_size=args.win_size, syn_hop_size=args.syn_hop_size,
104+
zero_pad=args.zero_pad,
105+
restore_energy=args.restore_energy,
106+
fft_shift=args.fft_shift)
107+
# elif args.subparser_name == 'hp':
108+
# pass
109+
110+
sf.write(args.output_file, y.T, sr)
111+
112+
113+
if __name__ == '__main__':
114+
run()

pytsmod/console/descs.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
TSMOD_DESC = 'Processing time-scale modification for given audio file.'
2+
SUBPARSER_HELP = 'Available TSM algorithms'
3+
4+
INPUT_HELP = 'Input audio file to modify.'
5+
OUTPUT_HELP = 'Output file path to save.'
6+
7+
A_HELP = 'The time stretching factor alpha.'
8+
WT_HELP = 'Type of the window function. hann and sin are available.'
9+
WS_HELP = 'Size of the window function.'
10+
SH_HELP = 'Hop size of the synthesis window.'
11+
12+
OLA_HELP = 'Using OLA to modify audio file.'
13+
OLA_DESC = 'Using OLA to modify audio file.'
14+
15+
WSOLA_HELP = 'Using WSOLA to modify audio file.'
16+
WSOLA_DESC = 'Using WSOLA to modify audio file.'
17+
TOL_HELP = 'Number of samples the window positions in the input signal may be shifted'
18+
19+
PV_HELP = 'Using phase vocoder to modify audio file.'
20+
PV_DESC = 'Using phase vocoder to modify audio file.'
21+
ZP_HELP = 'The size of the zero pad in the window function.'
22+
RE_HELP = 'Try to reserve potential energy loss.'
23+
FS_HELP = 'Apply circular shift to STFT and ISTFT.'
24+
PL_HELP = 'Apply phase locking.'
25+
26+
PVI_HELP = 'Using phase vocoder specialized for integer stretching factor.'
27+
PVI_DESC = 'Using phase vocoder specialized for integer stretching factor.'
28+
A_PVI_HELP = 'The time stretching factor alpha. Only integer value is allowed.'

tests/test_console.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ def test_console_default_params(algorithm):
1515
x, sr = sf.read(test_file)
1616
y = globals()[algorithm](x, alpha)
1717

18-
cmd = ['python', 'pytsmod/console.py', algorithm,
18+
cmd = ['python', 'pytsmod/console/console.py', algorithm,
1919
test_file, 'temp_cli.wav', str(alpha)]
2020
if algorithm == 'pv_int':
2121
cmd.append('-fs')
@@ -42,7 +42,7 @@ def test_console_ola(alpha, win_type, win_size, syn_hop_size):
4242
y = ola(x, alpha, win_type=win_type, win_size=win_size,
4343
syn_hop_size=syn_hop_size)
4444

45-
cmd = ['python', 'pytsmod/console.py', 'ola',
45+
cmd = ['python', 'pytsmod/console/console.py', 'ola',
4646
test_file, 'temp_cli.wav', str(alpha),
4747
'-wt', win_type, '-ws', str(win_size),
4848
'-sh', str(syn_hop_size)]
@@ -70,7 +70,7 @@ def test_console_wsola(alpha, win_type, win_size, syn_hop_size, tolerance):
7070
y = wsola(x, alpha, win_type=win_type, win_size=win_size,
7171
syn_hop_size=syn_hop_size, tolerance=tolerance)
7272

73-
cmd = ['python', 'pytsmod/console.py', 'wsola',
73+
cmd = ['python', 'pytsmod/console/console.py', 'wsola',
7474
test_file, 'temp_cli.wav', str(alpha),
7575
'-wt', win_type, '-ws', str(win_size),
7676
'-sh', str(syn_hop_size), '-t', str(tolerance)]
@@ -104,7 +104,7 @@ def test_console_pv(alpha, win_type, win_size, syn_hop_size, zero_pad,
104104
restore_energy=restore_energy, fft_shift=fft_shift,
105105
phase_lock=phase_lock)
106106

107-
cmd = ['python', 'pytsmod/console.py', 'pv',
107+
cmd = ['python', 'pytsmod/console/console.py', 'pv',
108108
test_file, 'temp_cli.wav', str(alpha),
109109
'-wt', win_type, '-ws', str(win_size),
110110
'-sh', str(syn_hop_size), '-z', str(zero_pad),
@@ -137,7 +137,7 @@ def test_console_pv_int(alpha, win_type, win_size, syn_hop_size, zero_pad,
137137
syn_hop_size=syn_hop_size, zero_pad=zero_pad,
138138
restore_energy=restore_energy, fft_shift=fft_shift)
139139

140-
cmd = ['python', 'pytsmod/console.py', 'pv',
140+
cmd = ['python', 'pytsmod/console/console.py', 'pv',
141141
test_file, 'temp_cli.wav', str(alpha),
142142
'-wt', win_type, '-ws', str(win_size),
143143
'-sh', str(syn_hop_size), '-z', str(zero_pad),

0 commit comments

Comments
 (0)