48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
import sounddevice as sd
|
||
import scipy.io.wavfile as wav
|
||
import os
|
||
import sys
|
||
|
||
# 1. Проверка аргументов командной строки
|
||
if len(sys.argv) < 3:
|
||
print("Использование: python record.py <имя_модели> <positive/negative>")
|
||
print("Пример: python record.py cosmo positive")
|
||
sys.exit(1)
|
||
|
||
MODEL_NAME = sys.argv[1]
|
||
MODE = sys.argv[2]
|
||
BASE_DIR = os.path.join("data", "wakewords", MODEL_NAME, MODE)
|
||
|
||
# Создаем папку, если ее нет
|
||
if not os.path.exists(BASE_DIR):
|
||
os.makedirs(BASE_DIR)
|
||
|
||
def get_next_filename(directory):
|
||
files = [f for f in os.listdir(directory) if f.endswith('.wav')]
|
||
return f"{len(files) + 1:03d}.wav"
|
||
|
||
def record_sample():
|
||
filename = get_next_filename(BASE_DIR)
|
||
filepath = os.path.join(BASE_DIR, filename)
|
||
|
||
sample_rate = 16000
|
||
duration = 2
|
||
|
||
print(f"\n[!] Файл {filename} готов к записи.")
|
||
input("Нажмите Enter, чтобы начать запись (2 секунды)...")
|
||
|
||
print("Запись...")
|
||
recording = sd.rec(int(duration * sample_rate), samplerate=sample_rate, channels=1)
|
||
sd.wait()
|
||
wav.write(filepath, sample_rate, recording)
|
||
print(f"Сохранено в: {filepath}")
|
||
|
||
# 2. Основной цикл записи
|
||
print(f"--- Режим записи: {MODEL_NAME} / {MODE} ---")
|
||
print("Для выхода нажмите Ctrl+C")
|
||
|
||
try:
|
||
while True:
|
||
record_sample()
|
||
except KeyboardInterrupt:
|
||
print("\nЗапись завершена.") |