mirror of
https://github.com/modelscope/FunASR
synced 2025-09-15 14:48:36 +08:00
sond pipeline
This commit is contained in:
parent
04a7ce3205
commit
93bb86e36e
60
egs/mars/sd/scripts/remove_silence_from_wav.py
Normal file
60
egs/mars/sd/scripts/remove_silence_from_wav.py
Normal file
@ -0,0 +1,60 @@
|
||||
import numpy as np
|
||||
from funasr.utils.job_runner import MultiProcessRunnerV3
|
||||
from funasr.utils.misc import load_scp_as_list, load_scp_as_dict
|
||||
import os
|
||||
import librosa
|
||||
import soundfile as sf
|
||||
import argparse
|
||||
|
||||
|
||||
class MyRunner(MultiProcessRunnerV3):
|
||||
|
||||
def prepare(self, parser):
|
||||
parser.add_argument("dir", type=str)
|
||||
parser.add_argument("out_dir", type=str)
|
||||
args = parser.parse_args()
|
||||
|
||||
meeting_scp = load_scp_as_list(os.path.join(args.dir, "meeting.scp"))
|
||||
vad_file = open(os.path.join(args.dir, "segments"), encoding="utf-8")
|
||||
meeting2vad = {}
|
||||
for one_line in vad_file:
|
||||
uid, mid, st, ed = one_line.strip().split(" ")
|
||||
st, ed = int(float(st) * args.sr), int(float(ed) * args.sr)
|
||||
if mid not in meeting2vad:
|
||||
meeting2vad[mid] = []
|
||||
meeting2vad[mid].append((uid, st, ed))
|
||||
|
||||
if not os.path.exists(args.out_dir):
|
||||
os.makedirs(args.out_dir)
|
||||
|
||||
task_list = [(mid, wav_path, meeting2vad[mid]) for mid, wav_path in meeting_scp]
|
||||
return task_list, None, args
|
||||
|
||||
def post(self, results_list, args):
|
||||
pass
|
||||
|
||||
|
||||
def process(task_args):
|
||||
_, task_list, _, args = task_args
|
||||
for mid, wav_path, vad_list in task_list:
|
||||
wav = librosa.load(wav_path, args.sr, True)[0] * 32767
|
||||
seg_list = []
|
||||
pos_map = []
|
||||
offset = 0
|
||||
for uid, st, ed in vad_list:
|
||||
seg_list.append(wav[st: ed])
|
||||
pos_map.append("{} {} {} {} {}\n".format(uid, st, ed, offset, offset+ed-st))
|
||||
offset = offset + ed - st
|
||||
out = np.concatenate(seg_list, axis=0)
|
||||
save_path = os.path.join(args.out_dir, "{}.wav".format(mid))
|
||||
sf.write(save_path, out.astype(np.int16), args.sr, "PCM_16", "LITTLE", "WAV", True)
|
||||
map_path = os.path.join(args.out_dir, "{}.pos".format(mid))
|
||||
with open(map_path, "wt", encoding="utf-8") as fd:
|
||||
fd.writelines(pos_map)
|
||||
print(mid)
|
||||
return None
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
my_runner = MyRunner(process)
|
||||
my_runner.run()
|
||||
Loading…
Reference in New Issue
Block a user