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)