Skip to content

schappim/gm1356-recordings

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

gm1356-recordings

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.

Install

Needs libhidapi:

# macOS
brew install hidapi
# Debian/Ubuntu
sudo apt install libhidapi-hidraw0

No Python packages required (pure ctypes). Python 3.8+.

git clone https://github.com/schappim/gm1356-recordings.git
cd gm1356-recordings

Download stored recordings

python3 download_recordings.py            # -> recordings.csv
downloaded 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.

Live readings

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 first
2026-06-21T07:17:02.602+00:00    60.4 dBA  fast  range  30-130

Use as a library

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)

How it works

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).

Credits

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).

License

MIT — see LICENSE.

About

Read live readings and download the onboard recorded logs from a Benetech GM1356 USB sound level meter (macOS/Linux, pure Python) — incl. the previously-undocumented record-import protocol

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages