| | import os
|
| | import sys
|
| | import numpy as np
|
| | import traceback
|
| | from scipy.io import wavfile
|
| |
|
| |
|
| |
|
| | from tools.my_utils import load_audio
|
| | from slicer2 import Slicer
|
| |
|
| |
|
| | def slice(inp, opt_root, threshold, min_length, min_interval, hop_size, max_sil_kept, _max, alpha, i_part, all_part):
|
| | os.makedirs(opt_root, exist_ok=True)
|
| | if os.path.isfile(inp):
|
| | input = [inp]
|
| | elif os.path.isdir(inp):
|
| | input = [os.path.join(inp, name) for name in sorted(list(os.listdir(inp)))]
|
| | else:
|
| | return "输入路径存在但既不是文件也不是文件夹"
|
| | slicer = Slicer(
|
| | sr=32000,
|
| | threshold=int(threshold),
|
| | min_length=int(min_length),
|
| | min_interval=int(min_interval),
|
| | hop_size=int(hop_size),
|
| | max_sil_kept=int(max_sil_kept),
|
| | )
|
| | _max = float(_max)
|
| | alpha = float(alpha)
|
| | for inp_path in input[int(i_part) :: int(all_part)]:
|
| |
|
| | try:
|
| | name = os.path.basename(inp_path)
|
| | audio = load_audio(inp_path, 32000)
|
| |
|
| | for chunk, start, end in slicer.slice(audio):
|
| | tmp_max = np.abs(chunk).max()
|
| | if tmp_max > 1:
|
| | chunk /= tmp_max
|
| | chunk = (chunk / tmp_max * (_max * alpha)) + (1 - alpha) * chunk
|
| | wavfile.write(
|
| | "%s/%s_%010d_%010d.wav" % (opt_root, name, start, end),
|
| | 32000,
|
| |
|
| | (chunk * 32767).astype(np.int16),
|
| | )
|
| | except:
|
| | print(inp_path, "->fail->", traceback.format_exc())
|
| | return "执行完毕,请检查输出文件"
|
| |
|
| |
|
| | print(slice(*sys.argv[1:]))
|
| |
|