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()
|