wav_list = glob.glob("C:\ResNet\TIMIT\TEST\*\*\*.wav") print(f'找到{len(wav_list)}个训练音频') speaker_name_list = [] all_wav_list = [] speaker_wav_dict = dict({}) enroll_list = [] for wav in wav_list: wav_split = wav.split('\\') d_r = wav_split[-3] speaker_name = wav_split[-2] wav_name = wav_split[-1] speaker_name_list.append(speaker_name) wav_path = f"{d_r}\{speaker_name}\{wav_name}" all_wav_list.append(wav_path) if speaker_name in speaker_wav_dict: speaker_wav_dict[speaker_name].append(wav_path) else: speaker_wav_dict[speaker_name] = [wav_path] enroll_list.append(wav_path) SpeakerNameList = set(speaker_name_list) f = open("TIMIT-testlist.txt", 'w') num_pairs = 4000 for i in range(num_pairs): if i % 2 == 0: # label==1 wav1 = random.sample(enroll_list, 1)[0] id1 = wav1.split('\\')[-2] wav2 = random.sample(speaker_wav_dict[id1], 1)[0] label = 1 else: # label==0 wav1 = random.sample(enroll_list, 1)[0] id1 = wav1.split('\\')[-2] wav2 = random.sample(all_wav_list, 1)[0] id2 = wav2.split('-')[0] if id1 == id2: continue label = 0 f.write("{} .\{} .\{}\n".format(label, wav1, wav2)) f.close()
时间: 2024-04-25 22:27:55 浏览: 109
glob-store.js:具有迭代器和全局语义的键值存储
这段代码是在使用TIMIT数据集创建一份测试集清单文件(TIMIT-testlist.txt),其中包含4000对音频(wav1, wav2)以及它们的标签(label)。具体流程如下:
1. 使用glob模块匹配TIMIT数据集TEST文件夹中所有的.wav文件,并统计数量。
2. 遍历所有.wav文件,将它们的路径存入all_wav_list列表中,并将每个speaker的第一条音频加入enroll_list列表中。
3. 构建speaker_wav_dict字典,键为说话人ID,值为该说话人的所有音频路径列表。
4. 遍历num_pairs次,每次随机选择两个音频wav1和wav2,并给它们标上0或1的标签。
5. 如果标签为1,则从enroll_list列表中随机选择一个音频作为wav1,再从该说话人的所有音频中随机选择一个作为wav2。
6. 如果标签为0,则从enroll_list列表中随机选择一个音频作为wav1,再从all_wav_list列表中随机选择一个作为wav2。要求wav2所属的说话人与wav1不同。
7. 将每对wav1和wav2以及它们的标签写入TIMIT-testlist.txt文件中。
这份测试集清单文件可以用于测试说话人识别模型的准确率。
阅读全文