Merge short VAD segments to reduce fragmentation. Args: vad_result (list): VAD segments [[start_ms, end_ms], ...]. max_length (int): Maximum merged segment length in ms (default 15000). min_length (int): Minimum segment length; shorter ones get merged (default 0). R
(vad_result, max_length=15000, min_length=0)
| 52 | |
| 53 | |
| 54 | def merge_vad(vad_result, max_length=15000, min_length=0): |
| 55 | |
| 56 | """Merge short VAD segments to reduce fragmentation. |
| 57 | |
| 58 | Args: |
| 59 | vad_result (list): VAD segments [[start_ms, end_ms], ...]. |
| 60 | max_length (int): Maximum merged segment length in ms (default 15000). |
| 61 | min_length (int): Minimum segment length; shorter ones get merged (default 0). |
| 62 | |
| 63 | Returns: |
| 64 | list: Merged VAD segments [[start_ms, end_ms], ...]. |
| 65 | """ |
| 66 | new_result = [] |
| 67 | if len(vad_result) <= 1: |
| 68 | return vad_result |
| 69 | time_step = [t[0] for t in vad_result] + [t[1] for t in vad_result] |
| 70 | time_step = sorted(list(set(time_step))) |
| 71 | if len(time_step) == 0: |
| 72 | return [] |
| 73 | bg = 0 |
| 74 | for i in range(len(time_step) - 1): |
| 75 | time = time_step[i] |
| 76 | if time_step[i + 1] - bg < max_length: |
| 77 | continue |
| 78 | if time - bg > min_length: |
| 79 | new_result.append([bg, time]) |
| 80 | # if time - bg < max_length * 1.5: |
| 81 | # new_result.append([bg, time]) |
| 82 | # else: |
| 83 | # split_num = int(time - bg) // max_length + 1 |
| 84 | # spl_l = int(time - bg) // split_num |
| 85 | # for j in range(split_num): |
| 86 | # new_result.append([bg + j * spl_l, bg + (j + 1) * spl_l]) |
| 87 | bg = time |
| 88 | new_result.append([bg, time_step[-1]]) |
| 89 | return new_result |
no outgoing calls
no test coverage detected
searching dependent graphs…