stupiDMR
Sperimentale · in sviluppoExperimental · under development

Una radio DMR
nel tuo vecchio telefono
A DMR radio
in your old phone

StupiDMR trasforma un telefono Android qualsiasi, o una economica “poc radio”, in un terminale DMR: ti colleghi via Internet a BrandMeister, ascolti i talkgroup e trasmetti con il PTT. Niente hotspot, niente hardware radio. StupiDMR turns any Android phone, or a cheap “PoC radio”, into a DMR terminal: connect over the Internet to BrandMeister, listen to talkgroups and transmit with the PTT. No hotspot, no radio hardware.

  • Android 5.0 → 16
  • BrandMeister
  • PTT & tasti fisiciphysical keys
  • Bluetooth
  • IT · EN
Cos’èWhat it is

Un terminale DMR semplice e leggeroA simple, light DMR terminal

Il DMR è un modo digitale di fare radio. Di solito serve una radio o un hotspot; StupiDMR fa tutto con il telefono: parla con il server come farebbe un hotspot, riceve le chiamate del talkgroup che scegli e trasmette con il microfono.

È pensata per le poc radio economiche (schermo piccolo, tasti fisici, vecchio Android) e per i telefoni che non servono più. Funziona da Android 5.0 fino ai telefoni più recenti (provata su Android 16).

DMR is a digital way of doing radio. You usually need a radio or a hotspot; StupiDMR does everything with the phone: it talks to the server like a hotspot would, receives calls of the talkgroup you choose and transmits with the microphone.

It is made for cheap PoC radios (small screen, physical keys, old Android) and for phones you no longer use. It works from Android 5.0 up to the most recent phones (tried on Android 16).

Perché è nataWhy it exists

I telefoni e le poc radio con Android vecchio hanno poca potenza, e le app DMR esistenti o richiedono un sistema recente (per esempio DroidStar usa Qt 6.5, incompatibile con Android 5.1) o sono a sorgente chiuso.

StupiDMR vuole essere semplice (poche pagine, riquadri grandi), leggera (Java puro, compatibile con Android 5.0) e libera: è scritta da zero dalle specifiche pubbliche del protocollo, con licenza GPLv3 e un’eccezione di riuso.

Phones and PoC radios running old Android have little power, and existing DMR apps either need a recent system (for example DroidStar uses Qt 6.5, incompatible with Android 5.1) or are closed source.

StupiDMR aims to be simple (few pages, big tiles), light (plain Java, works on Android 5.0) and free: written from scratch from the public protocol specifications, under GPLv3 with a reuse exception.

L’appThe app

Tre pagine, riquadri grandi, tutto a portata di polliceThree pages, big tiles, everything within reach

Ci si muove con uno swipe o con i tasti sinistra/destra della radio. Stile “Metro”: colori pieni, testi grandi, leggibile anche su uno schermo da 2,4 pollici. (Nomi e nominativi nelle immagini sono di fantasia.)Move with a swipe or the radio’s left/right keys. “Metro” style: solid colours, large text, readable even on a 2.4-inch screen. (Names and callsigns in the pictures are made up.)

PrincipaleMainStato, talkgroup, chi parla e il tasto PTT.Status, talkgroup, who is talking and the PTT key.
Lista dei passaggiCall listGli ultimi 20 QSO: ora, nominativo e nome, durata.The last 20 QSOs: time, callsign and name, duration.
ImpostazioniSettingsSi cambiano sul posto, con due pulsanti.Changed in place, with two buttons.
FunzioniFeatures

Tutto quello che serve, niente di piùAll you need, nothing more

📻Ricevi e trasmettiReceive and transmit

Collegamento a BrandMeister, audio in entrambe le direzioni, cambio talkgroup con un tocco o con le rotelle.Link to BrandMeister, audio both ways, talkgroup change with a tap or the wheel keys.

📟Fatta per le poc radioMade for PoC radios

PTT fisico, tasti su/giù, tasto per cambiare pagina, riquadri leggibili su schermi minuscoli.Physical PTT, up/down keys, a key to change page, tiles readable on tiny screens.

🎧Radio o BluetoothRadio or Bluetooth

Audio dall’altoparlante e dal microfono del dispositivo, oppure su auricolare o vivavoce dell’auto, trattato come una chiamata.Audio on the device’s speaker and microphone, or on a headset or car hands-free, handled like a call.

🔔Anche in backgroundAlso in the background

Resta collegata con lo schermo spento o in un’altra app, con una notifica discreta. Lo schermo può restare sempre acceso.Stays linked with the screen off or in another app, with a discreet notification. The screen can stay always on.

👤Sai chi parlaSee who is talking

Nominativo, nome, città e Paese da una lista utenti, e il nome del talkgroup dall’elenco BrandMeister (le liste si scaricano con un tocco dalle Impostazioni). Registro degli ultimi 20 passaggi.Callsign, name, city and country from a user list, plus the talkgroup name from the BrandMeister list (the lists are downloaded with one tap in the Settings). Log of the last 20 calls.

🌍Italiano e ingleseItalian and English

L’interfaccia parla la lingua del telefono e si cambia con un tocco. Modalità “solo ascolto” per chi vuole solo ascoltare.The interface follows the phone’s language and changes with one tap. A “listen only” mode for those who just want to listen.

InstallazioneInstallation

Come installare l’APKHow to install the APK

StupiDMR non è sul Play Store (è pensata per Android 5, che il Play Store non accetta): si installa dal file APK. Ci vogliono due minuti.StupiDMR is not on the Play Store (it targets Android 5, which the Play Store does not accept): you install it from the APK file. It takes two minutes.

  1. Scarica il fileDownload the file

    Dal telefono, tocca “Scarica l’APK” qui sotto. Oppure scaricalo dal computer e copialo sul telefono (cavo, scheda SD, cloud).On the phone, tap “Download the APK” below. Or download it on a computer and copy it to the phone (cable, SD card, cloud).

  2. Consenti le app sconosciuteAllow unknown apps

    Apri il file: se Android lo chiede, abilita “Installa app sconosciute” (o “Origini sconosciute”) per il browser o il gestore di file che stai usando. Si fa una volta sola, nelle Impostazioni di Android.Open the file: if Android asks, enable “Install unknown apps” (or “Unknown sources”) for the browser or file manager you are using. It is done once, in Android’s Settings.

  3. Se Play Protect avvisaIf Play Protect warns you

    Può dire “app non verificata”: succede perché l’app non passa dallo store ed è firmata con una chiave di sviluppo. Scegli “Installa comunque” (su qualche telefono bisogna spegnere per un attimo la scansione di Play Protect).It may say “unverified app”: this happens because the app does not come from the store and is signed with a development key. Choose “Install anyway” (on some phones you must switch the Play Protect scan off for a moment).

  4. Aprila e impostaOpen it and set up

    Apri StupiDMR e segui il “Primo avvio” qui sotto: server, password, nominativo, DMR ID e vocoder.Open StupiDMR and follow “First start” below: server, password, callsign, DMR ID and vocoder.

  5. AggiornareUpdating

    Scarica il nuovo APK e installalo sopra quello vecchio: le impostazioni e il vocoder restano.Download the new APK and install it over the old one: settings and the vocoder are kept.

Su una poc radio senza browser? Collegala al PC con il debug USB acceso e usa adb install -r StupiDMR-release.apk. PoC radio without a browser? Connect it to a PC with USB debugging on and use adb install -r StupiDMR-release.apk.
ManualeManual

Primo avvioFirst start

Per trasmettere serve la licenza di radioamatore e un DMR ID personale (7 cifre, si richiede su radioid.net). Su BrandMeister serve un account con la password hotspot (Selfcare → password per gli hotspot).

To transmit you need an amateur radio license and a personal DMR ID (7 digits, requested at radioid.net). On BrandMeister you need an account with the hotspot password (Selfcare → hotspot password).

  1. CollegamentoConnection

    Pagina Impostazioni → Collegamento: Server DMR (per esempio 2222.master.brandmeister.network:62031, il master italiano), Password, Nominativo, DMR ID e ESSID (da 01 a 99). Se usi due dispositivi con lo stesso DMR ID, dai loro ESSID diversi, altrimenti si scollegano a vicenda. L’app non tenta il collegamento finché server, password, nominativo e DMR ID non sono tutti compilati.Settings page → Connection: DMR server (for example 2222.master.brandmeister.network:62031, the Italian master), Password, Callsign, DMR ID and ESSID (01 to 99). If you use two devices with the same DMR ID, give them different ESSIDs, otherwise they disconnect each other. The app does not try to connect until the server, password, callsign and DMR ID are all filled in.

  2. Il vocoderThe vocoder

    Senza vocoder l’app si collega ma non ha audio. In Sistema → Plugin vocoder il campo parte già con il link giusto per il tuo telefono (32 o 64 bit): tocca la riga, conferma con OK e aspetta che compaia installato. Dettagli nella sezione Vocoder.Without the vocoder the app connects but has no audio. In System → Vocoder plugin the field already starts with the right link for your phone (32 or 64 bit): tap the row, confirm with OK and wait for installed. Details in the Vocoder section.

  3. Le liste: utenti e nomi dei TGThe lists: users and TG names

    In Sistema tocca Lista utenti e Nomi TG BrandMeister: ognuna si scarica quando la tocchi (la lista utenti è grande, meglio con il Wi-Fi) e mostra quante righe contiene e quando è stata aggiornata. Non si aggiornano da sole: ripeti il tocco quando vuoi rinfrescarle.In System tap User list and BrandMeister TG names: each one is downloaded when you tap it (the user list is big, better on Wi-Fi) and shows how many lines it holds and when it was updated. They do not update by themselves: tap again whenever you want to refresh them.

  4. I tuoi talkgroupYour talkgroups

    Talkgroup → Lista TG: aggiungi i TG che usi. Se la lista è vuota vale il TG 91.Talkgroup → TG list: add the TGs you use. If the list is empty, TG 91 is used.

  5. Torna alla pagina principaleBack to the main page

    Premi Indietro: il riquadro in alto diventa blu e dice Connesso. Sei in rete.Press Back: the top tile turns blue and says Connected. You are online.

Usarla ogni giornoUsing it every day

StatoStatus

Connesso / Disconnesso / RX / TX. Tieni premuto 1 secondo per collegare o scollegare.Connected / Disconnected / RX / TX. Press and hold for 1 second to connect or disconnect.

TalkgroupTalkgroup

Tocca il riquadro del TG (o usa su/giù) per passare al successivo della lista. Il nome viene dall’elenco dei TG BrandMeister.Tap the TG tile (or use up/down) to go to the next one in your list. The name comes from the BrandMeister TG list.

Chi parlaWho is talking

Nominativo, nome e, in piccolo, città e Paese. Finito il QSO resta l’ultimo chiamante.Callsign, name and, small, city and country. After the QSO the last caller stays.

PTT

Tieni premuto per parlare, oppure scegli “a tocco alternato”. Si può usare un tasto fisico della radio (Impostazioni → PTT → Tasto PTT esterno).Hold to talk, or choose “toggle”. You can use a physical key of the radio (Settings → PTT → External PTT key).

Timer TX

Rilascia da solo il PTT dopo il tempo scelto (predefinito 2 minuti), con un beep.Releases the PTT by itself after the chosen time (default 2 minutes), with a beep.

Solo ascoltoListen only

Con “PTT a schermo: Nascosto” il PTT è disattivato; cambiando TG l’app apre il nuovo talkgroup da sola.With “On-screen PTT: Hidden” the PTT is disabled; when you change TG the app opens the new talkgroup by itself.

Cambiare un valore nelle impostazioniChanging a value in the settings

Tocca la riga: si colora di blu e compaiono due pulsanti < e >. Premili (o usa le frecce su/giù) per cambiare il valore: tenendoli premuti il valore continua a cambiare, ogni 0,2 secondi. Tocca il centro della riga per deselezionarla. Non si aprono finestre: tutto avviene sul posto.

Tap the row: it turns blue and two buttons < and > appear. Press them (or use the up/down arrows) to change the value: hold them and the value keeps changing, every 0.2 seconds. Tap the middle of the row to deselect it. No pop-ups: everything happens in place.

Spostarsi e uscireMoving around and quitting

Tre pagine: Impostazioni, Principale (di partenza) e Lista dei passaggi. Swipe orizzontale o tasti sinistra/destra; nelle impostazioni puoi scegliere un tasto che cambia pagina. Indietro dalle impostazioni torna alla principale; dalle altre pagine chiede se chiudere l’app.

Three pages: Settings, Main (the start page) and the Call list. Horizontal swipe or left/right keys; in the settings you can pick a key that changes page. Back from the settings goes to the main page; from the other pages it asks whether to close the app.

Audio: Radio o BluetoothAudio: Radio or Bluetooth

Valore di “Audio”“Audio” valueCosa sentiWhat you hearDa dove entra la voceWhere your voice comes in
Radio (SPK eand MIC)Altoparlante del telefono o della poc radio, anche se un auricolare è collegatoSpeaker of the phone or PoC radio, even if a headset is connectedMicrofono del telefono o della poc radioMicrophone of the phone or PoC radio
Bluetooth (SPK eand MIC)Auricolare o vivavoce dell’auto, come in una telefonata (la radio dell’auto si ferma)Headset or car hands-free, like a phone call (the car stereo stops)Microfono dell’auricolare o dell’autoMicrophone of the headset or car

Con il Bluetooth il canale si apre quando c’è un passaggio e si libera dopo 10 secondi senza QSO, così l’autoradio riparte da sola. Se nessun auricolare è collegato, l’audio resta sulla radio. I guadagni (MIC e SPK) sono separati per Radio e Bluetooth.

With Bluetooth the channel opens when there is a call and is released after 10 seconds without QSOs, so the car stereo resumes by itself. If no headset is connected, the audio stays on the radio. The gains (MIC and SPK) are separate for Radio and Bluetooth.

In background: con “Esecuzione in background” attivo l’app resta collegata con lo schermo spento (compare una notifica). Per trasmettere con il tasto PTT l’app deve però restare in primo piano. In the background: with “Run in background” on, the app stays linked with the screen off (a notification appears). To transmit with the PTT key, however, the app must be in the foreground.
Vocoder

Come funziona il vocoderHow the vocoder works

Il DMR trasmette la voce compressa con il codec AMBE+2, coperto da brevetti. Il vocoder è il pezzo che trasforma l’audio del microfono in questi dati (codifica) e i dati ricevuti in audio (decodifica). Per questo il modulo non fa parte dell’APK: è un file a parte, un plugin nativo che l’app carica quando parte, con la stessa interfaccia dei plugin di DroidStar.

L’app non lo scarica da sola: lo installi tu una volta, dalle Impostazioni. Il campo Plugin vocoder parte con un link predefinito scelto in base al telefono (32 o 64 bit), che punta al file messo a disposizione su questo sito. Puoi sostituirlo con il link https di un altro plugin compatibile.

I plugin proposti qui sono costruiti da un progetto che unisce mbelib (decodifica, licenza ISC) e un codificatore IMBE/AMBE (imbe_vocoder, GPL-3.0-or-later). Ognuno verifica licenze e brevetti nel proprio paese prima di usarli.

DMR sends voice compressed with the AMBE+2 codec, which is covered by patents. The vocoder is the piece that turns microphone audio into this data (encoding) and received data back into audio (decoding). That is why the module is not part of the APK: it is a separate file, a native plugin that the app loads at start, with the same interface as DroidStar plugins.

The app does not download it by itself: you install it once, from the Settings. The Vocoder plugin field starts with a default link chosen according to the phone (32 or 64 bit), pointing to the files made available on this site. You can replace it with the https link of another compatible plugin.

The plugins offered here are built from a project that joins mbelib (decoding, ISC license) and an IMBE/AMBE encoder (imbe_vocoder, GPL-3.0-or-later). Everyone checks licenses and patents in their own country before using them.

Che file serve, e come si installaWhich file you need, and how to install it

  • Telefono o poc radio a 32 bit (armeabi-v7a): vocoder_plugin.android.arm.
  • Telefono a 64 bit (arm64-v8a, anche recente, con pagine di memoria da 4 o da 16 KB): vocoder_plugin.android.arm64.16k.
  • Nell’app: Impostazioni → Sistema → Plugin vocoder. Il link giusto c’è già: conferma con OK.
  • L’app scarica il file, controlla che sia adatto ai bit del telefono, lo salva e lo prova con un frame di silenzio. Quando la voce dice installato hai l’audio.
  • Se disinstalli l’app il plugin si cancella con lei: va reinstallato.
  • 32-bit phone or PoC radio (armeabi-v7a): vocoder_plugin.android.arm.
  • 64-bit phone (arm64-v8a, recent ones too, with 4 or 16 KB memory pages): vocoder_plugin.android.arm64.16k.
  • In the app: Settings → System → Vocoder plugin. The right link is already there: confirm with OK.
  • The app downloads the file, checks that it fits the phone’s bits, stores it and tests it with a silence frame. When the item says installed you have audio.
  • If you uninstall the app the plugin goes with it: install it again.
L’autore non garantisce la licenza né l’assenza di brevetti del codec: la verifica è a carico di chi lo usa.The author does not vouch for the codec’s license or for the absence of patents: checking it is up to whoever uses it.
NovitàWhat’s new

Versione 0.41Version 0.41

Questa versione è stata rilasciata per supportare le ultime versioni di Android (telefoni a 64 bit, provata su Android 16), mantenendo la compatibilità con Android 5.0 delle poc radio economiche, dove di solito non si va oltre Android 9.

This version was released to support the latest Android versions (64-bit phones, tried on Android 16), keeping the compatibility with Android 5.0 of cheap PoC radios, which usually do not go beyond Android 9.

DownloadDownload

Scarica StupiDMRGet StupiDMR

L’APK è firmato con una chiave di sviluppo: serve a condividere il file, non per uno store. Android 5.0 o successivo (fino ad Android 16), dispositivi ARM a 32 o 64 bit.The APK is signed with a development key: it is for sharing the file, not for a store. Android 5.0 or later (up to Android 16), 32-bit or 64-bit ARM devices.

⬇ StupiDMR-release.apk

Versione sperimentale: ricezione e trasmissione provate con BrandMeister; su Android 16 provata la ricezione; TGIF e HamThings non ancora.Experimental version: receiving and transmitting tried with BrandMeister; on Android 16 receiving is tried; TGIF and HamThings not yet.

VersioneVersion0.41 · 20261101.41
DimensioneSize0,95 MB
Android5.0+ (API 21)
SHA-2565f6ff99f883be77c5d51bd0b23928d6ff6eb9b0231aa7439c8ca9184955364d5

Domande frequentiFAQ

È gratuita?Is it free?

Sì, nessun costo e nessuna pubblicità. Il codice è sotto licenza GPLv3 con un’eccezione che permette di riusarne parti in altre applicazioni citando il progetto e l’autore, e verrà reso disponibile non appena sarà rilasciata una versione stabile.Yes, no cost and no ads. The code is under GPLv3 with an exception that allows reusing parts of it in other applications, crediting the project and the author, and it will be made available as soon as a stable version is released.

Posso usarla senza licenza di radioamatore?Can I use it without an amateur radio license?

Per trasmettere su una rete DMR radioamatoriale serve la licenza, l'Autorizzazione Generale e il DMR ID legato al tuo nominativo.To transmit on an amateur DMR network you need the license and the DMR ID tied to your callsign.

Funziona con TGIF, HamThings o altri server?Does it work with TGIF, HamThings or other servers?

Usa il protocollo HomeBrew, comune a molte reti, ma è stata provata solo con BrandMeister.It uses the HomeBrew protocol, common to many networks, but it has only been tried with BrandMeister.

Su quali dispositivi è stata provata?Which devices was it tried on?

Una poc radio HI-B8 (Android 9), un Galaxy S8 (Android 9), un LG D620 (Android 5.0.2) e un Galaxy A56 (Android 16, 64 bit: provata la ricezione). Con l’auricolare Bluetooth è provata la ricezione; la trasmissione con il microfono Bluetooth e il vivavoce dell’auto non ancora.An HI-B8 PoC radio (Android 9), a Galaxy S8 (Android 9), an LG D620 (Android 5.0.2) and a Galaxy A56 (Android 16, 64-bit: receiving tried). With a Bluetooth headset, receiving is tried; transmitting with the Bluetooth microphone and a car hands-free not yet.

Posso scaricare l’APK da un altro sito?Can I download the APK from another site?

Meglio di no: scaricalo solo da qui e, se vuoi, confronta l’impronta SHA-256 indicata sopra con quella del file che hai.Better not: download it only from here and, if you like, compare the SHA-256 shown above with that of your file.

Changelog

Cronologia delle versioniVersion history

  • 0.41 · 1 novembre 2026 · supporto ai telefoni a 64 bit e alle ultime versioni di Android (librerie a 64 bit allineate a 16 KB), link predefinito del plugin vocoder per architettura, liste utenti e nomi TG BrandMeister scaricate a mano (nuova riga nelle Impostazioni), nessun collegamento con dati vuoti, ripetizione a 0,2 secondi sui pulsanti < e >.
  • 0.4 · 1 novembre 2026 · Android recenti a 64 bit (provato su Android 16), notifiche (Android 13+), tasto per le impostazioni, un tasto per una sola funzione, swipe che si ferma ai bordi, lista dei TG riordinabile.
  • 0.31 · 30 ottobre 2026 · audio Radio o Bluetooth con guadagni separati, EQ voce e filtri fissi, codice data con versione.
  • 0.3 · 30 ottobre 2026 · esecuzione in background, schermo sempre acceso, icona di notifica.
  • 0.2 · 30 ottobre 2026 · decodifica su un thread a parte con pre-buffer, filtri audio, tasto Indietro dalle Impostazioni, pagina dei passaggi a tre colonne.
  • 0.1 · 29 ottobre 2026 · prima versione.
  • 0.41 · 1 November 2026 · support for 64-bit phones and the latest Android versions (64-bit libraries aligned to 16 KB), default vocoder plugin link by architecture, user list and BrandMeister TG names downloaded by hand (new Settings row), no connection with empty data, 0.2-second repeat on the < and > buttons.
  • 0.4 · 1 November 2026 · recent 64-bit Android (tried on Android 16), notifications (Android 13+), settings key, one key for one function only, swipe that stops at the edges, reorderable TG list.
  • 0.31 · 30 October 2026 · Radio or Bluetooth audio with separate gains, fixed voice EQ and filters, date code with version.
  • 0.3 · 30 October 2026 · background running, screen always on, notification icon.
  • 0.2 · 30 October 2026 · decoding on a separate thread with pre-buffer, audio filters, Back key from the Settings, three-column call page.
  • 0.1 · 29 October 2026 · first version.
Il codice sorgente verrà reso disponibile non appena verrà rilasciata una versione stabile.The source code will be made available as soon as a stable version is released.