Read live readings and — the part that's hard to find anywhere else — download the onboard recorded logs from a Benetech GM1356 USB sound level meter, in pure Python, on macOS and Linux. No Windows, no SoundLAB.
The GM1356 (VID 0x64BD / PID 0x74E3, a NATIONS N32G45x MCU) is a USB-HID
device, not a serial port — so nothing shows up as /dev/tty*. Every open-source
tool I could find only does live reading. This repo also implements the
record-import protocol so you can pull the meter's stored datalogs off it, and
documents the full wire protocol so the next person doesn't have
to reverse-engineer it again.
Needs libhidapi:
# macOS
brew install hidapi
# Debian/Ubuntu
sudo apt install libhidapi-hidraw0No Python packages required (pure ctypes). Python 3.8+.
git clone https://github.com/schappim/gm1356-recordings.git
cd gm1356-recordingspython3 download_recordings.py # -> recordings.csvdownloaded 2 recording(s), 5658 samples
recording 0: 16 samples @ 1s dBA 30-130dB
2026-06-21 07:40:13 -> 2026-06-21 07:40:28
min 33.2 mean 34.6 max 40.6 dB
recording 1: 5642 samples @ 6s dBA 30-130dB
2026-06-21 07:41:53 -> 2026-06-21 17:05:59
min 35.9 mean 46.9 max 77.4 dB
wrote 5658 rows -> recordings.csv
recordings.csv columns: recording, timestamp, db, weighting, range.
It's read-only with respect to the meter's memory — erase is a front-panel button hold only, so this can't wipe your logs.
python3 read_meter.py # stream ~2/sec until Ctrl-C
python3 read_meter.py --once
python3 read_meter.py --csv live.csv # also log to CSV
python3 read_meter.py --slow --dbc --range 2 # configure first2026-06-21T07:17:02.602+00:00 60.4 dBA fast range 30-130
from gm1356 import Meter
with Meter() as m:
print(m.capture()) # Reading(db=47.3, weighting='dBA', ...)
for rec in m.download(): # list[Recording]
for ts, db in rec.rows():
print(ts, db)See PROTOCOL.md for the complete reverse-engineered protocol:
the HID framing, the live 0xB3/0x56 commands, the magic-id quirk, and the
download handshake — 0xB5 import → 0xEF header → a 0xC4 pull-loop → 0xFD
block headers + 12-bit packed samples (dB = value / 20).
The download/import protocol comes from gymnasty/gm1356 (Go) — the only prior implementation of it. This repo is an independent, documented Python port and an on-hardware verification, plus the protocol write-up.
Live-protocol reverse engineering: pvachon, ciembor, dobra-noc, michris, classilla, Troy Simpson (ebswift), Andy Reischle (areresearch).
MIT — see LICENSE.