File size: 2,478 Bytes
1ddca60
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
"""
Mô-đun chuẩn bị metadata cho tập dữ liệu huấn luyện.
Tạo file metadata.csv và vocab từ tập dữ liệu âm thanh.
"""

import os
import glob
import shutil
import soundfile as sf
from tqdm import tqdm

# Đường dẫn dữ liệu
DATASET_DIR = "data/your_dataset"
TRAINING_DIR = "data/your_training_dataset"
WAVS_DIR = os.path.join(TRAINING_DIR, "wavs")
METADATA_PATH = os.path.join(TRAINING_DIR, "metadata.csv")
VOCAB_PATH = os.path.join(TRAINING_DIR, "vocab_your_dataset.txt")

# Tạo thư mục đích nếu chưa tồn tại
os.makedirs(WAVS_DIR, exist_ok=True)

def get_audio_duration(wav_path: str) -> float:
    """
    Tính thời lượng của file audio.

    Args:
        wav_path (str): Đường dẫn file WAV.

    Returns:
        float: Thời lượng của file (giây).
    """
    audio_data, sr = sf.read(wav_path)
    return len(audio_data) / sr


def process_dataset():
    """
    Duyệt qua tất cả file WAV, copy vào thư mục mới, tạo metadata và vocab.
    """
    wav_paths = glob.glob(os.path.join(DATASET_DIR, "*.wav"))
    tokens = set()

    with open(METADATA_PATH, "w", encoding="utf8") as fw:
        for wav_path in tqdm(wav_paths, desc="Processing dataset"):
            wav_name = os.path.basename(wav_path)
            wav_dest_path = os.path.join(WAVS_DIR, wav_name)

            # Copy file âm thanh sang thư mục mới
            shutil.copy(wav_path, wav_dest_path)

            # Đọc nội dung text
            txt_path = wav_path.replace(".wav", ".txt")
            if not os.path.exists(txt_path):
                continue

            with open(txt_path, "r", encoding="utf8") as fr:
                text = fr.readline().strip().lower()
                text = text.replace("_", " ")
                text = " ".join(text.split())

            # Bỏ qua file không đạt yêu cầu
            duration = get_audio_duration(wav_path)
            if duration < 1 or duration > 30 or len(text.split()) < 3:
                continue

            # Ghi vào metadata.csv
            fw.write(f"wavs/{wav_name}|{text}\n")

            # Thu thập token cho vocab
            tokens.update(text)

    # Ghi vocab vào file
    with open(VOCAB_PATH, "w", encoding="utf8") as fw_vocab:
        fw_vocab.write("\n".join(sorted(tokens)))

    print(f"Metadata lưu tại: {METADATA_PATH}")
    print(f"Vocab lưu tại: {VOCAB_PATH}")


if __name__ == "__main__":
    process_dataset()