File size: 1,086 Bytes
de9c0fe
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import os, argparse, numpy as np, sounddevice as sd, soundfile as sf, time


def record_clips(device_name: str, count: int, seconds: float, sr: int = 16000):
    outdir = os.path.join("data", device_name); os.makedirs(outdir, exist_ok=True)
    print(f"Recording {count} clips x {seconds}s to {outdir} @ {sr}Hz. Ctrl-C to stop.")
    try:
        for i in range(1, count+1):
            print(f"[{i}/{count}] Starts in 1s… speak normally."); time.sleep(1)
            audio = sd.rec(int(seconds*sr), samplerate=sr, channels=1, dtype="float32"); sd.wait()
            x = audio.squeeze(); rms = float(np.sqrt(np.mean(x**2)) + 1e-8); print(f"RMS {rms:.4f}")
            sf.write(os.path.join(outdir, f"clip_{i:02d}.wav"), x, sr)
    except KeyboardInterrupt:
        print("\nStopped.")


if __name__ == "__main__":
    ap = argparse.ArgumentParser()
    ap.add_argument("--device", required=True); ap.add_argument("--count", type=int, default=15)
    ap.add_argument("--seconds", type=float, default=5.0)
    args = ap.parse_args(); record_clips(args.device, args.count, args.seconds)