Quando ho scritto di Surveyor, l’app Android che ho costruito per controllare il mio Blackstar Amped 3 senza passare da Architect, raccontavo soprattutto di cosa ero riuscito a fargli fare. Questa volta la storia è diversa: la versione 1.6.2 non aggiunge nemmeno un pulsante. Riguarda una domanda più scomoda, cioè quanto l’app sappia davvero di quello che scrive nella pedaliera.
Perché quando si salva un suono in uno slot dell’ampli non si scrive in un file qualunque: si sovrascrive una memoria che magari contiene la patch che userò stasera. Surveyor da tempo fa un backup prima di scrivere e rilegge lo slot dopo, per confermare che il salvataggio sia andato a buon fine. Il punto debole stava proprio in quella rilettura.
Sei byte che nessuno sapeva leggere
L’Amped 3 conserva ogni canale dell’amplificatore in un record compatto di 15 byte. Fino alla versione precedente io ne sapevo interpretare nove, le nove manopole, e sugli altri sei c’erano solo ipotesi. Di conseguenza, dopo un salvataggio, l’app poteva controllare le manopole ma non gli interruttori: la voce del canale, la posizione del boost, il carattere del riverbero.
Il metodo per scoprirlo è semplice da dire e noioso da fare. Con la pedaliera collegata al Mac ho scritto uno script che salva davvero lo slot attivo cambiando un solo parametro alla volta, rilegge il record e guarda quale byte si è mosso. Prima di ogni giro un backup completo di tutto, alla fine lo slot originale rimesso al suo posto e un confronto byte per byte con il backup. Alla fine sulla pedaliera non era cambiato niente, e avevo la mappa completa.
Il primo giro, a dire il vero, non ha trovato nulla: non si muoveva nessun byte, nemmeno quello del gain, che era lì apposta come controllo. Il problema non era la mappa ma il metodo. La pedaliera non salva i dati che le mandi insieme al comando di salvataggio: salva il suo stato attuale. Il parametro va cambiato dal vivo, e solo dopo salvato. Scoperto questo, i byte hanno cominciato a parlare: dopo le nove manopole vengono la posizione del boost, il carattere del riverbero, la risposta delle valvole e le tre voci Clean, Crunch e Overdrive.
L’errore che aspettava il primo concerto a 20 watt
La scoperta più utile però è stata un errore. Nella mia documentazione il byte 10 era la potenza. Invece è il carattere del riverbero, dark o light. L’equivoco nasceva da una coincidenza: in tutti i campioni che avevo raccolto potenza e riverbero valevano entrambi 1, e due valori che non cambiano mai non si possono distinguere guardandoli. Serviva cambiarne uno solo e salvare.
Non era un errore innocuo. Pochi giorni prima avevo esteso la verifica dell’app proprio a quel byte, confrontandolo con la potenza. La prima volta che qualcuno avesse salvato un suono a 20 watt con un riverbero scuro, Surveyor gli avrebbe detto che il salvataggio era fallito, e invece era riuscito. Un falso allarme su un’operazione che tocca la memoria della pedaliera è quasi peggio di nessun allarme, perché insegna a ignorare gli avvisi. Adesso la verifica copre tutti e 15 i byte, ciascuno confrontato con il parametro giusto. Potenza, master, riverbero acceso/spento e l’interruttore del boost invece non finiscono nello slot, e ora è scritto nero su bianco.
Se la pedaliera dice di no, adesso lo sai
L’altro cambiamento riguarda le scritture di tutti i giorni. Prima, quando spostavo un cursore, l’app mandava il valore e lo dava per buono. Adesso, dopo ogni modifica, preset di equalizzazione o caricamento di un preset, rilegge la pedaliera e confronta. Se un valore torna diverso da quello chiesto, lo segnala invece di far finta di niente.
Alcuni controlli del CabRig, cioè solo e mute della cassa e della stanza, il tipo di stanza, l’ampiezza stereo e il bypass dell’equalizzatore, li avevo ricavati soltanto dai file di Architect e non li avevo mai visti scrivere sull’hardware. Li ho provati uno per uno, con tutti i valori che l’app propone: la pedaliera li accetta tutti, e ogni scrittura tocca solo il suo parametro.
Import, export e un po’ di pulizia
Nella stessa versione confluiscono le correzioni sull’import e sull’export. I preset esportati da Architect vengono importati con gli offset giusti per livelli e filtri. L’esportazione della libreria porta con sé anche i profili convertiti dalle risposte all’impulso, i backup degli slot e lo snapshot di recupero delle prove, e reimportarla li ripristina senza scrivere nulla sulla pedaliera. Un singolo preset danneggiato non fa più sparire l’intera libreria.
Poi c’è la parte che non si vede. Il codice che parlava con l’USB, salvava i file, convertiva le risposte all’impulso e disegnava tutte le schermate era concentrato in due file enormi, ed era cresciuto nel modo in cui crescono i progetti fatti la sera dopo le prove. L’ho diviso per responsabilità, ho tolto i resti del modello di progetto da cui era nato e ho aggiunto i test sulle schermate vere. È il genere di lavoro che non cambia il suono di una nota, ma rende meno probabile che la prossima modifica ne rompa un’altra.
Scaricarla
La 1.6.2 è firmata con la stessa chiave della 1.6.1, quindi si installa sopra la versione precedente e conserva preset e backup. L’APK e le note complete sono nella pagina della release su GitHub.
Resta ancora qualcosa da misurare davvero: la risposta in frequenza delle casse, che per ora l’app disegna dai coefficienti e non da uno sweep registrato all’uscita, e la frequenza esatta dei filtri. Ma adesso, quando Surveyor dice che un salvataggio è andato a buon fine, lo dice sapendo cosa c’è in ogni byte.