How to integrate a card-size AI voice recorder with your own app (open BLE protocol + SDK)
To integrate a card-size AI voice recorder with your own app, you connect to it over Bluetooth LE, list and download its recordings, then send the audio to the speech-to-text service of your choice. SNUGOGO CB08 from AI HW Stack publishes its BLE protocol and a plain-Java Android sample on GitHub, so you can do all of this without an account, an API key or a partner agreement.
This guide walks through the integration step by step, using the open BLE protocol (sample edition) and the Android sample.
What you get: SDK and protocol at a glance
| Item | Detail |
|---|---|
| Protocol | BLE GATT, service 0xAE20; write 0xAE21; notify 0xAE22 / 0xAE23; no pairing or authorization. Document licensed CC BY 4.0 |
| Android sample | Plain Java, no third-party libraries, Android 6.0 or later (minSdk 23), MIT licence |
| Functions (sample edition) | Scan, connect, battery / storage / firmware / device ID, recording list, download with resume, play, transcribe, share, delete, import from USB |
| Web demo | Chrome or Edge (Web Bluetooth): connect, list, download with pause and resume, play and save; no-card demo mode |
| Audio | Opus, mono, 20 ms frames, 16 kbit/s constant (every frame 40 bytes); 2,000 bytes per second; optional WAV |
| Transfer | ≈ 30 KB/s; a 1-hour recording in about 4 minutes (30.7 KB/s measured on a Xiaomi Mi 6, Android 9, firmware V1.0.0) |
| Battery | 400 mAh; 15–20 hours of continuous recording; about 200 days of standby once switched off |
| Storage | 32 GB sample cards, about 255 hours (Opus + WAV); up to 512 GB and Opus-only firmware for volume orders |
| Transcription | Any OpenAI-compatible speech-to-text service; the key stays on the phone |
| Platforms | Same protocol on Android and iOS; Android reference code today |
Step 1: Try it without a card
Install the APK from GitHub Releases and tap Try demo (no recorder needed). A recording made on a real card is built in, and Download, Play, Transcribe, Share and Delete run the same code as with a card. Or open the web demo and tap Try demo (no card needed).
Step 2: Scan and connect
- Scan for
CB08; the advertised services includeAE20. - Connect, then enable notifications on both
AE22andAE23. Keep a separate reassembly buffer for each. - Request a larger MTU on Android (the sample requests 247). iOS negotiates automatically.
- On Android 6–11, Location must be allowed and switched on, otherwise scanning finds nothing.
Step 3: Speak the frame format
Every frame is 0x5A (magic) + sequence number + CRC-16/XMODEM (little-endian) + length (little-endian) + [TYPE][CMD][parameters]. Notifications may split or merge frames, so reassemble by the length field. Reference implementation: Protocol.java.
Useful first commands (TYPE 0): set clock (0-0), get storage (0-1), get battery (0-3), get firmware (0-10), get device ID (0-12). On iOS, where the system hides the MAC, use 0-12 to tell cards apart.
Step 4: List and download recordings
- Send 2-0 to get the file list; collect 2-1 frames until 2-18 arrives.
- File names look like
noteYYYYMMDD-hhmmss.opus(call…for call mode). The list cuts names to 20 bytes, so append.opusbefore downloading. - Send 2-2 (offset + 24-byte name) as one 36-byte write, append every 2-4 payload, and stop at 2-5 code 0.
- Resume: if the link drops, send 2-2 again with the offset you already have, rounded down to a whole 40-byte packet.
Step 5: Play the audio
The card stores bare Opus packets with no container. Wrap them in Ogg Opus (RFC 7845) to play or upload them. On Android 9, rewrite "code 3" packets as single-frame packets; OggOpus.repack() in the sample does this losslessly.
Step 6: Transcribe with your own service
Transcriber.java asks once for the base URL, API key and model of any OpenAI-compatible speech-to-text service. The key is stored only on the phone, and long recordings are sent in 10-minute pieces. Recordings never pass through our servers.
Step 7: Delete and power behaviour
Delete one file with 2-8 and check 2-13. When not connected and not recording, the card switches itself off after about 5 minutes. Deleting is irreversible, so test it only on test recordings.
What the developer package adds (from 1,000 units)
- Live audio streamed to the phone while recording (40-byte Opus frames, about 2 KB/s), with an
onLivePackethook for your own live speech-to-text - Remote recording control: start, pause, resume and stop from the phone
- Reconnect with missed-audio recovery after a Bluetooth drop
- Automatic reconnect during downloads, segment download
- Microphone gain (low / medium / high) and diagnostics
- Order-edition protocol, source code and APK, the Chrome demo and dedicated engineering support, delivered within 2 business days of full payment of a first order of 1,000 units or more
Tiers, MOQ and prices
| Tier | Quantity | Cost (as published) |
|---|---|---|
| Open source (GitHub) | No card needed | No cost; MIT code, CC BY 4.0 protocol |
| Sample order | From 1 card | US$55 per sample unit, shipping included; no license fee, no royalties |
| Hardware order | 100–999 cards | US$30 per card from 100, US$28 from 300, US$26 from 500 (EXW, 32 GB); no license fee, no royalties |
| Developer package | 1,000+ cards | US$24 per card from 1,000, US$22 from 3,000 (EXW, 32 GB); no license fee, no royalties |
Samples can be paid by Stripe or PayPal; bulk orders by bank transfer. Quotes are valid for 30 days. Full terms: developer page.
How to choose an AI voice recorder SDK: a neutral checklist
- Byte-level documentation: frame format, CRC, every command, timeouts and an acceptance checklist.
- Readable source: can your team read and change it, or is it a compiled library only?
- License terms: commercial use, attribution, and whether the code can be reused.
- No hidden gating: does connecting need a partner account, an API key or device binding?
- Fees: per device, per minute or renewal fees, stated in writing.
- Measured performance: transfer speed and battery figures with the test phone and firmware named.
- Resume and recovery: what happens when Bluetooth drops mid-download or mid-recording?
- Platform coverage: which platforms have tested code today, and which share the protocol only.
- Data path: can audio go straight from your app to your own speech-to-text endpoint?
- Maintenance: which firmware version the docs were tested on, and where to ask questions.
FAQ
Is the BLE protocol really open? Yes. The sample-edition protocol is public on GitHub under CC BY 4.0, and the Android sample is MIT-licensed.
Do I need an account, API key or partner agreement? No. The recorder needs no pairing, bonding or authorization.
Which programming languages are covered? The Android sample is plain Java; the web demo is a single HTML file using Web Bluetooth. The protocol is documented at byte level, so it can be implemented on any platform with Bluetooth LE.
Does it work on iPhone? Yes, over Bluetooth with the same protocol. iOS Bluetooth was tested with our official iPhone app (App Store coming soon). There is no iOS developer sample yet.
How fast is the download? About 30 KB/s, set by the card. A 1-hour Opus recording (7.2 MB) takes about 4 minutes.
Can I stream live audio? Live audio and remote recording control are part of the order edition, from 1,000 units.
Is the audio encrypted on the card? No. Recordings are stored as plain Opus packets and Bluetooth access is not authenticated. Delete recordings from the card once your app has stored them safely.
Can I update the firmware over Bluetooth? No. The protocol has no firmware update command.
Next steps
- Open BLE protocol and Android sample on GitHub
- Web demo
- Developer page: tiers and prices
- Request a sample
Contact: [email protected] · AI HW Stack (Pingood Technology Co., Limited, Hong Kong)
Related
- SNUGOGO CB08 developer page: tiers and prices
- SNUGOGO CB08 AI Voice Recorder Card
- White-label AI voice recorder with small MOQ
Want to try the hardware behind these notes?
Six AI hardware platforms are in mass production. Tell us your market and channel and we send an evaluation sample.
Request a sample