Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 0 additions & 31 deletions data/2mix_30data/mixture_map.csv

This file was deleted.

51 changes: 51 additions & 0 deletions data/mix/mixture_map.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
mix_id,mix_file,src1,src2
m01,m01.wav,speaker10\speaker10_17.wav,speaker1\speaker1_16.wav
m02,m02.wav,speaker10\speaker10_11.wav,speaker8\speaker8_08.wav
m03,m03.wav,speaker10\speaker10_16.wav,speaker3\speaker3_06.wav
m04,m04.wav,speaker3\speaker3_03.wav,speaker8\speaker8_16.wav
m05,m05.wav,speaker1\speaker1_03.wav,speaker2\speaker2_19.wav
m06,m06.wav,speaker5\speaker5_11.wav,speaker10\speaker10_20.wav
m07,m07.wav,speaker5\speaker5_10.wav,speaker4\speaker4_04.wav
m08,m08.wav,speaker6\speaker6_07.wav,speaker10\speaker10_18.wav
m09,m09.wav,speaker5\speaker5_11.wav,speaker3\speaker3_10.wav
m10,m10.wav,speaker4\speaker4_16.wav,speaker10\speaker10_12.wav
m11,m11.wav,speaker5\speaker5_02.wav,speaker2\speaker2_02.wav
m12,m12.wav,speaker10\speaker10_07.wav,speaker2\speaker2_16.wav
m13,m13.wav,speaker4\speaker4_16.wav,speaker8\speaker8_19.wav
m14,m14.wav,speaker1\speaker1_10.wav,speaker3\speaker3_19.wav
m15,m15.wav,speaker3\speaker3_15.wav,speaker5\speaker5_05.wav
m16,m16.wav,speaker7\speaker7_17.wav,speaker2\speaker2_13.wav
m17,m17.wav,speaker8\speaker8_08.wav,speaker4\speaker4_03.wav
m18,m18.wav,speaker5\speaker5_13.wav,speaker3\speaker3_06.wav
m19,m19.wav,speaker1\speaker1_13.wav,speaker10\speaker10_14.wav
m20,m20.wav,speaker9\speaker9_20.wav,speaker10\speaker10_20.wav
m21,m21.wav,speaker8\speaker8_07.wav,speaker4\speaker4_01.wav
m22,m22.wav,speaker8\speaker8_19.wav,speaker4\speaker4_12.wav
m23,m23.wav,speaker7\speaker7_17.wav,speaker1\speaker1_06.wav
m24,m24.wav,speaker10\speaker10_06.wav,speaker4\speaker4_09.wav
m25,m25.wav,speaker2\speaker2_06.wav,speaker8\speaker8_01.wav
m26,m26.wav,speaker1\speaker1_02.wav,speaker10\speaker10_18.wav
m27,m27.wav,speaker9\speaker9_11.wav,speaker10\speaker10_05.wav
m28,m28.wav,speaker8\speaker8_13.wav,speaker2\speaker2_05.wav
m29,m29.wav,speaker4\speaker4_09.wav,speaker8\speaker8_03.wav
m30,m30.wav,speaker8\speaker8_18.wav,speaker3\speaker3_20.wav
m31,m31.wav,speaker5\speaker5_06.wav,speaker7\speaker7_04.wav
m32,m32.wav,speaker10\speaker10_01.wav,speaker5\speaker5_08.wav
m33,m33.wav,speaker3\speaker3_11.wav,speaker1\speaker1_10.wav
m34,m34.wav,speaker1\speaker1_11.wav,speaker5\speaker5_06.wav
m35,m35.wav,speaker7\speaker7_07.wav,speaker3\speaker3_13.wav
m36,m36.wav,speaker9\speaker9_16.wav,speaker7\speaker7_05.wav
m37,m37.wav,speaker10\speaker10_03.wav,speaker9\speaker9_02.wav
m38,m38.wav,speaker1\speaker1_10.wav,speaker10\speaker10_20.wav
m39,m39.wav,speaker10\speaker10_15.wav,speaker3\speaker3_15.wav
m40,m40.wav,speaker6\speaker6_17.wav,speaker2\speaker2_04.wav
m41,m41.wav,speaker10\speaker10_07.wav,speaker7\speaker7_12.wav
m42,m42.wav,speaker1\speaker1_16.wav,speaker10\speaker10_14.wav
m43,m43.wav,speaker3\speaker3_10.wav,speaker6\speaker6_14.wav
m44,m44.wav,speaker4\speaker4_18.wav,speaker7\speaker7_03.wav
m45,m45.wav,speaker8\speaker8_13.wav,speaker7\speaker7_15.wav
m46,m46.wav,speaker1\speaker1_10.wav,speaker8\speaker8_19.wav
m47,m47.wav,speaker7\speaker7_06.wav,speaker8\speaker8_14.wav
m48,m48.wav,speaker10\speaker10_11.wav,speaker2\speaker2_09.wav
m49,m49.wav,speaker3\speaker3_12.wav,speaker6\speaker6_08.wav
m50,m50.wav,speaker1\speaker1_03.wav,speaker10\speaker10_08.wav
62 changes: 62 additions & 0 deletions examples/manual_add_speaker.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
"""手動語者辨識測試腳本

此腳本允許一次針對某個 speaker 的多個檔案進行辨識,
只要給定資料夾路徑和索引列表即可自動跑完。

使用方式:
python -m examples.manual_add_speaker data/clean/speaker1 --indices 5 7 8
# 會自動處理 speaker1_05.wav, speaker1_07.wav, speaker1_08.wav
"""

import argparse
from pathlib import Path
from modules.identification import SpeakerIdentifier


def main() -> None:
"""解析參數並依序執行語者辨識。"""
parser = argparse.ArgumentParser(
description="針對某個 speaker 資料夾內指定編號的檔案,執行語者辨識"
)
parser.add_argument(
"speaker_dir",
help="speaker 資料夾路徑(如 data/clean/speaker1)"
)
parser.add_argument(
"--indices", "-i",
required=True,
nargs="+",
type=int,
metavar="N",
help="要處理的檔案編號列表(不含前綴零),如 5 7 8"
)
args = parser.parse_args()

speaker_path = Path(args.speaker_dir)
if not speaker_path.is_dir():
parser.error(f"{speaker_path!r} 不是一個有效的目錄")

speaker_name = speaker_path.name # e.g. "speaker1"
identifier = SpeakerIdentifier()

for idx in args.indices:
# 兩位數補零
filename = f"{speaker_name}_{idx:02d}.wav"
audio_path = speaker_path / filename

print(f"\n🔍 處理:{audio_path}")
if not audio_path.is_file():
print(f"⚠️ 檔案不存在,跳過:{audio_path}")
continue

result = identifier.process_audio_file(str(audio_path))
if result:
speaker_id, speaker_label, distance = result
print(f"▶️ 語者: {speaker_label} (UUID: {speaker_id}) 相似度 {distance:.3f}")
else:
print("⚠️ 處理失敗或無法辨識")

if __name__ == "__main__":
main()

#python -m examples.manual_add_speaker data/clean/speaker1 -i 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Loading