# Mic System (RPi Zero 2W + INMP441) Aplikacja webowa do monitoringu i nagrywania audio mono z 2 mikrofonow I2S (INMP441): - waveform w czasie rzeczywistym, - tryby mono (mic1, mic2, mono mix) i beamforming (mono), - AGC + gain, - zapis WAV, - lista nagran z odtwarzaniem/pobieraniem/usuwaniem. - tryb porownawczy nagrania: jednym kliknieciem zapisuje `mic1`, `mono_mix`, `beam` jako 3 osobne pliki. - opcjonalny czas nagrania w sekundach (auto-stop), np. 10 s. - podsluch live w przegladarce z wyborem zrodla (`mic1`, `mic2`, `mono_mix`, `beam`). ## Struktura - `app.py` - serwer Flask + Socket.IO + REST - `audio_capture.py` - odczyt I2S, downsample, RMS, routing do nagrywania - `beamforming.py` - delay-and-sum - `agc.py` - AGC stateful - `recorder.py` - zapis WAV w osobnym watku - `templates/index.html` - UI - `static/app.js` - logika frontu - `static/style.css` - styl UI - `recordings/` - pliki WAV - `deploy/mic_system.service` - autostart przez systemd - `scripts/setup_rpi.sh` - konfiguracja RPi (I2S/ALSA/deps/service) - `scripts/deploy_from_windows.ps1` - deployment przez SSH z Windows ## Start lokalny ```bash cd mic_system python -m venv .venv source .venv/bin/activate # Linux pip install -r requirements.txt python app.py ``` ## Deployment na RPi Z Windows (PowerShell): ```powershell cd "C:\Users\jeste\OneDrive\BB_projekty_zaruskiego\Projekty 3d\mikrofon_jak_z_telefonu" .\mic_system\scripts\deploy_from_windows.ps1 -Host 10.0.100.24 -User pch ``` Skrypt: 1. tworzy klucz `ed25519` jesli brak, 2. dodaje klucz do `~/.ssh/authorized_keys` na RPi, 3. kopiuje projekt do `/home/pch/mic_system`, 4. odpala setup I2S/ALSA/deps/systemd. Po pierwszym deployu wykonaj reboot RPi: ```bash sudo reboot ``` Po starcie systemd: ```bash systemctl status mic_system.service ``` Aplikacja bedzie dostepna na porcie `5000`: ```text http://10.0.100.24:5000 ``` ## Uwagi techniczne - INMP441: 24-bit MSB w ramce 32-bit, konwersja jest robiona jako `>> 8`. - Dla beamformingu przyjeto odstep mikrofonow sasiednich `~0.0424 m` (4 sloty na okregu, srednica 6 cm, kat 90 stopni). - Karta voiceHAT pracuje sprzetowo na `48000 Hz`; aplikacja resampluje dane do 16000/22050/44100. - Beamforming ma tryb auto (domyslnie ON): kierunek jest estymowany z pasma mowy (~300-3400 Hz). - Pierwsze 300 ms po starcie streamu jest ignorowane. - WebSocket wysyla probki downsample do UI, a nagrywanie dostaje pelne dane. - Beamforming i AGC dzialaja w czasie rzeczywistym na chunkach.