File size: 1,920 Bytes
127b976
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
import argparse
from pathlib import Path
import pandas as pd
import random

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument("--audio-root", required=True)
    parser.add_argument("--dataset-name", required=True)
    parser.add_argument("--attack-type", required=True, choices=["tts_vc", "codec", "partial"])
    parser.add_argument("--out-dir", required=True)
    parser.add_argument("--train-ratio", type=float, default=0.8)
    parser.add_argument("--val-ratio", type=float, default=0.1)
    parser.add_argument("--seed", type=int, default=42)
    args = parser.parse_args()

    exts = {".wav", ".flac", ".mp3"}
    files = sorted([p for p in Path(args.audio_root).rglob("*") if p.suffix.lower() in exts])

    if not files:
        raise RuntimeError(f"No audio files found in {args.audio_root}")

    random.seed(args.seed)
    random.shuffle(files)

    n = len(files)
    n_train = int(n * args.train_ratio)
    n_val = int(n * args.val_ratio)

    splits = {
        "train": files[:n_train],
        "val": files[n_train:n_train + n_val],
        "test": files[n_train + n_val:]
    }

    out_dir = Path(args.out_dir)
    out_dir.mkdir(parents=True, exist_ok=True)

    for split, split_files in splits.items():
        rows = []
        for f in split_files:
            rows.append({
                "file_path": f.resolve().as_posix(),
                "binary_label": 1,
                "attack_type": args.attack_type,
                "start_fake": 0.0,
                "end_fake": "full",
                "dataset": args.dataset_name,
                "split": split
            })

        df = pd.DataFrame(rows)
        out_path = out_dir / f"{args.dataset_name.lower()}_{split}.csv"
        df.to_csv(out_path, index=False)
        print(f"Saved {out_path} rows={len(df)}")

if __name__ == "__main__":
    main()