PDA

View Full Version : [Javascript]


Pescatore550
28-09-2013, 17:47
Ciao!!
Avrei bisogno di un aiuto, ho bisogno di inserire in un programmino javascript un cronometro che mi calcoli quanto tempo ci mette questo programmino a portare a termine una determinata azione, c'è un codice sempre javascript per poterlo inserire all'interno e che sia visibile così posso tirarmi giù i dati di questo test?

Sto facendo un progetto sul controllo vocale per cui avrei bisogno di capire quanto tempo ci vuole da quando finisco di parlare a quando il comando viene eseguito.

Grazie!

OoZic
28-09-2013, 19:28
Prima di far cominciare il "programma" (suppongo sia una funzione o una serie di funzioni)

var inizio = new Date();

... esegui le tue funzioni ...

var fine = new Date();

fine - inizio ti restituisce il tempo impiegato in millisecondi.

questo funziona se la tua funzione non è asincrona, viceversa la fine la devi calcolare con un callback o un evento che emette la funzione quando è terminata, credo.

Codice: (ho utilizzato jQuery per far prima)
JS:
var inizio = 0;
var fine = 0;
$('.inizio').click(function(){
inizio = new Date();
});
$('.fine').click(function(){
fine = new Date();
tempo = (fine-inizio)/1000;
$('.tempo').text(tempo);
});

Html:
<button class="inizio">Start</button>
<button class="fine">Fine</button>
<br><br>
<div><span class="tempo"></span> secondi</div>

Demo: http://jsfiddle.net/L3e3Y/

Pescatore550
29-09-2013, 12:40
Mmmmm interessante, l'unico problema è che anche per far partire il comando vocale devo premere un bottone che è già preimpostato e non posso modificarne il codice :muro:

OoZic
29-09-2013, 12:59
Mmmmm interessante, l'unico problema è che anche per far partire il comando vocale devo premere un bottone che è già preimpostato e non posso modificarne il codice :muro:

bè scusa ma questo bottone avrà un nome, un id, una classe o un attributo o qualcosa che lo identifica no?

usi quello, non devi crearne un altro o modificare il codice del tuo bottone/funzione.

Pescatore550
29-09-2013, 13:46
Si scusa mi sono spiegato malissimo io...praticamente il bottone compare grazie al webkit messo a disposizione da Google, per cui io non posso andare a fare modifiche all'interno del webkit, devo provare a vedere se posso creare io un bottone con webkit e funzione di cronometro allo stesso tempo.
Ora faccio qualche prova!
Intanto grazie mille!

OoZic
29-09-2013, 21:51
C'è un po di confusione mi sa :)
Web kit è (era) il motore di rendering di chrome e safari.

Magari posta del codice o spiega meglio di cosa si tratta.


Inviato da mio iPhone usando diti delle mani

Pescatore550
30-09-2013, 11:32
Praticamente google mette a disposizione il codicino x-webkit-speech che permette di far comparire il bottoncino a forma di microfono che compare su chrome o negli smartphone per la ricerca vocale su google.
Io sto provando a usare quello per creare dei "comandi vocali" nel senso che quello che viene detto poi viene passato a un codice che controlla che parola è stata detta e se questa parola è presente in una certa lista viene fatto qualcosa.
Nel pratico (e semplice), ho un rettangolo bianco disegnato, se dico un colore presente in una lista che ho fatto il colore cambia, altrimenti non succede niente.

Il problema è che non posso agire all'interno dell'x-webkit-speech, posso solo inserirlo e usarlo in questo modo

Pescatore550
30-09-2013, 11:39
http://provaformgio.altervista.org/TestVoiceAutosubmit/home.html
Qui c'è la prova pratica di quello che sto provando a fare e sotto le due parti di codice, quella html dove viene inserito x-webkit-speech e quello in JS

<input type="text" id="prova" lang="it" x-webkit-speech onwebkitspeechchange="controlla()" onkeypress="return invio(event)" />
<input type="button" value="Cambia" onClick="controlla()" />

function controlla(){
var myFieldVal = document.getElementById("prova").value.toLowerCase();

switch(myFieldVal) {

case "verde":
myFieldVal = "green";
break;

bla bla bla

context.fillStyle = myFieldVal;
context.fillRect(100,60,200,70);

}

OoZic
30-09-2013, 17:03
Devi farlo utilizzando gli eventi, ti posto un esempio di codice preso da qui:
https://github.com/GoogleChrome/webplatform-samples/tree/master/webspeechdemo

Qui trovi il file modificato con il timer implementato:
http://cl.ly/122u43313r3S

In pratica nel javascript puoi inserire all'evento 'onstart' e 'onend' il timer, poi ti fai tutto quello che devi fare.

var recognition = new webkitSpeechRecognition();
recognition.continuous = true;
recognition.interimResults = true;

recognition.onstart = function() {
recognizing = true;

// primo tempo
timer = new Date();

...

};

recognition.onend = function() {
recognizing = false;

// secondo tempo e calcolo tempo impiegato, lo ritrovi come log in console
var timer2 = new Date();
timer = (timer2 - timer)/1000;
console.log(timer);

...

};

Pescatore550
30-09-2013, 20:02
Per cui se inserisco il codice di controllo di quello che dico dopo questa parte di codice

// primo tempo
timer = new Date();

dovrebbe farmi il calcolo del tempo che ci mette da quando premo il bottone del microfono fino a quando viene eseguita la funzione di cambio colore.

OoZic
30-09-2013, 21:55
Per cui se inserisco il codice di controllo di quello che dico dopo questa parte di codice

// primo tempo
timer = new Date();

dovrebbe farmi il calcolo del tempo che ci mette da quando premo il bottone del microfono fino a quando viene eseguita la funzione di cambio colore.

devi però mettere la parte dove prende il tempo finale e il successivo calcolo, DOPO la tua funzione logicamente :D