Proudly debugging the system since 1981

Tag: kotlin

Audio To Text: open test su Google Play

Audio To Text è ora disponibile in open test su Google Play: chiunque può scaricare l’app, provarla e inviare feedback direttamente dalla scheda dello store.

👉 Pagina dello store:
https://play.google.com/store/apps/details?id=net.b0sh.audiotext

Da questa fase in poi non è più necessario alcun gruppo o canale separato per i tester: l’open test è aperto a tutti direttamente dallo store.


Cos’è Audio To Text

Audio To Text è un’utilità Android per trascrivere file audio in testo direttamente dal menu Condividi:

  1. Apri un file audio (MP3, M4A, WAV, ecc.) da qualsiasi app (Gestore file, Registratore, WhatsApp, ecc.).
  2. Premi Condividi.
  3. Scegli Audio To Text.
  4. L’app decodifica l’audio e lo trascrive interamente in locale, usando modelli on-device (sherpa-onnx).
  5. Il testo risultante è visibile a schermo e pronto per essere copiato o condiviso a tua volta.

Nessun audio lascia il tuo dispositivo: la trascrizione avviene offline, sul telefono. L’unica attività di rete è il download dei modelli dall’interno dell’app.

Il progetto, nato come fork di phone-whisper, è stato progressivamente riprogettato per focalizzarsi sulla trascrizione di file audio condivisi, con un’architettura, un’interfaccia e un flusso d’uso ormai molto diversi rispetto alle origini. Il repository rimane il riferimento principale per dettagli tecnici e storico del progetto.


Cosa c’è di nuovo (v1.0.3)

L’open test parte con la release v1.0.3 (19 settembre 2026), che consolida il lavoro delle versioni 0.9.x e 1.0.x. Le novità più rilevanti rispetto alle prime build di testing:

Trascrizione: ultime parole non più perse

  • Tail padding a 2.0s per il modello streaming (Kroko Zipformer2): test empirici hanno mostrato che 1.0s e 1.5s potevano ancora far perdere le ultime parole; con 2.0s la trascrizione finale è sempre completa. Si tratta di silenzio aggiunto dopo i campioni reali, quindi non può corrompere l’output, solo garantire il flush finale.
  • Decoder MediaCodec: drain completo fino a EOS in output: il ciclo di decodifica in AudioDecoder prosegue finché il decoder non segnala EOS sull’output, svuotando anche gli ultimi chunk in coda, invece di fermarsi all’EOS in input e chiamare subito stop() (che in alcuni casi scartava la fine dell’audio).

UI e informazioni versione

  • Schermata “More info”: versione installata: in fondo alla schermata compare “Installed version: <versionName>”, letta a runtime da PackageManager, evitando duplicazioni manuali della versione nel codice.
  • Version bump: 1.0.2 → 1.0.3 (versionCode 26).

Per il dettaglio completo di tutte le modifiche dalle 0.9.x in poi (Jetpack Compose Material 3, navigation bar, download in foreground service, correzioni varie, nuovi modelli, ecc.) puoi consultare il changangelog completo nel README del progetto.


Come partecipare all’open test

  1. Apri la pagina dello store:
    https://play.google.com/store/apps/details?id=net.b0sh.audiotext
  2. Se vedi il banner “Diventa tester” / “Join the open testing”, clicca su Iscriviti (o simile).
  3. Installa o aggiorna l’app dallo store.
  4. Usa l’app come di consueto: condividi file audio e trascrivi.
  5. Invia feedback e segnalazioni di anomalie tramite le GitHub Issues del progetto:
    https://github.com/b0sh-net/phone-whisper/issues

Non è richiesta alcuna configurazione particolare: basta avere un account Google e un dispositivo Android compatibile.


Prossimi passi

Con l’apertura dell’open test, l’obiettivo è:

  • Validare la stabilità della trascrizione su una gamma più ampia di dispositivi, formati audio e condizioni d’uso reali.
  • Raccogliere feedback su UX, prestazioni e consumo batteria.
  • Consolidare il comportamento dei modelli (in particolare quelli streaming) prima di eventuali release “stabili” al di fuori dei programmi di testing.

Se hai già usato le build di closed testing, l’esperienza è la stessa; la differenza è che ora il canale è aperto a tutti e il feedback può arrivare direttamente da chiunque installi l’app dallo store o apra una issue su GitHub.


Link utili

Audio To Text arriva alla 1.0.0: ecco che cosa è cambiato

Dal post di fine agosto è successo parecchio. L’ultima volta vi raccontavo della versione 0.6.3 e dell’avvio del closed testing su Google Play; oggi Audio To Text (ex phone-whisper) è arrivato alla 1.0.0, una release stabile pronta per la fase di test. In questi mesi il lavoro è stato enorme, soprattutto su interfaccia e affidabilità. Vi riassumo i punti principali.

Un’interfaccia tutta nuova

La novità più visibile è la riscrittura completa dell’interfaccia con Jetpack Compose e Material 3. Fino a qualche mese fa la UI era costruita con le classiche View di Android, ora è tutta basata su Compose: tema chiaro/scuro che riusa la palette esistente, animazioni e componenti moderni.

A cambiare è anche la navigazione: al posto dei vecchi bottoni è arrivata una barra di navigazione fissa in basso con tre sezioni — Home, Catalogo e Maggiori informazioni — ognuna con la sua icona (Material Symbols Outlined). La voce attiva è in azzurro, le altre in grigio, e la barra resta sempre visibile. L’onboarding resta una schermata separata, senza barra, con il solo pulsante “Chiudi”.

Un dettaglio che in orizzontale faceva la differenza: nella schermata principale titolo e testo informativo restano fissi, mentre stato e modelli installati scorrono verticalmente. Ora anche con il telefono ruotato tutto funziona come deve.

Download che non si interrompono

Prima, se chiudevi il catalogo mentre uno scaricamento era in corso, il download si fermava. Ora i modelli si scaricano tramite un foreground service: la scaricamento continua in background anche dopo aver premuto Indietro, con una notifica che mostra il progresso. A fine installazione la lista dei modelli installati e il catalogo si aggiornano da soli. È stato anche corretto un bug che, premendo il tasto Indietro durante un download, poteva congelare l’app (ANR).

Catalogo modelli più ricco e gestibile

Il catalogo è cresciuto e ora è più pratico:

  • Nuovi modelli, tra cui Kroko Italiano, dedicato alla trascrizione dell’italiano, scaricato come file singoli direttamente da Hugging Face.
  • Rimozione dei modelli: i modelli installati si possono eliminare (con conferma) per liberare spazio; il modello attivo, se rimosso, viene riselezionato automaticamente con il primo installato rimasto.
  • Nomi più chiari: ogni modello indica la lingua di destinazione (es. “Whisper Base – English”, “Parakeet 0.6B – Multilanguage”).
  • Supporto per modelli compressi e non, e per fonti di download diverse.

Onboarding e piccoli grandi fix

Alla prima apertura ora compare una guida introduttiva con tre schermate scaricabili che spiegano come scaricare il modello, attendere l’installazione e trascrivere un messaggio; si può rivedere in qualsiasi momento dalla sezione “Maggiori informazioni”, dove i link GitHub e Issues sono tornati attivi e aprono correttamente il browser.

Sono stati sistemati anche il crash di Kroko al caricamento (era un modello streaming, ora caricato con il riconoscitore giusto) e il progresso di download per i modelli compressi, che prima saltava da 0% a 100% senza valori intermedi. Le icone del download e del cestino usano ora gli icon set Material Symbols, decisamente più pulite.

Piattaforma

Sotto il cofano: target SDK 36 (Android 16), supporto a tutti gli ABI (arm64, arm, x86, x86_64) per una compatibilità più ampia, e interfaccia multilingua italiano/inglese.

Changelog in breve (0.6.3 → 1.0.0)

  • v1.0.0 — Prima release stabile per il closed testing: consolida tutta la serie 0.9.x.
  • v0.9.x — Migrazione Jetpack Compose Material 3, barra di navigazione in basso, download in background (foreground service), fix ANR/auto-riselezione/link/scroll orizzontale, icone Material Symbols, fix Kroko, progresso download compressi, chiarezza catalogo, nuovi modelli (Kroko Italiano), onboarding e indicatori.
  • v0.8.x — Rimozione modelli installati, supporto a tutti gli ABI, promozioni al closed testing.
  • v0.7.0 — Promozione al closed testing.
  • v0.6.4–0.6.6 — Target SDK 36, schermata “Maggiori informazioni”, fix UI e contrasto.

Come provarla

La 1.0.0 è pronta per il closed testing su Google Play. Per partecipare basta iscriversi al gruppo dei tester (accesso libero, nessuna mail): https://groups.google.com/g/testers-community/ . Serve solo un dispositivo Android e, se trovi qualcosa che non va — crash, modelli che non si scaricano, traduzioni imprecise — segnalalo pure via Issues o nel gruppo.

La trascrizione resta completamente locale e on-device, con modelli sherpa-onnx: nessuna dipendenza dal cloud. Grazie a chi sta testando e continua a segnalare problemi: è ciò che rende l’app migliore.

Audio To Text in closed testing su Google Play

Con la versione 0.6.3 di Audio To Text (ex phone-whisper) è partita la fase di closed testing su Google Play. È il passaggio successivo dopo il rebrand e la rimozione delle funzionalità cloud raccontati nel post precedente.

Cos’è il closed testing

Google Play richiede una fase di test con un gruppo ristretto di utenti prima di poter aprire l’app al pubblico. È un passaggio utile anche a prescindere dall’obbligo: permette di verificare il funzionamento su dispositivi e versioni di Android diverse dalla mia, cosa che da solo non riesco a coprire.

L’app è visibile alla pagina Google Play di Audio To Text, ma per installarla in questa fase è necessario essere inseriti nella lista dei tester.

Come partecipare

Chi vuole provarla lo può fare iscrivendosi al gruppo dei tester su google group: https://groups.google.com/g/testers-community/ . Il gruppo è ad accesso libero e non manda nessuna mail. Non serve nessuna competenza particolare, solo un dispositivo Android e la disponibilità a segnalare eventuali problemi — crash, modelli che non si scaricano correttamente, traduzioni imprecise o altro.

Cosa trovare nell’app

La versione in test corrisponde a quella descritta nel post precedente: trascrizione locale con modelli sherpa-onnx, nessuna dipendenza cloud, interfaccia in italiano o inglese in base alla lingua del dispositivo.

Changelog

v0.6.3 (2026-08-27)

Da phone-whisper a Audio To Text: rebrand, local-only e UI più chiara

C’è stato un cambiamento importante: nasce Audio To Text

Ad aprile avevo raccontato la nascita di phone-whisper, l’app Android per trascrivere audio offline sul dispositivo usando sherpa-onnx (potete rileggere il post originale). Da allora il progetto è cresciuto, e con la versione 0.6.1 arriva un cambiamento che va oltre il semplice numero di release: l’app cambia nome e diventa Audio To Text.

Cosa cambia davvero

Il progetto nasceva già con un forte focus sulla privacy, ma manteneva un’integrazione opzionale con OpenAI per la trascrizione cloud e il post-processing del testo. Con la 0.6.0 questa parte è stata rimossa completamente: niente più chiamate cloud, niente API key da gestire, nessun dato che lascia il telefono. L’app oggi funziona esclusivamente con i modelli sherpa-onnx scaricati e installati in locale, il che significa anche una base di codice più semplice da mantenere — sono stati eliminati interi componenti come TranscriberClient, PostProcessor e WavWriter, insieme ai relativi test.

Questa scelta ha richiesto anche una riscrittura della privacy policy, per rimuovere ogni riferimento alla gestione delle chiavi API e alle modalità cloud che non esistono più.

Il rebrand: da phone-whisper a Audio To Text

Il nome phone-whisper aveva senso quando il progetto era ancora legato all’idea di Whisper e a un’integrazione cloud. Ora che l’app è diventata a tutti gli effetti uno strumento locale, ho deciso di rinominarla Audio To Text, un nome più diretto e descrittivo di quello che fa realmente. Il cambiamento non è solo estetico: il package dei sorgenti è stato spostato da com.kafkasl.phonewhisper a net.b0sh.audiotext, con la cronologia Git preservata grazie a un git mv mirato invece di una semplice riscrittura dei file.

Miglioramenti all’esperienza utente

Con la 0.6.0 e la 0.6.1 ho lavorato molto anche su come l’app comunica il proprio stato all’utente:

  • Durante l’installazione di un modello, ora viene mostrato il progresso di estrazione con numero di file completati e file corrente in lavorazione, così sai esattamente a che punto è il processo.
  • È stata aggiunta una sezione informativa sullo stato del modello nella schermata principale, per capire a colpo d’occhio se un modello è installato, pronto o ancora da scaricare.
  • Con la 0.6.1 arriva il supporto multilingua dell’interfaccia: l’app segue automaticamente la lingua del dispositivo tra inglese e italiano. Nome dell’app e nomi dei modelli restano invariati, per evitare ambiguità.

Perché questo cambiamento

L’obiettivo originale di phone-whisper era offrire una trascrizione privata e locale, ma la presenza di un’opzione cloud era in qualche modo in contrasto con quella filosofia. Rimuoverla non è stata solo una semplificazione tecnica: è stata anche una scelta di coerenza. Audio To Text è oggi un’app che fa una cosa sola, la fa completamente offline, e non ha bisogno di chiedere permessi di rete o gestire credenziali di terzi.

Changelog completo

v0.6.1 (2026-08-25)

  • Interfaccia multilingua: supporto inglese e italiano, in base alla lingua del dispositivo. Nome app e nomi modelli non tradotti.
  • Aggiornamento versione: 0.6.0 → 0.6.1 (versionCode 8).

v0.6.0 (2026-08-25)

  • Rimossa l’integrazione OpenAI: eliminate trascrizione cloud e post-processing. L’app supporta ora solo la trascrizione locale con modelli sherpa-onnx scaricati.
  • Rebrand: l’app è stata rinominata Audio To Text, package spostato in net.b0sh.audiotext.
  • Aggiornamento versione: 0.5.0 → 0.6.0 (versionCode 7).

Link utili

Audio To Text resta un progetto piccolo, ma ora è coerente al 100% con la sua promessa iniziale: nessun dato lascia il tuo telefono, mai.

JetBrains’ Kotlin JVM language appeals to the Java faithful

Kotlin, a high-performance, statically typed “pragmatic language” that leverages the environment of Java Virtual Machine, has reached its official 1.0 release milestone. Created by IDE makers JetBrains, Kotlin — like many other non-Java languages that run on the JVM — is meant to run where Java runs and make use of the existing culture of Java libraries and tooling. Java, in turn, can use items built in Kotlin.
http://www.javaworld.com/article/3033798/java/jetbrains-kotlin-jvm-language-appeals-to-the-java-faithful.html#tk.rss_all

Fold

Mi ci è voluta più di qualche imprecazione per arrivare a questa implementazione :

fun Shop.getSetOfProductsOrderedByEveryCustomer(): Set<Product> {
    return customers.fold(allOrderedProducts, {
        orderedByAll, customer -> 
orderedByAll.minus( orderedByAll.filter { !customer.orderedProducts.contains(it) }) })
}

Salvo poi scoprire nelle soluzioni che esisteva il magico intersect

fun Shop.getSetOfProductsOrderedByEveryCustomer(): Set<Product> {
    // Return the set of products ordered by every customer
    return customers.fold(allOrderedProducts, {
        orderedByAll, customer ->
        orderedByAll.intersect(customer.orderedProducts)
    })
}

L’esercizio era questo : https://github.com/Kotlin/kotlin-koans/blob/master/src/ii_collections/_22_Fold_.kt

Comunque Kotlin è bellissimo.

© 2026 b0sh.net

Tema di Anders NorenSu ↑