이번에는 noise.muabow.com에 붙여둔 생활소음 이벤트 기록 시스템을 한 문서로 정리했다.
목표는 단순하다.
- 실내 베란다에서 생활소음을 계속 수집한다.
- 피크를 치는 소리만 이벤트로 저장한다.
- 이벤트마다 MP3와 waveform을 남긴다.
- 웹에서 시간순으로 확인하고 바로 재생한다.
- 튜닝은 하루 단위로 조금씩 조정하고, 그 내역은 한 문서에 계속 누적한다.
즉 이 글은 설계 문서이면서, 운영 로그이기도 하다.
목표
이 시스템에서 가장 중요한 기준은 하나다.
시끄러운 소리를 놓치지 않는 것.
노이즈를 완전히 없애는 것보다,
오토바이, 차량, 충격음처럼 실제로 남겨야 하는 큰 소리가 빠지지 않는 것이 우선이다.
그래서 운영 원칙도 이 기준에 맞춘다.
- 감지는 보수적으로 놓치지 않게
- 저장본은 지나치게 과공정하지 않게
- 파형은 보기 좋게 따로 보정
- 튜닝은 하루 단위로 관찰 후 수정
전체 구조
현재 구조는 아래처럼 단순하게 잡혀 있다.
USB microphone
-> arecord
-> Go capture loop
-> dB 계산
-> trigger 판단
-> 10초 pre-buffer + 20초 post-buffer
-> MP3 저장
-> waveform PNG 생성
-> SQLite 기록
-> noise.muabow.com/events/ 노출
브라우저 실시간 듣기 흐름은 따로 붙여 두었다.
ALSA capture
-> Go live hub
-> ffmpeg MP3 stream
-> /api/live.mp3
-> browser audio
즉 저장과 라이브는 같은 입력을 보지만, 후처리 목적은 조금 다르다.
프로젝트 위치
프로젝트는 로컬 개발 디렉터리와 라즈베리파이 실행 디렉터리를 나눠 관리하고 있다.
데이터는 앱 전용 저장 디렉터리에 따로 모아두고, 공개 확인은 noise.muabow.com에서 한다.
저장 형식
이벤트마다 아래 파일이 남는다.
data/events/YYYY-MM-DD/
HHMMSS.mp3
HHMMSS.png
HHMMSS.json
SQLite에는 이벤트 메타데이터가 별도로 들어간다.
- 시작 시각
- 종료 시각
- 평균 dB
- 최대 dB
- 길이
- peak 위치
- MP3 경로
- waveform 경로
현재 동작 기준
현재 장비 기준은 아래와 같다.
capture device : USB microphone
sample rate : 44100
channels : 1
format : S16_LE
Mic gain : 75% (12/16)
AGC : off
현재 상태 API에서 보이는 감지 기준은 아래다.
trigger peak : 55dB
cooldown : 20초
표시용 dB는 내부 진폭 기준에서 -25dB 보정을 넣은 값이다.
즉 절대 소음계 수치라기보다, 현재 장비와 현재 위치를 기준으로 맞춘 상대 지표에 가깝다.
현재 저장 프리셋
오늘 기준 저장 프리셋은 보존 우선이다.
의도는 이렇다.
- 소리를 안 죽인다.
- 듣기 거슬리는 저중역 험만 조금 누른다.
- 과한 증폭은 하지 않는다.
- 피크만 따로 튀게 만들지도 않는다.
현재 저장 필터 개념은 아래와 같다.
highpass 120Hz
lowpass 5000Hz
300Hz 부근 약한 컷
420Hz 부근 약한 컷
540Hz 부근 약한 컷
약한 afftdn
약한 compressor
volume 0dB
limiter
라이브 듣기 역시 거의 같은 방향으로 맞춰 두었다.
파형은 오디오와 별도로 본다
파형 PNG는 오디오와 똑같이 만들지 않는다.
오디오는 보존 우선으로 두고,
waveform은 너무 얇게 보이지 않도록 생성 시점에만 추가 보정을 넣는다.
즉 파형은 시각화용이고,
오디오는 청취와 보존용이다.
웹 UI
현재 확인 경로는 아래와 같다.
/events/ 이벤트 목록
/event/{id}/ 이벤트 상세
/test/live/ 실시간 입력 확인 (관리자)
/live/login 실시간 입력 확인 로그인
/api/status 현재 상태 JSON
/api/live.mp3 라이브 MP3 스트림 (관리자)
첫화면 기능 섹션에도 생활소음 이벤트 기록 링크를 추가해 두었다.
왜 튜닝 로그를 한 글에 모으는가
이 시스템은 한 번에 완성되지 않는다.
- 마이크 위치
- 계절
- 비가 오는 날
- 차량 소리
- 장비 노이즈
- 라즈베리파이 전원 상태
이런 변수들이 계속 바뀌기 때문이다.
그래서 글을 계속 새로 쓰기보다,
이 문서 하단에 날짜별 수정 기록을 쌓는 식으로 관리하는 편이 낫다.
이후에는 튜닝을 할 때마다 아래 이력 섹션에 추가한다.
구축 과정
이번 작업에서 실제로 한 일은 대략 이 순서였다.
- Go 기반 수집기 골격 작성
- ALSA 캡처 파이프라인 연결
- pre-buffer / post-buffer 녹음 로직 추가
- MP3 인코딩과 waveform 생성 연결
- SQLite 이벤트 기록 추가
noise.muabow.com웹 목록과 상세 페이지 구현- 라이브 스트림 페이지 추가
- dB 표시 보정
- 트리거 기준 조정
- 저장 프리셋과 라이브 프리셋을 여러 번 튜닝
현재 판단
지금 시스템은 완성형이라기보다 운영 가능한 초안에 가깝다.
장점:
- 실제 이벤트를 자동으로 계속 쌓는다.
- 웹에서 바로 듣고 비교할 수 있다.
- 하루 단위로 튜닝하기 좋다.
한계:
- USB 마이크 특성상 바닥 노이즈가 완전히 깨끗하진 않다.
- 입력 자체가 거친 순간은 후처리만으로 완전히 해결되지 않는다.
- 절대 dB라기보다 현재 장비 기준 상대값에 가깝다.
향후 보완
앞으로 보완 우선순위는 이렇다.
- powered USB hub 등 전원 환경 개선
- 마이크 교체 또는 지향성 장비 검토
- 이벤트 저장 기준에
배경 대비 변화량개념 추가 검토 - waveform 생성 품질 개선
- 장기적으로는 시간대 통계와 히트맵 추가
튜닝 이력
2026-05-18
- 첫 공개 버전 구성
- 실내 베란다 수집 기준으로 운영 시작
- 이벤트 목록, 상세, 라이브 테스트 페이지 연결
- 바닥 노이즈와 삐이 톤 때문에 여러 차례 저장 필터 조정 시작
2026-05-19
- 표시 dB를 사람 감각에 더 가깝게 맞추기 위해
-10dB보정 적용 - 트리거 기준을 현재 장비 기준 상대값으로 재조정
피크 57dB,재감지 대기 20초기준으로 운영- 이벤트 파일을 여러 번 재가공하면서 피크 증폭, 전체 증폭, 노치 필터를 시험
- 최종적으로는 과한 피크 강조를 제거하고 보존 우선 방향으로 되돌림
2026-05-20
8~11번처럼 너무 작게 저장된 이벤트를 기준으로 저장 프리셋 재조정- 오디오는 들리게 두고, 파형은 생성 시점에만 따로 보정하는 구조로 분리
noise.muabow.com/stats/통계 페이지 추가- 누적 이벤트 수, 최근 24시간, 최근 7일, 최근 14일 일별 통계, 시간대별 분포, 가장 큰 이벤트 5개 확인 가능
- 첫화면
기능섹션에생활소음 통계링크 추가 - 입력 자체가 너무 약한 이벤트가 보여
Mic gain을50% (8/16)에서62% (10/16)로 상향
2026-05-20
- 8~11번 이벤트에서 오디오가 너무 작고 waveform이 거의 보이지 않는 문제 확인
- 저장 프리셋을
약한 컴프레서 + 약한 레벨 회복쪽으로 수정 - waveform은 오디오와 분리해서 시각화용 보정 추가
- 첫화면
기능섹션에생활소음 이벤트 기록링크 추가
2026-05-21
- 오늘 녹음된 이벤트는 노이즈가 거의 없고 어제보다 조금 더 크게 들리는 상태 확인
- 다만 여전히 입력 자체가 약하다고 판단해
Mic gain을62% (10/16)에서69% (11/16)로 한 단계 상향 - 저장 필터보다 입력 레벨을 먼저 조정하는 쪽이 더 자연스럽다고 보고 하루 더 관찰하기로 결정
Mic gain을 올린 만큼 감지 기준도 함께 조정하는 편이 낫다고 보고trigger peak를57dB에서60dB로 상향
2026-05-22
- 파워드 허브 연결과 마이크 거리 분리 후 라이브 기준 노이즈가 눈에 띄게 줄어든 상태 확인
Mic gain을 100%, 88%, 75% 순으로 비교한 뒤 바닥 노이즈와 본체 소리 균형이 가장 무난한75% (12/16)로 정리- 표시 dB가 체감보다 여전히 높게 보여 내부 보정을
-10dB에서 최종-25dB로 조정 - 평소 바닥을
35dB안팎으로 맞춘 뒤, 너무 많은 이벤트가 쌓이지 않도록trigger peak를55dB로 다시 높여 하루 관찰 기준으로 설정 - 마이크 off 상태에서 확인한 장치 바닥 노이즈를 일부 반영해 표시 dB를 완만하게 추가 보정
현재 튜닝값 요약
Mic gain : 75% (12/16)
AGC : off
sample rate : 44100
channels : 1
trigger peak : 55dB
cooldown : 20초
storage filter : 보존 우선 + 약한 컴프레서 + 저중역 약한 컷
waveform : 생성 시점 별도 보정
이 문서는 앞으로 계속 갱신한다.
튜닝을 한 날마다 아래쪽 이력에 날짜와 조정 내용을 이어붙이면 된다.