游雁
2023-11-16 4ace5a95b052d338947fc88809a440ccd55cf6b4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
import kaldiio
import os
import sys
import numpy as np
 
 
def int2vec(x, vec_dim=8, dtype=np.float32):
    b = ('{:0' + str(vec_dim) + 'b}').format(x)
    # little-endian order: lower bit first
    return (np.array(list(b)[::-1]) == '1').astype(dtype)
 
 
def seq2arr(seq, vec_dim=8):
    return np.row_stack([int2vec(int(x), vec_dim) for x in seq])
 
 
if __name__ == '__main__':
    scp_file = sys.argv[1]
    label_file = sys.argv[2]
    out_file = sys.argv[3]
    max_spk_num = int(sys.argv[4])
 
    os.makedirs(os.path.dirname(out_file), exist_ok=True)
 
    out_file = out_file.rsplit('.', maxsplit=1)[0]
    wav_writer = kaldiio.WriteHelper("ark,scp,f:{}.ark,{}.scp".format(out_file, out_file))
    for i, (uttid, pse_str) in enumerate(zip(open(scp_file, "rt"), open(label_file, "rt"))):
        uttid, pse_str = uttid.strip().split(" ", maxsplit=1)[0], pse_str.strip()
        bin_label = seq2arr(pse_str.split(" "), vec_dim=max_spk_num)
        wav_writer(uttid, bin_label)
 
        if i % 100 == 0:
            print(f"Processed {i} samples, the last is {uttid}")
 
    wav_writer.close()