<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:creativeCommons="http://backend.userland.com/creativeCommonsRssModule" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>{ The Smoking Code }</title>
	
	<link>http://wpblog.michelelocuratolo.com</link>
	<description />
	<lastBuildDate>Mon, 06 May 2013 09:20:14 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.5.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/MighellsBlog" /><feedburner:info uri="mighellsblog" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><creativeCommons:license>http://creativecommons.org/licenses/by-sa/2.0/</creativeCommons:license><image><link>http://creativecommons.org/licenses/by-sa/2.0/</link><url>http://creativecommons.org/images/public/somerights20.gif</url><title>Some Rights Reserved</title></image><feedburner:emailServiceId>MighellsBlog</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><item>
		<title>[#wpdev] Video: Programmare le speech API</title>
		<link>http://feedproxy.google.com/~r/MighellsBlog/~3/1WFOJbr-YQQ/</link>
		<comments>http://wpblog.michelelocuratolo.com/2013/05/06/wpdev-video-programmare-le-speech-api/#comments</comments>
		<pubDate>Mon, 06 May 2013 08:30:00 +0000</pubDate>
		<dc:creator>Mighell</dc:creator>
				<category><![CDATA[Windows Phone]]></category>
		<category><![CDATA[Speech]]></category>

		<guid isPermaLink="false">http://wpblog.michelelocuratolo.com/?p=1086</guid>
		<description><![CDATA[Durante l’evento Windows Phone 8 Developer Day Italy, abbiamo registrato tutte le sessioni erogate durante l’evento. Qui in basso, il video della sessione che ho tenuto sulle Speech API: I video delle altre sessioni sono visibili qui: http://channel9.msdn.com/Events/Windows-Phone-8-Developer-Day/Windows-Phone-8-Developer-Day-Italy Buona visione.]]></description>
				<content:encoded><![CDATA[<p>Durante l’evento Windows Phone 8 Developer Day Italy, abbiamo registrato tutte le sessioni erogate durante l’evento. Qui in basso, il video della sessione che ho tenuto sulle Speech API:</p>
<p><video width="600" height="450" controls="controls" poster="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/05/SpeechAPI.jpg"><source src="http://media.ch9.ms/ch9/5e23/6bae1b15-c171-41e8-8f62-22770fa35e23/SpeechAPI_mid.mp4" type="video/mp4" /><source src="http://media.ch9.ms/ch9/5e23/6bae1b15-c171-41e8-8f62-22770fa35e23/SpeechAPI.webm" type="video/webm" /><object width="600" height="450" classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,40,0"><param name="src" value="http://wpblog.michelelocuratolo.com/wp-includes/js/tinymce/plugins/media/moxieplayer.swf" /><param name="flashvars" value="url=http%3A//media.ch9.ms/ch9/5e23/6bae1b15-c171-41e8-8f62-22770fa35e23/SpeechAPI_mid.mp4&amp;poster=/wp-content/uploads/2013/05/SpeechAPI.jpg" /><param name="allowfullscreen" value="true" /><param name="allowscriptaccess" value="true" /><embed width="600" height="450" type="application/x-shockwave-flash" src="http://wpblog.michelelocuratolo.com/wp-includes/js/tinymce/plugins/media/moxieplayer.swf" flashvars="url=http%3A//media.ch9.ms/ch9/5e23/6bae1b15-c171-41e8-8f62-22770fa35e23/SpeechAPI_mid.mp4&amp;poster=/wp-content/uploads/2013/05/SpeechAPI.jpg" allowfullscreen="true" allowscriptaccess="true" /></object></video></p>
<p>I video delle altre sessioni sono visibili qui: <a href="http://channel9.msdn.com/Events/Windows-Phone-8-Developer-Day/Windows-Phone-8-Developer-Day-Italy">http://channel9.msdn.com/Events/Windows-Phone-8-Developer-Day/Windows-Phone-8-Developer-Day-Italy</a></p>
<p>Buona visione.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=1WFOJbr-YQQ:YX7fqGyUNgI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=1WFOJbr-YQQ:YX7fqGyUNgI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?i=1WFOJbr-YQQ:YX7fqGyUNgI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=1WFOJbr-YQQ:YX7fqGyUNgI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MighellsBlog/~4/1WFOJbr-YQQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wpblog.michelelocuratolo.com/2013/05/06/wpdev-video-programmare-le-speech-api/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
<enclosure url="http://media.ch9.ms/ch9/5e23/6bae1b15-c171-41e8-8f62-22770fa35e23/SpeechAPI_mid.mp4" length="394929107" type="video/mp4" />
<enclosure url="http://media.ch9.ms/ch9/5e23/6bae1b15-c171-41e8-8f62-22770fa35e23/SpeechAPI.webm" length="96710062" type="application/wordperfect" />
		<feedburner:origLink>http://wpblog.michelelocuratolo.com/2013/05/06/wpdev-video-programmare-le-speech-api/</feedburner:origLink></item>
		<item>
		<title>[#wpdev] SpeechAPI: in app dialog</title>
		<link>http://feedproxy.google.com/~r/MighellsBlog/~3/Dsj9E2esGwM/</link>
		<comments>http://wpblog.michelelocuratolo.com/2013/04/30/wpdev-speechapi-in-app-dialog/#comments</comments>
		<pubDate>Tue, 30 Apr 2013 14:30:00 +0000</pubDate>
		<dc:creator>Mighell</dc:creator>
				<category><![CDATA[Windows Phone]]></category>
		<category><![CDATA[Speech]]></category>

		<guid isPermaLink="false">http://wpblog.michelelocuratolo.com/?p=1084</guid>
		<description><![CDATA[Nei precedenti articoli di questa serie, abbiamo visto come integrare il riconoscimento vocale nelle nostre applicazioni sviluppate per Windows Phone 8. Abbiamo analizzato i 3 blocchi principali (Voice Command, Speech Recognition e Text-To-Speech) e capito come programmarli correttamente. In questo post vedremo invece come mettere insieme i tre blocchi al fine di creare un vero [...]]]></description>
				<content:encoded><![CDATA[<p align="justify"><a href="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/04/Windows-Phone-8-big-logo.png"><img style="background-image: none; float: right; padding-top: 0px; padding-left: 0px; margin: 0px 0px 0px 12px; display: inline; padding-right: 0px; border: 0px;" title="Windows-Phone-8-big-logo" alt="Windows-Phone-8-big-logo" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/04/Windows-Phone-8-big-logo_thumb.png" width="240" height="78" align="right" border="0" /></a>Nei precedenti articoli di questa serie, abbiamo visto come integrare il riconoscimento vocale nelle nostre applicazioni sviluppate per Windows Phone 8. Abbiamo analizzato i 3 blocchi principali (Voice Command, Speech Recognition e Text-To-Speech) e capito come programmarli correttamente. In questo post vedremo invece come mettere insieme i tre blocchi al fine di creare un vero e proprio “dialogo” con la nostra applicazione.</p>
<p align="justify">In uno scenario di tipo “in app dialog”, la cosa che dobbiamo tenere sempre a mente è che, l’intero flusso di interazione, deve basarsi esclusivamente su una interazione vocale. La nostra applicazione (o meglio, la funzionalità che decidiamo di implementare), non deve mai richiedere che l’utente usi il dispositivo. Usando questo principio come linea guida, proviamo ad immaginare un workflow per il salvataggio di un appunto vocale.</p>
<p align="justify">Il primo passo sarà sicuramente quello di creare un Voice Command adeguato che ci rimandi ad una pagina specifica per l’inserimento del nostro appunto. Esattamente come abbiamo visto <a href="http://wpblog.michelelocuratolo.com/2013/02/18/wpdev-speech-api-registrazione-del-file-vcd/">qui</a>. Una volta riconosciuto il comando, verremo ridirezionati alla pagina di creazione di una nota. Useremo molto probabilmente la stessa pagina che viene usata nel normale flusso con la differenza che, sapendo che <a href="http://wpblog.michelelocuratolo.com/2013/03/04/wpdev-speech-api-gestione-del-voice-command/">siamo arrivati usando</a> un comando vocale, avvieremo l’interazione vocale anziché aspettarci l’input da tastiera. Questa interazione dovrà basarsi sull’accoppiata Text-To-Speech e riconoscimento vocale per guidare l’utente verso il completamento del task (creare l’appunto vocale). Un ipotesi di flusso per un task semplice come questo potrebbe essere la seguente:</p>
<p><a href="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/04/30-04-2013-12.21.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="30-04-2013 12.21" alt="30-04-2013 12.21" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/04/30-04-2013-12.21_thumb.png" width="1698" height="1231" border="0" /></a></p>
<p>L’interazione, come visibile nel diagramma, è abbastanza semplice: useremo il text to speech per effettuare tutte le varie richieste, i custom grammar per i comandi ed il riconoscitore vocale per il riconoscimento del testo da inserire nella nota.</p>
<p>Vediamone i vari passaggi tradotti in codice. Il primo passaggio è quello di iniziare una interazione vocale se abbiamo avviato l’app usando il Voice Command:</p>
<p><a href="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/04/30-04-2013-12.48.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="30-04-2013 12.48" alt="30-04-2013 12.48" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/04/30-04-2013-12.48_thumb.png" width="1698" height="393" border="0" /></a></p>
<p>Il metodo StartReco incapsula tutta la parte di interazione vocale quindi, come primo passaggio, predisponiamo il riconoscitore vocale:</p>
<p><a href="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/04/30-04-2013-12.51.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="30-04-2013 12.51" alt="30-04-2013 12.51" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/04/30-04-2013-12.51_thumb.png" width="1641" height="454" border="0" /></a></p>
<p>ed i comandi:</p>
<p><a href="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/04/30-04-2013-14.01.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="30-04-2013 14.01" alt="30-04-2013 14.01" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/04/30-04-2013-14.01_thumb.png" width="1698" height="232" border="0" /></a></p>
<p>A questo punto, usiamo il sintetizzatore per chiedere al nostro utente di dettare la nota ed avviamo il riconoscitore vocale</p>
<p><a href="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/04/30-04-2013-14.03.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="30-04-2013 14.03" alt="30-04-2013 14.03" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/04/30-04-2013-14.03_thumb.png" width="1698" height="371" border="0" /></a></p>
<p>Usando lo <strong>SpeechRecognizerUI </strong>abbiamo il vantaggio che la rilettura del testo riconosciuto viene fatta automaticamente. A questo punto, non ci resta che richiedere all’utente il comando da eseguire e processarlo correttamente:</p>
<p><a href="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/04/30-04-2013-14.12.png"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="30-04-2013 14.12" alt="30-04-2013 14.12" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/04/30-04-2013-14.12_thumb.png" width="1698" height="1061" border="0" /></a></p>
<p align="justify">A questo punto, sta a noi decidere cosa fare a fine interazione. In questo caso, si viene rimandati alla pagina principale ma potrebbe essere sensato anche chiudere l’applicazione, il tutto usando solo i comandi vocali.</p>
<p align="justify">L’interazione mostrata in questo esempio, sebbene completa, è abbastanza semplice da implementare. Qualora doveste trovarvi di fronte a tipi di interazione più complesse, ricordate sempre la regola che, se in uno scenario di tipo in app dialog, non deve mai essere necessario usare il touch screen per chiudere l’interazione e, con questa premessa, implementate il vostro codice.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=Dsj9E2esGwM:hh9I7Vu3iUw:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=Dsj9E2esGwM:hh9I7Vu3iUw:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?i=Dsj9E2esGwM:hh9I7Vu3iUw:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=Dsj9E2esGwM:hh9I7Vu3iUw:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MighellsBlog/~4/Dsj9E2esGwM" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wpblog.michelelocuratolo.com/2013/04/30/wpdev-speechapi-in-app-dialog/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://wpblog.michelelocuratolo.com/2013/04/30/wpdev-speechapi-in-app-dialog/</feedburner:origLink></item>
		<item>
		<title>[#wpdev] Speech API: il riconoscimento vocale</title>
		<link>http://feedproxy.google.com/~r/MighellsBlog/~3/UeoKQ8eY6E0/</link>
		<comments>http://wpblog.michelelocuratolo.com/2013/03/27/wpdev-speech-api-il-riconoscimento-vocale/#comments</comments>
		<pubDate>Wed, 27 Mar 2013 16:30:00 +0000</pubDate>
		<dc:creator>Mighell</dc:creator>
				<category><![CDATA[Windows Phone]]></category>
		<category><![CDATA[Speech]]></category>

		<guid isPermaLink="false">http://wpblog.michelelocuratolo.com/?p=1066</guid>
		<description><![CDATA[Nell’ultimo post, abbiamo parlato del componente delle Speech API che ci permette di far “leggere” del testo alle nostre applicazioni: il text to speech. In questo post, vedremo il terzo pilastro di queste API ovvero il riconoscimento vocale. Lo scopo di questo “mattone”, come è facile da intuire, quello di tradurre l’input vocale recepito dal [...]]]></description>
				<content:encoded><![CDATA[<p align="justify">Nell’<a href="http://wpblog.michelelocuratolo.com/2013/03/11/wpdev-speech-api-text-to-speech/">ultimo post</a>, abbiamo parlato del componente delle Speech API che ci permette di far “leggere” del testo alle nostre applicazioni: il text to speech. In questo post, vedremo il terzo pilastro di queste API ovvero il riconoscimento vocale.</p>
<p align="justify">Lo scopo di questo “mattone”, come è facile da intuire, quello di tradurre l’input vocale recepito dal microfono in testo scritto, utilizzabile nelle nostre applicazioni. Per via della complessità insita nella procedura di riconoscimento vocale, il lavoro di “traduzione” viene eseguito sul cloud da server dedicati allo scopo. La scelta di questa modalità, condivisibile o meno,  è dettata da due fattori fondamentali:</p>
<ol>
<li>
<div align="justify"><strong>precisione</strong>: tradurre correttamente la voce in testo è una operazione estremamente complessa e onerosa. Sebbene l’hardware dei nostri smartphone sia di tutto rispetto, un accurato riconoscimento vocale richiede macchine decisamente più potenti</div>
</li>
<li>
<div align="justify"><strong>velocità</strong>: il riconoscimento deve essere una operazione veloce, soprattutto in scenari di in-app dialog. L’hardware degli smartphone attuali (e non solo Windows Phone), non può garantire estrema precisione e velocità di elaborazione in questi contesti specifici</div>
</li>
</ol>
<p align="justify">A questi due fattori, si aggiunge un terzo elemento tutt’altro che trascurabile: la durata della batteria. E’ ovvio che più capacità di calcolo chiediamo al processore, maggiore sarà il consumo energetico e minore sarà la durata della batteria. L’elaborazione on line unisce, di fatto, precisione e velocità nel riconoscimento ed un dispendio energetico molto modesto.</p>
<p align="justify">Ovviamente, non saremo noi ad occuparci dello scambio dati tra il nostro dispositivo ed i server di riconoscimento vocale. A fare tutto il lavoro se ne occupa l’oggetto <strong>SpeechRecognizerUI</strong>. Una volta configurato ed istanziato, sarà sufficiente richiamare il metodo <strong>RecognizeWithUIAsync</strong> per avviare il processo di riconoscimento attraverso l’interfaccia utente a cui siamo ormai abituati.</p>
<p>La configurabilità di questo componente è relativa ad alcuni aspetti della UI di riconoscimento e del comportamento del riconoscitore. Nello specifico:</p>
<table width="600" border="0" cellspacing="0" cellpadding="2">
<tbody>
<tr>
<td valign="top" width="133"><strong>ListenText</strong></td>
<td valign="top" width="467">definisce il messaggio da visualizzare nell’interfaccia di riconoscimento vocale (ad esempio: detta la tua nota)</td>
</tr>
<tr>
<td valign="top" width="133"><strong>ExampleText</strong></td>
<td valign="top" width="467">è il classico testo di esempio da mostrare all’utente</td>
</tr>
<tr>
<td valign="top" width="133"><strong>ReadoutEnabled</strong></td>
<td valign="top" width="467">se impostato a true, il testo riconosciuto verrà riletto dal sistema. E’ molto utile per dare un feedback all’utente che, molto probabilmente, non stà guardando il display del dispositivo</td>
</tr>
<tr>
<td valign="top" width="133"><strong>ShowConfirmation</strong></td>
<td valign="top" width="467">mostra l’eventuale conferma di avvenuto riconoscimento. Se impostato a false, il testo riconosciuto non verrà riletto</td>
</tr>
</tbody>
</table>
<p>&nbsp;</p>
<p align="justify">Una volta avviato il riconoscitore, non ci resta che gestire il risultato. Esso sarà contenuto in un oggetto di tipo <strong>SpeechRecognitionUIResult</strong> al cui interno, oltre al testo riconosciuto, troveremo altre informazioni come il livello di <strong>confidence</strong>.</p>
<p align="justify">Dal punto di vista del codice, il tutto si traduce in poche righe di codice:</p>
<p><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="27-03-2013 16.30" alt="27-03-2013 16.30" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/03/27-03-2013-16.30.png" width="1694" height="542" border="0" /></p>
<p align="justify">Il livello di confidence, accessibile dalla property <strong>result.RecognitionResult.TextConfidence</strong>, può avere i valori <em>High</em>, <em>Medium</em>, <em>Low </em>e <em>Rejected</em> e può essere utile a gestire eventuali interazioni in caso di riconoscimento “incerto”. Nell’eventualità il livello di confidence sia diverso da High, abbiamo la possibilità di recuperare una serie di alternative attraverso il metodo <strong>GetAlternates()</strong>.</p>
<p align="justify">L’utilizzo della UI in fase di riconoscimento, sebbene sia molto comodo ed utile, diventa scomodo e di intralcio quando, ad esempio, dobbiamo gestire eventuali comandi. Pensiamo alla nostra applicazione per prendere appunti: se per riconoscere il comando di salvataggio o di annullamento dobbiamo scomodare tutto il flusso del riconoscimento vocale (cloud compreso), l’applicazione diventerebbe inusabile. Per ovviare a questo problema, è stato introdotto il concetto di <strong>Speech Recognition Grammar</strong>. Grazie ad esso, abbiamo la possibilità di creare un set limitato di parole che verranno riconosciute localmente (quindi senza scomodare il cloud) e senza la necessità di utilizzare la UI. Lo scenario tipico è appunto quello di poter definire dei comandi o delle parole chiave per compiere action specifiche nella nostra applicazione.</p>
<p align="justify">Anche l’utilizzo delle custom grammar è molto semplice: innanzitutto definiamo e registriamo i nostri comandi in questo modo:</p>
<p align="justify"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="27-03-2013 16.52" alt="27-03-2013 16.52" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/03/27-03-2013-16.52.png" width="1698" height="234" border="0" /></p>
<p align="justify">Quando dobbiamo utilizzarli, sarà sufficiente usare l’oggetto  <strong>RecognizeAsync()</strong> che, come il <strong>RecognizeUIAsync</strong> visto in precedenza, restituirà il testo riconosciuto che poi potremmo gestire:</p>
<p align="justify"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="27-03-2013 16.53" alt="27-03-2013 16.53" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/03/27-03-2013-16.53.png" width="1694" height="196" border="0" /></p>
<p align="justify">Ora che abbiamo tutti gli elementi, non ci resta che impostare il vero e proprio “in app dialog”, che vedremo nel prossimo post.</p>
<p align="justify">
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=UeoKQ8eY6E0:KqgBJWI9Fyk:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=UeoKQ8eY6E0:KqgBJWI9Fyk:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?i=UeoKQ8eY6E0:KqgBJWI9Fyk:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=UeoKQ8eY6E0:KqgBJWI9Fyk:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MighellsBlog/~4/UeoKQ8eY6E0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wpblog.michelelocuratolo.com/2013/03/27/wpdev-speech-api-il-riconoscimento-vocale/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://wpblog.michelelocuratolo.com/2013/03/27/wpdev-speech-api-il-riconoscimento-vocale/</feedburner:origLink></item>
		<item>
		<title>[#wpdev] Speech API: Text to Speech</title>
		<link>http://feedproxy.google.com/~r/MighellsBlog/~3/EaoKSopYEls/</link>
		<comments>http://wpblog.michelelocuratolo.com/2013/03/11/wpdev-speech-api-text-to-speech/#comments</comments>
		<pubDate>Mon, 11 Mar 2013 08:00:00 +0000</pubDate>
		<dc:creator>Mighell</dc:creator>
				<category><![CDATA[Windows Phone]]></category>
		<category><![CDATA[Speech]]></category>

		<guid isPermaLink="false">http://wpblog.michelelocuratolo.com/?p=1056</guid>
		<description><![CDATA[Nell’ultimo post, ci siamo lasciati con tutte le indicazioni per gestire correttamente il Voice Command. Siamo qundi in grado di aprire la nostra applicazione con un comando vocale, arrivare ad una pagina ben definita ed eventualmente ricevere dei parametri in ingresso. Ma per poter implementare uno degli scenari più interessanti su Windows Phone 8, l’In [...]]]></description>
				<content:encoded><![CDATA[<p align="justify">Nell’<a href="http://wpblog.michelelocuratolo.com/2013/03/04/wpdev-speech-api-gestione-del-voice-command/">ultimo post</a>, ci siamo lasciati con tutte le indicazioni per gestire correttamente il <strong>Voice Command</strong>. Siamo qundi in grado di aprire la nostra applicazione con un comando vocale, arrivare ad una pagina ben definita ed eventualmente ricevere dei parametri in ingresso.</p>
<p align="justify">Ma per poter implementare uno degli scenari più interessanti su Windows Phone 8, l’<strong>In App Dialog</strong>, ci manca una parte fondamentale: il <strong>text to speech</strong>.</p>
<p align="justify">In Windows Phone 8, la sintesi vocale è demandata all’oggetto <strong>SpeechSyntesizer</strong> e precisamente al metodo <strong>SpeakTextAsync</strong>.</p>
<p align="justify"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="09-03-2013 00.08" alt="09-03-2013 00.08" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/03/09-03-2013-00.08.png" width="1456" height="260" border="0" /></p>
<p align="justify">Il metodo <strong>SpeakTextAsync</strong> accetta in ingresso il testo da sistetizzare, ed il device provvederà a leggerlo. Di default, il sintetizzatore userà la lingua ed il tipo di voce selezionati nelle impostazioni del sistema operativo:</p>
<div align="center">
<table width="600" border="0" cellspacing="0" cellpadding="2" align="center">
<tbody>
<tr>
<td valign="top" width="300"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="wp_ss_20130309_0002" alt="wp_ss_20130309_0002" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/03/wp_ss_20130309_0002.png" width="403" height="669" border="0" /></td>
<td valign="top" width="300"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border-width: 0px;" title="wp_ss_20130309_0003" alt="wp_ss_20130309_0003" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/03/wp_ss_20130309_0003.png" width="403" height="669" border="0" /></td>
</tr>
</tbody>
</table>
</div>
<div align="center"></div>
<p align="justify"><img style="background-image: none; float: left; padding-top: 0px; padding-left: 0px; margin: 0px 24px 3px 51px; display: inline; padding-right: 0px; border-width: 0px;" title="09-03-2013 01.04" alt="09-03-2013 01.04" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/03/09-03-2013-01.04.png" width="210" height="180" align="left" border="0" />Se l’impostazione di default non è quella che vogliamo, possiamo comunque configurare il sintetizzatore, impostando genere e lingua via codice.</p>
<p align="justify">Resta inteso che, prima di effettuare queste operazioni, dobbiamo verificare che la lingua desiderata sia installata nel sistema.</p>
<p align="justify">Per farlo, sarà necessario interrogare l’oggetto <strong>Windows.Phone.Speech.Synthesis.VoiceInformation</strong> alla ricerca del tipo di voce di cui abbiamo bisogno.</p>
<p align="justify">La lettura del testo passato come stringa, come è facile immaginare, non avrà cadenze o inflessioni particolari. Il testò verrà letto in modo abbastanza “piatto”. Sebbene la voce sia abbastanza naturale e va benissimo nella maggior parte dei casi, ci sono scenari in cui più essere necessario impostare il sintetizzatore per dare enfasi particolari, pause, voci diverse etc. Ovviamente, in questi casi, una semplice stringa non è sufficiente a descrivere correttamente il modo in cui vogliamo che il nostro testo venga letto. Ad aiutarci, in questi casi, c’è lo <strong><a href="http://www.w3.org/TR/speech-synthesis/">Speech Synthesis Markup Language (SSML)</a></strong>. Usando un markup standardizzato, possiamo infatti passare al sintetizzatore non solo il testo da leggere ma anche il “modo” in cui il testo deve essere letto. Un elenco completo degli elementi utilizzabili è consultabile <strong><a href="http://msdn.microsoft.com/en-us/library/hh361578">qui</a></strong>.</p>
<p align="justify">Una volta “costruito” il nostro elemento vocale, dobbiamo passarlo al sintetizzatore in modo che possa essere letto dal dispositivo. Per farlo, abbiamo a disposizione 2 metodi:</p>
<ul>
<li>
<div align="justify"><strong>SpeakSsmlAsync</strong>: a qui passiamo il nostro xml</div>
</li>
<li>
<div align="justify"><strong>SpeakSsmlFromUriAsync</strong>: a cui passiamo il path del file da riprodurre.</div>
</li>
</ul>
<p align="justify">Ad esempio:</p>
<p align="justify"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="09-03-2013 11.04" alt="09-03-2013 11.04" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/03/09-03-2013-11.04.png" width="1026" height="172" border="0" /></p>
<p align="justify">Il primo caso, è utile soprattutto quando dobbiamo costruire a runtime il messaggio da far leggere al sintetizzatore. Il secondo invece, torna estremamente comodo per salvare tutte le frasi statiche che la nostra applicazione dovrà gestire.</p>
<p align="justify">Per scenari più complessi, lo SpeechSyntesizer, ci fornisce anche 2 eventi che possiamo gestire:</p>
<ul>
<li>
<div align="justify"><strong>SpeechStarted</strong>: viene sollevato quando il dispositivo inizia a sintetizzare il testo</div>
</li>
<li>
<div align="justify"><strong>BookmarkReached</strong>: è utilizzabile solo quando usiamo lo SpeakSsml e viene sollevato quando raggiungiamo <a href="http://msdn.microsoft.com/en-us/library/hh361584">l’elemento</a> &lt;mark&gt; nel nostro file.</div>
</li>
</ul>
<p align="justify">Sebbene alquanto semplice, l’implementazione del Text to Speech su Windows Phone ci permette di implementare scenari abbastanza evoluti e, come specificato all’inizio, è parte fondamentale dello scenario di In App Dialog.</p>
<p align="justify">Nel prossimo post vedremo il terzo pilastro fondamentale, ovvero il riconoscimento vocale e poi passeremo a mettere tutto insieme per realizzare un vero e proprio dialogo con la nostra applicazione.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=EaoKSopYEls:ky4YhS6fuMc:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=EaoKSopYEls:ky4YhS6fuMc:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?i=EaoKSopYEls:ky4YhS6fuMc:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=EaoKSopYEls:ky4YhS6fuMc:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MighellsBlog/~4/EaoKSopYEls" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wpblog.michelelocuratolo.com/2013/03/11/wpdev-speech-api-text-to-speech/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://wpblog.michelelocuratolo.com/2013/03/11/wpdev-speech-api-text-to-speech/</feedburner:origLink></item>
		<item>
		<title>[#wpdev] Speech API: Gestione del Voice Command</title>
		<link>http://feedproxy.google.com/~r/MighellsBlog/~3/qP6W8v8nfl0/</link>
		<comments>http://wpblog.michelelocuratolo.com/2013/03/04/wpdev-speech-api-gestione-del-voice-command/#comments</comments>
		<pubDate>Mon, 04 Mar 2013 07:00:00 +0000</pubDate>
		<dc:creator>Mighell</dc:creator>
				<category><![CDATA[Windows Phone]]></category>
		<category><![CDATA[Speech]]></category>

		<guid isPermaLink="false">http://wpblog.michelelocuratolo.com/?p=1039</guid>
		<description><![CDATA[Nel precedente post, ci siamo lasciati con il VoiceCommandDefinition file registrato nel nostro sistema. Adesso siamo finalmente pronti a ricevere i nostri comandi vocali tradotti nella nostra applicazione. Come abbiamo visto nel post relativo all’anatomia del file VCD, una volta che il nostro comando viene interpretato dal riconoscitore vocale integrato in Windows Phone, verrà aperta [...]]]></description>
				<content:encoded><![CDATA[<p align="justify">Nel <a href="http://wpblog.michelelocuratolo.com/2013/02/18/wpdev-speech-api-registrazione-del-file-vcd/">precedente post</a>, ci siamo lasciati con il <strong>VoiceCommandDefinition</strong> file registrato nel nostro sistema. Adesso siamo finalmente pronti a ricevere i nostri comandi vocali tradotti nella nostra applicazione.</p>
<p align="justify">Come abbiamo visto nel post relativo all’<a href="http://wpblog.michelelocuratolo.com/?p=979">anatomia del file VCD</a>, una volta che il nostro comando viene interpretato dal riconoscitore vocale integrato in Windows Phone, verrà aperta la pagina specificata nel nodo “<strong>Navigate</strong>” accodando in querystring gli eventuali parametri riconosciuti</p>
<p align="justify"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="30-01-2013 21.43" alt="30-01-2013 21.43" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/03/30-01-2013-21.43.png" width="1698" height="488" border="0" /></p>
<p align="justify">A questo punto, appare evidente che, la gestione del comando vocale da parte nostra, è soggetta alle stesse regole della gestione di una <span style="text-decoration: underline;">normale navigazione tra le pagine</span> della nostra applicazione. In funzione del comando ricevuto, andiamo a recuperare dalla querystring gli eventuali parametri ed eseguiamo il nostro codice.</p>
<p align="justify">Questa modalità di gestione è decisamente molto furba: ci permette infatti di <strong>aggiungere i comandi</strong> alla nostra applicazione, <strong>senza dover stravolgere il normale flusso di navigazione</strong> della nostra applicazione. Prendiamo ad esempio una applicazione per la gestione delle nostre note: avremo sicuramente una pagina per aggiungere i nostri appunti ed una pagina di dettaglio che, recuperando l’identificativo della nota, ce ne mostrerà tutti i dettagli. Se volessimo aggiungere l’apertura tramite i comandi vocali, il flusso di navigazione resterebbe inalterato ed i nostri metodi già implementati sarebbero riutilizzabili anche per l’iterazione vocale.</p>
<p align="justify">Unica differenza è l’aggiunta di una ulteriore chiave alla querystring chiamata <strong>voiceCommandName.</strong></p>
<p align="justify">La sua presenza ha una duplice funzionalità:</p>
<ol>
<li>
<div align="justify">ci da evidenza dell’apertura della pagina attraverso i comandi vocali</div>
</li>
<li>
<div align="justify">contiene il comando che è stato inviato (specificato nel file VCD)</div>
</li>
</ol>
<p align="justify"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="03-03-2013 10.28" alt="03-03-2013 10.28" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/03/03-03-2013-10.28.png" width="1692" height="795" border="0" /></p>
<p align="justify">Come è evidenziato nell’immagine qui sopra, da parte nostra è sufficiente controllare la presenza della chiave <strong>voiceCommandName</strong> per discriminare l’arrivo in pagina attraverso un comando vocale e, se necessario, possiamo poi estrarre il comando e reagire di conseguenza.</p>
<p align="justify">Se abbiamo strutturato il nostro file VCD per interpretare anche dei parametri, troveremo anche essi nella nostra querystring con la stessa chiave specificata nel nostro file:</p>
<p align="justify"><img style="background-image: none; float: none; padding-top: 0px; padding-left: 0px; margin-left: auto; display: block; padding-right: 0px; margin-right: auto; border: 0px;" title="03-03-2013 11.07" alt="03-03-2013 11.07" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/03/03-03-2013-11.07.png" width="568" height="173" border="0" /></p>
<p align="justify">Recuperabili poi semplicemente con</p>
<p align="justify"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="03-03-2013 11.17" alt="03-03-2013 11.17" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/03/03-03-2013-11.17.png" width="1026" height="44" border="0" /></p>
<p align="justify">E’ importante differenziare l’arrivo da un comando vocale per modificare il comportamento della nostra applicazione e rendere l’esperienza utente conforme con il tipo di interazione richiesto. Ad esempio, se il comando richiesto è quello di aggiungere una nota, è evidente che la nostra applicazione dovrà comportarsi in modo diverso se stiamo usando i comandi vocali piuttosto che la normale interazione touch.</p>
<blockquote>
<p align="justify"><strong><em>Nel primo caso, ci si aspetta infatti che l’applicazione riceva il testo attraverso appunto la nostra voce (dettatura) mentre, nel secondo, la nota andrà scritta usando la tastiera.</em></strong></p>
</blockquote>
<p align="justify">Ho evidenziato questo punto in quanto lo ritengo decisamente importante (e non scontato) ai fini dello sviluppo di una buona applicazione che faccia uso dei comandi vocali. Fermo restando che la <strong>logica implementativa della vostra applicazione deve restare invariata</strong> (per non impazzire), l’esperienza utente <strong>deve essere differenziata</strong>. Il nostro codice per salvare, recuperare, modificare etc,, non va assolutamente modificato (se avete fatto un buon lavoro di progettazione, sarà sufficientemente astratto per per non doverlo riscrivere), ma prestate attenzione al tipo di interazione:</p>
<blockquote>
<p align="justify"><em><strong>in nessun caso, se il tipo di interazione è vocale, deve essere chiesto all’utente di premere qualche controllo per completare la sua interazione, fatta eccezione per i problemi di interpretazione dei comandi. In questo caso, onde evitare di perdere il lavoro svolto dall’utente, può essere necessario passare all’interazione manuale. </strong></em></p>
</blockquote>
<p align="justify">Il riconoscimento vocale infatti, per sua natura, è soggetto a possibili errori di interpretazione. Basta infatti un rumore di fondo per renderlo poco preciso. Sebbene si possa gestire il livello di confidence (lo vedremo più avanti), non è detto che ci si trovi nelle condizioni ambientali adatte per questo tipo di interazione. Qualora si verificassero queste condizioni durante una interazione vocale già iniziata (siamo nel traffico, stiamo dettando una nota e passa un mezzo di soccorso a sirene accese), è buona norma gestire questa condizione e permettere agli utenti di passare ai comandi manuali.</p>
<p align="justify">A questo punto, la nostra applicazione con interazione vocale inizia a prendere forma. Abbiamo definito i comandi con cui “arrivare” nelle pagine della nostra applicazione, li abbiamo registrati sul nostro sistema ed abbiamo capito come gestirli all’interno della nostra applicazione. Queste sono le basi per impostare quello che viene definito “in app dialog”, ovvero la possibilità di interagire vocalmente con la nostra applicazione in modo bidirezionale.</p>
<p align="justify">Nel prossimo post, vedremo come “far parlare” la nostra applicazione per poi tornare al riconoscimento vocale ed instaurare un vero e proprio dialogo con l’app.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=qP6W8v8nfl0:CZeBq0cP4b0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=qP6W8v8nfl0:CZeBq0cP4b0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?i=qP6W8v8nfl0:CZeBq0cP4b0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=qP6W8v8nfl0:CZeBq0cP4b0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MighellsBlog/~4/qP6W8v8nfl0" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wpblog.michelelocuratolo.com/2013/03/04/wpdev-speech-api-gestione-del-voice-command/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://wpblog.michelelocuratolo.com/2013/03/04/wpdev-speech-api-gestione-del-voice-command/</feedburner:origLink></item>
		<item>
		<title>[#wpdev] Speech Api series</title>
		<link>http://feedproxy.google.com/~r/MighellsBlog/~3/eNVWhO3N7SQ/</link>
		<comments>http://wpblog.michelelocuratolo.com/2013/03/03/wpdev-speech-api-series/#comments</comments>
		<pubDate>Sun, 03 Mar 2013 10:57:18 +0000</pubDate>
		<dc:creator>Mighell</dc:creator>
				<category><![CDATA[Articoli e pubblicazioni]]></category>
		<category><![CDATA[Windows Phone]]></category>

		<guid isPermaLink="false">http://wpblog.michelelocuratolo.com/?p=1050</guid>
		<description><![CDATA[Per chi stà seguendo la serie di post sulle Speech API, e per chi mi ha chiesto info sulle pubblicazioni, vi informo che la serie riprende da domani (lunedì 4 Marzo). Il post della scorsa settimana ha saltato la schedulazione in quanto ero molto preso dalla preparazione del materiale per i Community Days. Vi ricordo [...]]]></description>
				<content:encoded><![CDATA[<p align="justify">Per chi stà seguendo la serie di post sulle Speech API, e per chi mi ha chiesto info sulle pubblicazioni, vi informo che la serie riprende da domani (lunedì 4 Marzo). Il post della scorsa settimana ha saltato la schedulazione in quanto ero molto preso dalla preparazione del materiale per i Community Days. </p>
<p align="justify">Vi ricordo che <a href="http://wpblog.michelelocuratolo.com/speech-api-in-windows-phone-8-2/">su questa pagina</a> trovate l’index dei vari post in lavorazione con la relativa programmazione. </p>
<p align="justify">Colgo l’occasione per chiedervi una cosa: attualmente gli articoli sono schedulati con cadenza settimanale. Secondo voi, 7 giorni sono troppi o troppo pochi?</p>
<p align="justify">Per rispondere potete usare i commenti o usare il form di <a href="http://wpblog.michelelocuratolo.com/contact/">contatto</a>.</p>
<p align="justify">Grazie <img class="wlEmoticon wlEmoticon-smile" style="border-top-style: none; border-left-style: none; border-bottom-style: none; border-right-style: none" alt="Smile" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/03/wlEmoticon-smile.png"></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=eNVWhO3N7SQ:Jj_IUWqo6r0:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=eNVWhO3N7SQ:Jj_IUWqo6r0:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?i=eNVWhO3N7SQ:Jj_IUWqo6r0:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=eNVWhO3N7SQ:Jj_IUWqo6r0:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MighellsBlog/~4/eNVWhO3N7SQ" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wpblog.michelelocuratolo.com/2013/03/03/wpdev-speech-api-series/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://wpblog.michelelocuratolo.com/2013/03/03/wpdev-speech-api-series/</feedburner:origLink></item>
		<item>
		<title>[#cdays13] Slide &amp; Demo</title>
		<link>http://feedproxy.google.com/~r/MighellsBlog/~3/Do7tU1GPLU8/</link>
		<comments>http://wpblog.michelelocuratolo.com/2013/03/01/cdays13-slide-demo/#comments</comments>
		<pubDate>Fri, 01 Mar 2013 10:54:22 +0000</pubDate>
		<dc:creator>Mighell</dc:creator>
				<category><![CDATA[Windows Phone]]></category>
		<category><![CDATA[Bluetooth]]></category>
		<category><![CDATA[NFC]]></category>
		<category><![CDATA[Speech]]></category>

		<guid isPermaLink="false">http://wpblog.michelelocuratolo.com/?p=1032</guid>
		<description><![CDATA[2 giorni fa ho avuto l’onore ed il piacere di partecipare ai Community Days 2013 con una sessione su NFC e Bluetooth. Durante la sessione, ho mostrato (al netto dei problemi con la webcam ), come utilizzare NFC e Bluetooth in scenari di comunicazione App to App e App to Device. Se siete interessati, le [...]]]></description>
				<content:encoded><![CDATA[<p>2 giorni fa ho avuto l’onore ed il piacere di partecipare ai Community Days 2013 con una sessione su NFC e Bluetooth. Durante la sessione, ho mostrato (al netto dei problemi con la webcam <img class="wlEmoticon wlEmoticon-smilewithtongueout" style="border-style: none;" alt="Smile with tongue out" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/03/wlEmoticon-smilewithtongueout.png" /> ), come utilizzare NFC e Bluetooth in scenari di comunicazione App to App e App to Device.</p>
<p>Se siete interessati, le slide e demo sono disponibili <a href="http://www.communitydays.it/events/communitydays-2013/wp801/"><strong>qui</strong></a>.</p>
<p>Il codice è abbastanza commentato ma, se avete domande, dubbi o perplessità, non esitate a <a href="http://wpblog.michelelocuratolo.com/contact/">contattarmi</a> qui o su <a href="https://twitter.com/Mighell">twitter</a>!</p>
<p>Visto il poco tempo a disposizione (20 minuti sono saltati a causa di problemi con il video), non sono riuscito ad approfondire alcuni aspetti. Cercherò di farlo prossimamente su questo blog.</p>
<p>Colgo l’occasione per ringraziare tutti i partecipanti!</p>
<p>Alla prossima!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=Do7tU1GPLU8:gvGJQMM1_uI:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=Do7tU1GPLU8:gvGJQMM1_uI:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?i=Do7tU1GPLU8:gvGJQMM1_uI:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=Do7tU1GPLU8:gvGJQMM1_uI:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MighellsBlog/~4/Do7tU1GPLU8" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wpblog.michelelocuratolo.com/2013/03/01/cdays13-slide-demo/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://wpblog.michelelocuratolo.com/2013/03/01/cdays13-slide-demo/</feedburner:origLink></item>
		<item>
		<title>[#wpdev] Microsoft Media Platform – Player Framework</title>
		<link>http://feedproxy.google.com/~r/MighellsBlog/~3/q8ze9kdbxks/</link>
		<comments>http://wpblog.michelelocuratolo.com/2013/02/20/wpdev-microsoft-media-platform-player-framework/#comments</comments>
		<pubDate>Wed, 20 Feb 2013 22:03:58 +0000</pubDate>
		<dc:creator>Mighell</dc:creator>
				<category><![CDATA[Windows Phone]]></category>
		<category><![CDATA[media]]></category>
		<category><![CDATA[video]]></category>

		<guid isPermaLink="false">http://wpblog.michelelocuratolo.com/?p=1025</guid>
		<description><![CDATA[Se sviluppate applicazioni per WIndows 8 e Windows Phone 8 che fanno uso di video, provate il Player Framework for Windows 8 and Windows Phone 8. The Player Framework is an open source video player available for Silverlight, HTML5, and Xbox, as well as Windows 8 apps and Windows Phone apps. It allows you to [...]]]></description>
				<content:encoded><![CDATA[<p>Se sviluppate applicazioni per WIndows 8 e Windows Phone 8 che fanno uso di video, provate il <a href="http://playerframework.codeplex.com/">Player Framework for Windows 8 and Windows Phone 8</a>.</p>
<blockquote><p>The Player Framework is an open source video player available for Silverlight, HTML5, and Xbox, as well as Windows 8 apps and Windows Phone apps. It allows you to play both <a href="http://en.wikipedia.org/wiki/Progressive_download">progressive download</a> videos and <a href="http://www.iis.net/downloads/microsoft/smooth-streaming">Smooth Streaming</a> videos.</p>
<p><a href="http://blogs.windows.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-53-84-metablogapi/image_5F00_7CC206FE.png"><img title="image" alt="image" src="http://blogs.windows.com/cfs-file.ashx/__key/communityserver-blogs-components-weblogfiles/00-00-00-53-84-metablogapi/image_5F00_thumb_5F00_094FB41B.png" width="432" height="240" border="0" /></a></p></blockquote>
<blockquote>
<h5>Download the Player Framework</h5>
<p><a href="http://playerframework.codeplex.com/releases/view/97645">http://playerframework.codeplex.com/releases/view/97645</a><img alt="" src="http://blogs.windows.com/aggbug.aspx?PostID=588019&amp;AppID=5384&amp;AppType=Weblog&amp;ContentType=0" width="1" height="1" /></p></blockquote>
<p>Fonte: <a href="http://blogs.windows.com/windows_phone/b/wpdev/archive/2013/02/20/microsoft-media-platform-player-framework.aspx">Microsoft Media Platform &#8211; Player Framework</a></p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=q8ze9kdbxks:iP6K725i1Ik:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=q8ze9kdbxks:iP6K725i1Ik:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?i=q8ze9kdbxks:iP6K725i1Ik:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=q8ze9kdbxks:iP6K725i1Ik:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MighellsBlog/~4/q8ze9kdbxks" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wpblog.michelelocuratolo.com/2013/02/20/wpdev-microsoft-media-platform-player-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://wpblog.michelelocuratolo.com/2013/02/20/wpdev-microsoft-media-platform-player-framework/</feedburner:origLink></item>
		<item>
		<title>[#wpdev] Speech API: registrazione del file VCD</title>
		<link>http://feedproxy.google.com/~r/MighellsBlog/~3/o_0-GuJTFUI/</link>
		<comments>http://wpblog.michelelocuratolo.com/2013/02/18/wpdev-speech-api-registrazione-del-file-vcd/#comments</comments>
		<pubDate>Mon, 18 Feb 2013 08:30:00 +0000</pubDate>
		<dc:creator>Mighell</dc:creator>
				<category><![CDATA[Windows Phone]]></category>
		<category><![CDATA[Speech]]></category>

		<guid isPermaLink="false">http://wpblog.michelelocuratolo.com/?p=1000</guid>
		<description><![CDATA[Nel precedente post, abbiamo analizzato tutti gli aspetti relativi all’importante VoiceCommandDefinition file. In questo post, vedremo come registrare il file appena creato nel sistema operativo, per poter utilizzare i comandi vocali. L’operazione, di per se, è molto semplice: si tratta di una sola riga di codice: E’ sufficiente chiamare il metodo InstallCommandSetFromFileAsync dell’oggetto VoiceCommandService per [...]]]></description>
				<content:encoded><![CDATA[<p align="justify">Nel <a href="http://wpblog.michelelocuratolo.com/?p=979">precedente post</a>, abbiamo analizzato tutti gli aspetti relativi all’importante <strong>VoiceCommandDefinition</strong> file. In questo post, vedremo come registrare il file appena creato nel sistema operativo, per poter utilizzare i comandi vocali.</p>
<p>L’operazione, di per se, è molto semplice: si tratta di una sola riga di codice:</p>
<p><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="08-02-2013 20.24" alt="08-02-2013 20.24" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/02/08-02-2013-20.24.png" width="774" height="37" border="0" /></p>
<p align="justify">E’ sufficiente chiamare il metodo <strong>InstallCommandSetFromFileAsync</strong> dell’oggetto <strong>VoiceCommandService</strong> per effettuare la registrazione. Sebbene sia sufficiente eseguire questo metodo solo una volta, questo approccio è sconsigliabile per un semplice motivo: backup/restore del device.</p>
<p align="justify">In caso di restore infatti, il file non risulterà registrato e non saranno utilizzabili i comandi vocali. Per risolvere questa problematica, l’approccio consigliato è quello di registrare il file ad ogni avvio dell’applicazione inserendo la chiamata nel metodo <strong>Application_Launching</strong> del file App.Xaml.cs.</p>
<p align="justify"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="08-02-2013 20.33" alt="08-02-2013 20.33" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/02/08-02-2013-20.33.png" width="1472" height="178" border="0" /></p>
<p align="justify">Un approccio più evoluto potrebbe inoltre essere quello di memorizzare, in un setting, l’avvenuta registrazione.</p>
<p align="justify">E’ inoltre buona norma inserire la registrazione del file VCD all’interno di un blocco Try/Catch in quanto potrebbero verificarsi problemi in fase di registrazione. Il problemi più comuni sono 2 (entrambi già individuabili in fase di debug). Il primo, in cui in genere si incappa la prima volta, è un errore di tipo <strong>UnauthorizedAccessException</strong>. Accade perchè, per il corretto funzionamento del riconoscimento vocale, dobbiamo impostare 2 capability specifiche:</p>
<ul>
<li>
<div align="justify">ID_CAP_MICROPHONE</div>
</li>
<li>
<div align="justify">ID_CAP_SPEECH_RECOGNITION</div>
</li>
</ul>
<p align="justify">Il secondo problema “comune” è l’utilizzo, come <strong>CommandPrefix</strong>, di una <strong>parola riservata</strong>. Il CommandPrefix, come abbiamo visto <a href="http://wpblog.michelelocuratolo.com/?p=979">qui</a>, serve a definire il nome “pronunciabile” della nostra applicazione. Ma, come sappiamo, esistono una serie di comandi nativi come “chiama”, “apri”, “cerca” etc. Se usassimo uno di questi nomi, otterremo una eccezione di tipo <strong>System.Execption</strong> su <strong>System.Collections.ListDictionaryInternal</strong> .</p>
<p align="justify">Nel blocco try/catch, è comunque buona norma prevedere un sistema di logging ed invio degli errori (questo vale in generale, e non solo per la registrazione del file VCD).</p>
<p align="justify">Una volta registrato il file, i nostri comandi saranno disponibili all’interno del sistema di riconoscimento vocale di Windows Phone 8 (tenendo premuto il pulsante start)</p>
<p><a href="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/02/screen_002.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="screen_002" alt="screen_002" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/02/screen_002_thumb.png" width="148" height="244" border="0" /></a><a href="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/02/screen_003.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="screen_003" alt="screen_003" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/02/screen_003_thumb.png" width="148" height="244" border="0" /></a><a href="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/02/screen_006.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border: 0px;" title="screen_006" alt="screen_006" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/02/screen_006_thumb.png" width="148" height="244" border="0" /></a><a href="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/02/screen_004.png"><img style="background-image: none; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px; border: 0px;" title="screen_004" alt="screen_004" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/02/screen_004_thumb.png" width="148" height="244" border="0" /></a></p>
<p>Come è possibile vedere nelle immagini, le informazioni e gli esempi sono esattamente quelli che avevamo definito nel nostro file VCD.</p>
<p>Nel prossimo post, vedremo come gestire l’arrivo dei comandi vocali nella nostra applicazione.</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=o_0-GuJTFUI:2RXLrpDmMJo:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=o_0-GuJTFUI:2RXLrpDmMJo:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?i=o_0-GuJTFUI:2RXLrpDmMJo:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=o_0-GuJTFUI:2RXLrpDmMJo:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MighellsBlog/~4/o_0-GuJTFUI" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wpblog.michelelocuratolo.com/2013/02/18/wpdev-speech-api-registrazione-del-file-vcd/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://wpblog.michelelocuratolo.com/2013/02/18/wpdev-speech-api-registrazione-del-file-vcd/</feedburner:origLink></item>
		<item>
		<title>[#wpdev] SandCastle e Windows Phone</title>
		<link>http://feedproxy.google.com/~r/MighellsBlog/~3/aF7Z526rC2g/</link>
		<comments>http://wpblog.michelelocuratolo.com/2013/02/15/wpdev-sandcastle-e-windows-phone/#comments</comments>
		<pubDate>Fri, 15 Feb 2013 08:00:00 +0000</pubDate>
		<dc:creator>Mighell</dc:creator>
				<category><![CDATA[Windows Phone]]></category>
		<category><![CDATA[Documentation]]></category>
		<category><![CDATA[Sandcastle]]></category>

		<guid isPermaLink="false">http://wpblog.michelelocuratolo.com/?p=1023</guid>
		<description><![CDATA[Se avete la necessità di creare la documentazione per i vostri progetti, uno degli strumenti più comodi è sicuramente Sandcastle. Questo strumento (gratuito), ci permette di creare documentazione MSDN-Like del nostro codice basandosi sui commenti che scriviamo nel nostro codice. Se provate però a farlo su un progetto Windows Phone, potreste imbattervi in una serie [...]]]></description>
				<content:encoded><![CDATA[<p align="justify"><a href="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/02/Windows-Phone-8-big-logo1.png"><img style="background-image: none; float: right; padding-top: 0px; padding-left: 0px; margin: 0px 0px 5px 5px; display: inline; padding-right: 0px; border: 0px;" title="Windows-Phone-8-big-logo" alt="Windows-Phone-8-big-logo" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/02/Windows-Phone-8-big-logo_thumb1.png" width="240" height="78" align="right" border="0" /></a>Se avete la necessità di creare la documentazione per i vostri progetti, uno degli strumenti più comodi è sicuramente <a href="http://shfb.codeplex.com/" target="_blank">Sandcastle</a>. Questo strumento (gratuito), ci permette di creare documentazione MSDN-Like del nostro codice basandosi sui commenti che scriviamo nel nostro codice. Se provate però a farlo su un progetto Windows Phone, potreste imbattervi in una serie di errori di tipo <strong>Unresolved assembly reference</strong>. Il modo più semplice per ovviare a questo problema è quello di copiare gli assembly mancanti da <strong>C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone </strong>alla cartella in cui si trova l’assembly da documentare (in genere la bin/debug o release).</p>
<p align="justify">Ovviamente non copiate tutto <img class="wlEmoticon wlEmoticon-smile" style="border-style: none;" alt="Smile" src="http://wpblog.michelelocuratolo.com/wp-content/uploads/2013/02/wlEmoticon-smile.png" /> ma solo gli assembly mancanti al fine di compilare la vostra documentazione!</p>
<div class="feedflare">
<a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=aF7Z526rC2g:zHwC2gLNLT8:yIl2AUoC8zA"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=yIl2AUoC8zA" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=aF7Z526rC2g:zHwC2gLNLT8:V_sGLiPBpWU"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?i=aF7Z526rC2g:zHwC2gLNLT8:V_sGLiPBpWU" border="0"></img></a> <a href="http://feeds.feedburner.com/~ff/MighellsBlog?a=aF7Z526rC2g:zHwC2gLNLT8:qj6IDK7rITs"><img src="http://feeds.feedburner.com/~ff/MighellsBlog?d=qj6IDK7rITs" border="0"></img></a>
</div><img src="http://feeds.feedburner.com/~r/MighellsBlog/~4/aF7Z526rC2g" height="1" width="1"/>]]></content:encoded>
			<wfw:commentRss>http://wpblog.michelelocuratolo.com/2013/02/15/wpdev-sandcastle-e-windows-phone/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://wpblog.michelelocuratolo.com/2013/02/15/wpdev-sandcastle-e-windows-phone/</feedburner:origLink></item>
	</channel>
</rss>
