2011-09-18 8 views
5

Negli ultimi mesi ho cercato di sviluppare un'interfaccia multitouch basata su Kinect per una varietà di sintetizzatori musicali software.Considerazioni generali per interfaccia NUI/touch

La strategia generale che mi è venuta in mente è creare oggetti, sia programmaticamente che (se possibile) algoritmicamente per rappresentare vari controlli del synth morbido. Questi dovrebbero avere;

  • posizione X posizione
  • Y
  • Altezza
  • Larghezza
  • MIDI canale di uscita
  • MIDI dati scaler (convertire coordinate XY valori midi)

2 strategie che Sono stati considerati per la creazione agoritmica la descrizione XML e in qualche modo si tira fuori roba da poco e schermo (vale a dire dato un programma in esecuzione, trovare xycoords di tutti i controlli). Non ho idea di come procedere per il secondo, ed è per questo che lo esprimo in un linguaggio tecnico così specifico;). Potrei fare qualche soluzione intermedia, come usare i clic del mouse agli angoli dei controlli per generare un file xml. Un'altra cosa che potrei fare, che ho visto spesso nelle app flash, è quella di mettere le dimensioni dello schermo in una variabile e usare la matematica per costruire tutti gli oggetti dell'interfaccia in termini di dimensioni dello schermo. Si noti che non è strettamente necessario rendere gli oggetti delle stesse dimensioni dei controlli su schermo o rappresentare tutti gli oggetti sullo schermo (alcuni sono solo indicatori, non controlli interattivi)

Altre considerazioni;

Dato (per ora) due serie di coordinate X/Y come input (mani sinistra e destra), qual è la mia migliore opzione per usarle? Il mio primo istinto è/era di creare una sorta di focus test, in cui se le coordinate x/y rientrano nei limiti dell'oggetto dell'interfaccia l'oggetto diventa attivo e quindi diventa inattivo se cadono fuori da altri limiti più piccoli per un certo periodo di tempo. La soluzione economica che ho trovato è stata quella di usare la mano sinistra come puntatore/selettore e la destra come controller, ma sembra che io possa fare di più. Ho alcune soluzioni per i gesti (catene di markov nascoste) con cui ho potuto cazzeggiare. Non che sarebbe facile andare a lavoro, esattamente, ma è qualcosa che mi vedrei fare dato un incentivo sufficiente.

Quindi, per riassumere, il problema è

  • rappresentano l'interfaccia (necessario perché l'interfaccia predefinita prevede sempre ingresso mouse)
  • selezionare un controllo
  • manipolare utilizzando due serie di x/y coords (controller rotativo/continuo) o, nel caso di interruttori, usare preferibilmente un gesto per accenderlo senza dare/mettere a fuoco.

Qualsiasi commento, in particolare da parte di persone che hanno lavorato/stanno lavorando in multitouch io/NUI, è molto apprezzato. Collegamenti a progetti esistenti e/o materiale di buona lettura (libri, siti, ecc.) Sarebbero di grande aiuto.

+0

Meta-discussione su questa domanda sta accadendo/è successo: http://meta.stackexchange.com/q/106720/146495 –

risposta

2

Woah molte cose qui. Ho lavorato su un sacco di cose NUI durante il mio a Microsoft quindi vediamo cosa possiamo fare ...

Ma prima, ho bisogno di togliermi di torno questo problema: tu dici "Multitouch basato su Kinect". È semplicemente sbagliato. Kinect non ha nulla a che fare con il tocco (che è il motivo per cui hai la sfida "seleziona un controllo").I tipi di considerazione dell'interfaccia utente necessari per il tocco, il rilevamento del corpo e il mouse sono completamente diversi. Ad esempio, nell'interfaccia utente touch devi stare molto attento a ridimensionare le cose in base alla dimensione dello schermo/risoluzione/DPI ... indipendentemente dallo schermo, le dita sono sempre le stesse dimensioni fisiche e le persone hanno lo stesso grado di accuratezza fisica, quindi vuoi i tuoi pulsanti e controlli simili per avere sempre le stesse dimensioni fisiche. La ricerca ha trovato 3/4 di pollice per essere il punto debole per i pulsanti touchscreen. Questa non è una preoccupazione per Kinect, dal momento che non si sta toccando direttamente nulla: la precisione è dettata non dalle dimensioni delle dita ma dalla precisione del sensore e la capacità degli utenti di controllare con precisione i cursori virtuali ritardanti di &.

Se trascorri del tempo giocando con i giochi Kinect, diventa subito chiaro che esistono 4 paradigmi di interazione. 1) Comandi basati su pose. L'utente colpisce e tiene una posa per richiamare un comando o un comando a livello di applicazione (di solito facendo il punto su un menu) 2) Pulsanti al passaggio del mouse. L'utente sposta un cursore virtuale su un pulsante e rimane fermo per un certo periodo di tempo per selezionare il pulsante 3) Navigazione e selezione basata sullo scorrimento. L'utente agita le mani in una direzione per scorrere e elencare e un'altra direzione per selezionare dall'elenco 4) Comandi vocali. L'utente parla semplicemente un comando.

Ci sono altre idee simili a un mouse che sono state provate dagli hobbisti (non le hanno viste in un gioco reale) ma francamente fanno schifo: 1) usando una mano per il cursore e un'altra mano per "fare clic" dove si trova il cursore o 2) usando la coordinata z della mano per determinare se "fare clic"

Non è chiaro per me se stai chiedendo come far funzionare alcuni widget mouse esistenti con Kinect. Se è così, ci sono alcuni progetti sul web che ti mostreranno come controllare il mouse con l'input di Kinect, ma questo è zoppo. Può sembrare super bello, ma in realtà non sfrutti affatto ciò che il dispositivo fa al meglio.

Se stavo costruendo un sintetizzatore musicale, vorrei concentrarmi sull'approccio n. 3 - scorrere. Qualcosa come Dance Central. Sul lato sinistro dello schermo mostra un elenco dei tuoi controller MIDI con qualche piccola indicazione visiva del loro stato. Lascia scorrere l'utente con la mano sinistra per scorrere e selezionare un controller da questo elenco. Sul lato destro dello schermo mostra come stai tenendo traccia della mano destra dell'utente all'interno di un piano davanti al loro corpo. Ora stai permettendo loro di usare entrambe le mani contemporaneamente, dando un immediato riscontro visivo di come ogni mano viene interpretata e non richiedendole per essere super precise.

ps ... Mi piacerebbe anche dare un grido al libro NUI di Josh Blake. È roba buona. Se vuoi veramente padroneggiare questa zona, vai a ordinare una copia :) http://www.manning.com/blake/

+0

Robert - grazie un mucchio per la tua risposta, bello vedere un ex-microsoft a bordo. In primo luogo, re kinect vs multitouch. Ho iniziato a girovagare con varie soluzioni di blob-tracking per un po 'di tempo indietro e mi sono arreso perché, quando le condizioni di illuminazione sono cambiate con il margine minimo immaginabile, la risposta del sistema è rallentata. Ho preso il kinect perché gestisce il blob tracking internamente ed emette uno o più coordi- namenti del cursore x/y. Ho scoperto che il problema della risoluzione che hai menzionato (se stiamo parlando della stessa cosa) si ottiene ancora per il kinect perché le risoluzioni dello schermo e le dimensioni dell'interfaccia differiscono. – jamesson

+0

Con il mouse, il middleware che sto usando (primesense nite) emette essenzialmente 2 cursori in modalità manuale e un clic basato sui gesti ("spingendo" la mano verso lo schermo). Posso usare tutte le articolazioni (ne esce circa 10, ginocchia, fianchi, ecc.) Se scelgo così, che non mi sono ancora sentito. Re il tuo colpo, questo è il meglio che ho potuto inventare da solo. Spero che altre persone abbiano idee migliori. – jamesson

+0

Ecco un esempio di ciò che considero "migliore" - http://anythinghonest.com/amos/. Usa tutte le funzionalità disponibili della nuova tecnologia (ipad in questo caso) in modo intuitivo e fornisce un controllo profondo. Potrei rubarne alcune parti per la mia cosa.Grazie ancora per il vostro aiuto. Joe – jamesson