Euphony: Sending Data Through Sound on Android, With Caveats
Euphony; Acoustic Data Telecommunication Library For Android
At a glance
- What is it?
- Euphony is an Apache-2.0 Android library that encodes text into acoustic signals for transmission between devices via microphone and speaker. It is simple to integrate but has not seen a commit since late 2022, and its documentation is thin in key areas.
- Who is it for?
- Euphony suits hobbyists and prototype builders who need a quick way to push short text strings between Android devices over sound, especially in offline or noisy environments where Bluetooth is unavailable. It is not for production-critical applications: the project has been dormant since October 2022, documentation lacks detail on modulation schemes and error rates, and the web version only transmits.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Probably not. The repository last received commits 49 months ago, on October 4, 2022.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Star history
- euphony-io/euphony50 ★ · +0
| Repository | 2026-08-18 | 2026-10-22 |
|---|---|---|
| euphony-io/euphony | 50 | 50 |
0 Stars in the last 65 days, measured from the daily GitHub snapshot. Compare with other projects
Editorial analysis
What Euphony Solves and Who It Targets
Euphony addresses a narrow but real problem: moving small amounts of data between devices without a network connection, using only the speaker and microphone that every Android phone already has. The README positions it as a 'handiness library' for communicating with Android and web devices via sound waves. The target user is an Android developer who needs a quick, dependency-light way to send a short string like a check-in code or a business card snippet to another device in physical proximity. The sample projects reinforce this: they cover check-in, sharing resumes, and restaurant ordering. This is not a general-purpose data link; it is for short, human-scale messages that can tolerate a few seconds of latency.
The Core Mechanism: Encode, Play, Listen, Decode
The library's architecture is visible from its two manager classes. On the transmitting side, EuTxManager takes a string, encodes it into an acoustic signal, and plays it through the speaker. The README shows a call to setCode("Hello, Euphony") followed by play(-1) to loop indefinitely. On the receiving side, EuRxManager registers an AcousticSensor callback that fires when data is decoded, and listen() starts the microphone capture. The flow is symmetric: one device generates sound, another records it and extracts the original text. The library handles the digital-to-acoustic and acoustic-to-digital conversion internally; the developer never touches raw audio samples. The README does not explain the modulation technique, the frequency band used, or how it deals with background noise. That lack of detail is a real gap for anyone who needs to reason about reliability.
Getting It Running: Three Steps
Integration is straightforward. First, add the dependency to the app module's build.gradle: implementation 'co.euphony.lib:euphony:0.8.1.2'. Second, add the RECORD_AUDIO permission to AndroidManifest.xml, which is required because the receiver uses the microphone. Third, instantiate the managers and wire up the callback. The transmitter example is two lines: get the singleton EuTxManager, set the code, and call play. The receiver requires an AcousticSensor implementation whose notify method receives the decoded string. The README also points to a full prerequisite guide and a getting-started guide, though those files are not included in the supplied material. The singleton pattern means you cannot run two independent transmitters or receivers in the same process without extra care, which is a constraint to keep in mind.
What the Documentation Does Not Tell You
The README is promotional in tone but thin on engineering specifics. It does not state the maximum message length, the data rate, the bit error rate, or the recommended distance between devices. It does not describe how the library handles multiple simultaneous transmissions or echoes. It does not mention battery consumption, which matters for a receiver that keeps the microphone on. It also does not specify whether the acoustic signal is audible or uses a high-frequency band. These are not trivial omissions; they are the parameters that determine whether the library works in a given environment. The absence of an architecture diagram in the README (the image is missing) means you cannot see the signal-processing pipeline. For an engineer evaluating adoption, this is a warning sign: you will have to experiment to learn the limits.
The Web Version Is a One-Way Street
Euphony has a companion JavaScript library, euphony.js, but the README states that it is 'only transmitter version.' That means a web page can send data to an Android device running Euphony, but a web page cannot receive data from an Android transmitter. This asymmetry limits the cross-platform use case. If your scenario involves two-way communication between a phone and a browser, you will need another solution for the reverse direction. The README does not explain whether the web version uses the same encoding scheme or a different one, so compatibility between the Android and web implementations is unverified from the supplied material. For a library whose whole point is device-to-device communication, this half-finished web port is a notable limitation.
Maintenance and Upgrade Cost
The last push to the repository was October 1, 2022, and the latest release, v0.8.2, came on the same day. That is over two years of inactivity as of the time of writing. There is no indication of ongoing development, and the README does not list a roadmap or a contribution guide beyond a generic request to fork and pull request. The Apache-2.0 license permits use and modification without restriction, which lowers the legal risk of forking. However, the practical upgrade cost is on you: if you adopt Euphony, you are responsible for fixing any bugs that surface on newer Android versions, as the library may not have been tested against recent SDKs. The sample projects are also unmaintained, so they may not compile today. This is not a library you can adopt and forget.
Alternatives: What Else Is on the Market
The obvious alternative is to use a short-range wireless protocol like Bluetooth Low Energy or Wi-Fi Direct, which are built into Android and offer far higher data rates and reliability. The trade-off is that they require pairing or connection setup, and they do not work in environments where radio is forbidden, such as on airplanes or in some industrial settings. Acoustic transmission has the advantage of working through any speaker and microphone, with no pairing. Another alternative is to use a dedicated acoustic modem library like Chirp, which offers a commercial SDK with documented modulation schemes and error correction. Chirp is not open source and requires a license, but it provides the engineering details that Euphony lacks. The choice comes down to whether you value open source and zero cost over documented reliability and active support.
Editorial conclusion
Euphony suits hobbyists and prototype builders who need a quick way to push short text strings between Android devices over sound, especially in offline or noisy environments where Bluetooth is unavailable. It is not for production-critical applications: the project has been dormant since October 2022, documentation lacks detail on modulation schemes and error rates, and the web version only transmits. Before adopting, verify that the 0.8.2 release still compiles against your target Android SDK, test the receiver's accuracy in your expected acoustic conditions, and inspect the source for any unaddressed issues. If you need a maintained, well-documented acoustic data link, look elsewhere.
Frequently asked questions
how do I use euphony to send and receive acoustic data?
On the sending side, get the transmitter instance, set the code you want to convey, and call play with minus one to generate sound indefinitely. On the receiving side, get the receiver instance, install a sensor whose notify callback receives the decoded letters, and call listen. Call finish when you want to stop listening.
How do I add the Euphony library to an Android project?
Add one dependency line to the app module's build file using the coordinate co.euphony.lib:euphony, version 0.8.1.2 as documented, and declare the RECORD_AUDIO permission in the manifest. A full prerequisite guide is provided in PREREQUISITE.md and the build and unit test steps in HOWTOBUILD.md.
Can Euphony run on the web as well as Android?
Partly. A web version exists in a separate repository written in JavaScript, but the README states it is the transmitter version only. The Android library is described as being for the Android version, communicating with other Android devices and with web devices using the microphone and the recorder.
What sample apps does the Euphony project provide?
Twelve: a listener that recognises sound data, a speaker that generates it, an emergency helper for patients and assistants, a sound wave check-in, business card sharing, resume exchange, restaurant menu information, two Wave-In check-in solutions built on an MVVM model, account sharing, a show card for visually impaired listeners, and order taking at a distance.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/euphony-io-euphony)Star history chart for your README
[](https://hysenlabs.com/projects/euphony-io-euphony)