rox

Una visualizzazione che vive nel lettore

La maggior parte dei lettori ti dà un analizzatore di spettro e si ferma lì. rox ha quei pannelli, un motore Milkdrop per vent'anni di preset e, sotto, uno strato di modulazione: segnali con un nome ricavati dall'audio, che una route porta dentro gli ingressi degli shader che scrivi tu, salvati nello stesso file in cui vive il resto del tuo tema.

Prima i pannelli normali

Un pannello di spettro con stili a barre o a blocchi, sfumature, picchi con una gravità propria, etichette di frequenza, e una zonizzazione divisa che analizza sopra e sotto una frequenza scelta con dimensioni di finestra diverse, così ciascun capo dell'intervallo baratta reattività e risoluzione per conto suo. Una striscia di forma d'onda che disegna l'intera traccia, per canale, e salta dove clicchi. Un VU. Una mensola di copertine che le ruota in vero 3D. Niente di tutto questo richiede una riga di codice ed è quello che userà la maggior parte delle persone.

Mettere in pausa congela le barre dov'erano, invece di lasciarle cadere a terra. Sembra una piccolezza finché non provi a guardare l'istante esatto in cui hai messo in pausa.

Milkdrop, in un pannello e dietro a tutto

Un pannello Milkdrop renderizza i preset tramite libprojectM su un thread proprio e disegna il risultato attraverso la stessa catena di shader di tutto il resto: si aggancia, va in scheda e si stacca come qualsiasi altro pannello, e uno shader di superficie ci passa sopra allo stesso modo. Metti un pacchetto di preset nella cartella indicata nella pagina Preset, Cream of the Crop o il set MilkDrop originale, e premi Riscansiona. Le texture incluse in un pacchetto vengono trovate da sole.

Scegli preset apre un browser in una finestra propria: un albero di cartelle o una griglia di miniature, un filtro, un interruttore per i preferiti e la navigazione da tastiera. Cliccare un preset lo carica subito dietro la finestra, quindi quello che vedi è il render vero e non un'anteprima. La rotazione stabilisce cosa scorrono Avanti, Indietro e il cambio a tempo, e il blocco tiene fermo un preset da una traccia all'altra.

Lo stesso motore gira come sfondo dietro ogni finestra, composto sopra la copertina sfocata con l'intensità che imposti tu. Un preset può tenere i propri colori, invertirsi per il tema chiaro, dipingere nella palette o prendere il colore della copertina in riproduzione tenendo il proprio dettaglio, e una tinta album sposta le tonalità verso la copertina. Una coda ferma lo fa svanire e il thread di render si ferma, quindi un visual inattivo non costa nulla.

Shader, su quattro superfici

Uno shader di rox è un singolo stadio di frammento WGSL. Può girare sul corpo di un singolo pannello, come pannello Shader a sé, come sovrapposizione sull'intera finestra, o come sfondo che dipinge sotto tutti i pannelli, dietro la copertina. La sovrapposizione e lo sfondo hanno ciascuno un interruttore che li estende a ogni finestra aperta di rox. Stesso linguaggio, stesso blocco di uniform, stesse route in tutti i casi.

Ogni shader riceve l'orologio, la risoluzione, il puntatore, e otto float meta che descrivono l'istante: il volume, dove sta la testina nella traccia, se l'audio si sta davvero muovendo, la durata della traccia, e quanto scura risulta la palette attuale, così che un singolo shader possa vestirsi per il chiaro e per lo scuro invece di nascere legato al tema per cui è stato scritto.

Uno shader di pannello può anche leggere cosa ha davvero disegnato il pannello. Un binding di maschera gli passa il disegno del pannello riprodotto su trasparenza, e i pannelli pubblicano la forma del loro contenuto, così un'ombra o un bagliore segue una copertina in letterbox invece delle bande vuote ai suoi lati.

Oltre uno stadio, un commento // @pass divide il testo in una catena fino a otto, ognuno in grado di leggere per nome i passaggi precedenti. È quello che serve a una piramide di sfocatura o a un bloom a due stadi. Una riga // @asset nomina un'immagine da campionare, e // @asset art: @cover collega la copertina della traccia in riproduzione, ricollegandosi quando la traccia cambia. Con l'applicazione arrivano nove esempi, ognuno dei quali dimostra una parte diversa di questo contratto invece di nove variazioni su un plasma.

Punta il pannello su un file sul disco e rox lo sorveglia. Salva nel tuo editor e la finestra ce l'ha. Un salvataggio che non compila lascia sullo schermo l'ultima versione buona con l'errore nel pannello, perché perdere l'immagine è un brutto modo di scoprire di aver sbagliato a scrivere un punto e virgola.

I segnali sono la parte che cambia tutto

Uno shader con dentro un orologio è un salvaschermo. Quello che ne fa una visualizzazione è ciò con cui lo nutri, e in rox è un insieme di segnali con un nome, condiviso dall'intera applicazione. Li costruisci in una finestra a parte, sotto Applicazione, accanto all'equalizzatore, e quella finestra ha uno spettro e i controlli di riproduzione per lo stesso motivo per cui li ha l'equalizzatore: scegli una banda a occhio e a orecchio su quello che stai davvero ascoltando.

Cinque tipi di sorgente. Una banda è l'energia tra due frequenze, il segnale su cui viaggia un crescendo. Il livello è l'intero mix. Un attacco pulsa quando una banda supera la propria media recente, il segnale su cui viaggia un colpo. Un trigger pulsa quando una banda attraversa una linea che hai tracciato, per il materiale in cui la media mobile non torna mai giù e un attacco ammutolisce dopo la prima battuta. Un totale somma un altro segnale nel tempo e, arrivato a uno, riparte da zero, così uno shader può leggerlo come una fase che avanza finché la musica è forte e si ferma quando non lo è.

Ognuno porta con sé uno smorzamento della risposta e una soglia. La soglia è l'impostazione che si guadagna il posto: una banda che segue il rumore di fondo tiene per sempre ogni manopola collegata leggermente fuori dalla posizione di riposo, e una soglia con una curva sopra restituisce invece silenzio tra un colpo e l'altro. L'indicatore disegna il valore non filtrato con la soglia tracciata attraverso, dato che una barra sparita sotto la propria soglia non aiuterebbe per niente a posizionarla.

Una route lega un segnale a un parametro con un intervallo di uscita: questo segnale, questo parametro, da qui a lì. Sedici slot raggiungono ogni shader, e gli slot rimasti liberi ricevono un semplice cursore nelle impostazioni, così un look può essere per metà suonato dalla musica e per metà regolato a mano.

Critters, come argomento

Uno degli spazi di lavoro inclusi è l'intero lettore reso come stampa a 1 bit: un dithering ordinato su ogni superficie, toni che collassano con i bassi profondi, e un muro di rumore dietro i pannelli che si muove con il brano. Sono cinque segnali e quattro shader in un singolo file, e niente di tutto questo è un caso speciale nell'applicazione.

Lo spazio di lavoro Critters di rox: l'intera finestra resa in dithering ordinato in bianco e nero, con una mensola curva di copertine sopra una barra di scorrimento, una riga di controlli, una striscia di forma d'onda e una tabella di tracce, tutto su un campo di rumore in movimento.

Caricalo dalla finestra di benvenuto, poi apri le impostazioni e smontalo. Tutti gli altri.

Eseguire lo shader di uno sconosciuto

Gli shader viaggiano dentro i file degli spazi di lavoro, quindi un look importato arriva portando il codice di qualcun altro.

Niente viene eseguito finché non lo dici tu. Il sorgente di ogni shader riceve un'impronta, e l'elenco degli approvati è locale alla macchina e viene scritto solo da un'azione diretta: hai scelto il file, hai ricaricato, hai scelto un preset, hai premuto Approva. Un look arrivato dentro un pacchetto resta lì inerte con un pulsante sotto fino ad allora. Gli esempi che arrivano con rox sono affidabili per costruzione, perché sono compilati dentro il binario.

Attivarne uno apre una finestra di conferma che aspetta una risposta invece di fare un conto alla rovescia, e su quella finestra non gira mai nessuno shader. Qualunque cosa lo shader faccia al resto dello schermo, la via d'uscita resta leggibile.

Cosa non è gestito

  • Le route raggiungono gli slot degli shader e le manopole del pannello particelle. Le impostazioni di ogni altro pannello restano manopole che imposti a mano.
  • Preset Milkdrop, non AVS. Non c'è un importatore per l'AVS di Winamp. E un preset è un file sul tuo disco, quindi quello caricato resta per macchina invece di viaggiare dentro uno spazio di lavoro.
  • Nessuna superficie di controllo MIDI o OSC. Il passaggio di sovrapposizione e i passaggi dei pannelli sono quello che c'è, mossi dall'audio e dal puntatore.
  • Un passaggio su tutta la finestra è un vero passaggio GPU a ogni fotogramma. Su un portatile a batteria è una scelta tua.

La distanza tra «voglio che tutto il lettore lampeggi sulla cassa» e averlo sono una banda, una soglia e una route, e nessuna delle tre richiede di ricompilare.

Provalo sulla tua libreria

Qui niente chiama casa: l'analisi è sull'audio che sta già passando per il lettore. Altro su cosa porta con sé uno spazio di lavoro.