Le Post de MCNEXT

Les articles des consultants de MCNEXT

Bienvenue sur le Post de MCNEXT !

conferences_microsoft_usa_700 Les consultants de MCNEXT participent chaque année aux grandes conférences Microsoft aux USA. Retrouvez sur ce blog leurs notes : Frédéric et Sébastien au Pass Business analytics 2015, Guillaume et Benoit à la Build 2015 et Adrien et Stéphane au Microsoft Ignite 2015 (Lien à venir).
A propos de ce blog :
Retrouvez ici les posts des consultants du groupe MCNEXT (déjà plus de 500 !)
Vous voulez en savoir plus sur MCNEXT ou vous souhaitez nous rejoindre ?
Consultez notre site corporate.
Vous pouvez aussi nous suivre sur twitter: @LE_FIL_MCNEXT et regardez nos videos sur notre chaîne YouTube McnextTV !

Déploiement d’un projet VSTO multi-users avec Wix Toolset

Problématique :

Imaginons un client X qui souhaite ajouter de nouvelles fonctionnalités à son instance de Microsoft Office (Outlook, Word, Excel ou même PowerPoint).

Pour ce faire nous lui proposerons de lui développer un composant VSTO qu’il installera sur son environnement.

Cependant monsieur X souhaites que sur une machine où est installé l’add-in, tous les autres utilisateurs qui peuvent se connecter dessus puissent y avoir accès sans avoir à réinstaller à chaque fois le composant. Lire la suite

Nouveautés de SQL Server 2016 et POWER BI

Nouveautés de SQL Server 2016

Stretch Database.

Stretch Database permet d’archiver les tables contenant des données historiques. Par exemple une table des commandes (Order) contient des données récentes et des données plus anciennes. L’idée est de conserver les commandes récentes dans la base locale et d’archiver les commandes plus anciennes dans Azure et ce de manière totalement transparente. SQL Server se débrouille pour déplacer les données automatiquement et charger les données de la base locale et distante de manière transparente. Stretch Database migre l’intégralité de la table vers Azure. Lire la suite

Tutoriel Mobile Report Publisher

Présentation
SQL Server Mobile Report Publisher est une application Desktop qui a pour but de créer et publier des rapports adaptables à la plupart des supports mobiles. SQL Server Mobile Report Publisher est disponible en téléchargement. Lire la suite

Power BI Desktop – dealing with time intelligence

As you know or not, in Power BI Desktop, you can’t mark a table as a ‘date table’ like in Excel Power Pivot. So how could you properly deal with time intelligence functions ? Lire la suite

SQL Server – les columnstore index à la rescousse de la BI

Petit retour d’expérience sur l’usage des CCSI (Clustered Column Store Index) avec SQL Server 2014.

Avec un de nos clients, nous avons fait quelques bench sur le sujet. Sur une architecture équivalente, nous avons mis en place un index columnstore sur une table de fait contenant plus de 300 millions d’enregistrements. Malgré me dires et ceux de Microsoft, mes interlocuteurs étaient très sceptiques tout en fondant de grands espoirs. Lire la suite

SQL Server 2016 SSRS et les rapport Hybrid

Bonjour,

Suite à notre session au JSS en date  01/12/2015 avec Mohamed Ismail BEN LAMINE @Sam_Tun ou nous avons présentés les nouveautés SSIS et SSRS SQL 2016, je vais vous exposer une partie intéressante : SSRS et les rapports hybrid.

Pour info vous pouvez consulter la vidéo de notre session ici :

Depuis l’arrivée de la CTP 3.0 de SQL Server 2016 il y a possibilité de publié des parties de Rapport SSRS dans Power BI « On Premise ».

Aujourd’hui nous allons voir comment réaliser cette opération :

Se connecter au SQL Server Reporting Services Configuration manager :

1

Se connecter à l’instance Reporting services :

2

Se rendre dans le nouvel onglet : Power BI Integration

3

S’enregistrer :

4

Vérifier l’enregistrement :

5

Redémarrer le service SSRS une fois l’enregistrement effectué sinon le « pin » du rapport sera impossible :

6

7

8

Se rendre au niveau du serveur de rapport :

9

Cliquer sur le bouton My setting et s’enregistrer sur le serveur de rapport :

10

Ouvrir un rapport pour effectuer le « pin » : sélectionner l’élément à mettre a disposition sur Power BI ( Attention tous les éléments ne peuvent pas être mis a disposition sur Power BI )

11

Une fois l’élément sélectionné choisissez la fréquence de rafraîchissement et le rapport dans lequel vous souhaitez l’intégrer :

17

12

Une fois la mise a disposition de l’élément sur Power BI réalisé.

L’écran suivant s’affiche :

13

Attention : Au moment ou j’écris cet article, le multi langue n’est pas correctement supporté et des bug d’affichage peuvent subsister pour éviter cela il est préférable de mettre tout vos paramètres régionaux dans la langue de Shakespeare.

Un peu d’aide à ce propos : http://windows.microsoft.com/fr-fr/windows/change-system-locale#1TC=windows-7

Une fois cette étape réalisé vous pouvez vous rendre sur le site Power BI pour vérifier le bon « pin » de votre partie de rapport sur le site « On Premise »  :

https://powerbi.microsoft.com/en-us/?WT.srch=1&WT.mc_ID=SEM_TUTXQCC8

14

Il faut savoir que pour pouvoir réaliser cette opération l’agent SQL Server doit être activé pour la raison suivante :

A chaque élément ajouté, une tache est créé permettant d’aller rafraichir les données dans power BI voici un exemple de jobs créé lors de cette opération et que l’on retrouve dans l’agent :

15

 

Le défaut c’est que le nom ne correspond pas clairement à une tache. De plus, après suppression d’un élément dans Power BI la tache n’est pas supprimé automatiquement.

Vous en conviendrez qu’il est difficile de faire du ménage dans ces conditions !  Il y a de quoi faire perdre ses cheveux à un administrateur de bases de données !

Pour votre parfaite information voici à quoi ressemble le script de mise a jour d’un élément :

16

Celui ci va lancer le rafraichissement de la partie de rapport définie lors d’un créneau horaire spécifique.

Conclusion :

Nous sommes dans un système en cours d’élaboration avec quelques limites  mais qui semble intéressant d’utiliser, il ne vous reste plus qu’a essayer :-)

Je tiens à remercier mes confrères: Mohamed Ismail BEN LAMINE et Frédéric Brossard pour l’aide qu’ils m’ont apportés lors de la réalisation de cette session et de cet article.

Pour aller un peu plus loin :

Julien PIERRE

Consultant MSBI

#SQL Server 2016 | nouveautés POWER BI | CTP 3.0 | nouveautés SSRS

 

 

Introduction aux commposants SSIS inclus dans le Azure Feature Pack SQL Server 2016

Bonjour,

Suite à notre session au JSS en date  01/12/2015 avec Mohamed Ismail BEN LAMINE @Sam_Tun ou nous avons présentés les nouveautés SSIS et SSRS SQL 2016, je vais vous exposer une partie intéressante : Introduction aux commposants SSIS inclus dans le Azure Feature Pack SQL Server 2016

Pour information la vidéo de notre session est disponible ici :

Dans ce tutoriel nous allons voir 2 parties intéressantes :

Partie 1 : Introduction a Azure avec la création du Blob nécessaire pour l’utilisation des composants SSIS

Partie 2 : Utilisation des composants inclus dans le Azure Feature Pack

Point 1 : Créer un blob de stockage sur Azure :

On va ajouter un blob : pour cela : suivre les étapes suivantes :

  • Se rendre dans New:
    • Data + Storage
    • Storage Account
    • Affecter un nom de stockage et un lieu de stockage

1

2

Une fois le blob de stockage créer on doit arriver sur cet écran :

3

Vérification des blobs existants

4

Génération d’une clé de cryptage pour la connexion à Azure :

5

Notre premier point est réalisé. Maintenant nous allons nous connecter à ce blob Azure via SSIS et importer / exporter des données vers et depuis ce blob.

Pré requis nécessaires pour la suite :

Si vous souhaitez réaliser les mêmes opérations vous avez besoins d’installer le azure Feature pack et une base de donnée type contoso ou AdventureWorks :

https://www.microsoft.com/en-us/download/details.aspx?id=49492

https://www.microsoft.com/en-us/download/details.aspx?id=49502

Voici le scénario préparé  :

  1. Récupération des données a partir d’une source de données local que l’on va stocker dans un fichier plat localement (fichier local d’un magasin)
  2. Envoi des fichiers dans le Blob Azure
  3. Suppression des fichiers locaux
  4. Téléchargement des fichiers situés dans le blob Azure pour les mettre en local
  5. Réalisation d’un lookup pour mettre à jour la base de données centrale avec les données du magasin depuis Azure

Voici l’issue du package :

6

Création d’un container:

7

Création du dataflow Task pour récupérer les données du magasin pour les mettre dans un fichier plat :

8

 

9

Création d’une connexion vers Azure pour nous connecter à notre Blob

21

10

Upload des fichiers créés :

22

11

Suppression des fichiers crées :

23

12

Téléchargement des fichiers depuis Azure :

24

13

Création du lookup permettant de mettre à jour les données du site centrale a partir des données du magasin.

14

Connexion à notre source Azure :

25

15

Transformation des données :

26

16

Requête permettant de connaitre les clés des clients :

17

Mapping :

18

Redirection des lignes correspondantes et création d’un fichier d’interface issu du siège pour intégration et mis à disposition de tout le monde sur Azure :

27

19

Redirection des lignes en erreurs et création d’un fichier d’erreurs

20

Conclusion :

Voici un bon scénario pour vous initier au Azure Feature pack et à l’utilisation d’Azure …

A vous de jouer :-)

Pour aller un peu plus loin :

Je tiens à remercier mes confrères: Mohamed Ismail BEN LAMINE et Frédéric Brossard pour l’aide qu’ils m’ont apportés lors de la réalisation de cette session et de cet article.

Julien PIERRE

Consultant MSBI

 

How to use Vorlon.js desktop

Vorlon.js is now available as a desktop version for Windows and Mac OSX. You could dowload them on Vorlon.js website and get started using Vorlon in a few seconds.

If you want to know more about Vorlon, check out this getting started video. There are also some great articles about using Vorlon.js. In this post, we will focus on the desktop version and its UI.

Vorlon desktop helps you use Vorlon to debug your website without setup  pre-requisites, and help you start and configure your environment very easily.

screen.PNG

On the left side, you have a menu bar.

menu

It gives you access to Vorlon’s logs, settings, and the about page with usefull info and links.

The default settings will probably fit your needs, but you could change it with the dedicated screen. It might be usefull, especially if you need to change ports (if you want to run it side by side with the server version of Vorlon for example).

config

To start debugging your website using Vorlon.js, just add this script to your website or application (it’s so usefull for cordova applications !):

<script src="http://MCNTAB011:1337/vorlon.js"></script>

Vorlon has a session mecanism to differenciate client web sites and applications. If you want to define a session, you just have to specify it in the url like this :

<script src="http://MCNTAB011:1337/vorlon.js/mysession"></script>

When using the desktop application, it’s likely that you will stick to the home screen. From there, you could see if Vorlon server is running, and start or stop it easily (Vorlon server will start automatically when you launch the application).

vorlon status

The desktop version also helps you manage your sessions, and configure Vorlon plugins for each session. The home page displays the list of connected and configured sessions. You could add and configure a session even if no client is connected.

sessions.PNG

The green dot indicate that the session is in use. The empty dot means that there is no client connected.

session options.PNG

For each session, you could see the number of connected clients, and open the Dashboard for that session.

dashboard.PNG

The last button helps you configure your session. You could choose if the client must receive socket.io (if your website already use socket.io, turning this off may helps), and turn each plugin on or off.

session config.PNG

We really hope you will enjoy the desktop version. It’s a great way to get started using Vorlon.js. We welcome any feedback so feel free to join us on github to log your feedback or any issue you may have.

 

Bringing Vorlon.js to the desktop

Setting up Vorlon.js is really simple. You just have to clone the github repository and run 2 simple shell commands :
npm install
npm start
If you are familiar with git and node.js it really is a very easy and usual way to setup a web tool. If it sounds like a foreign language to you, I sincerely invite you to dig a little to become familiar with this. But…
When you look away from the blog posts writers, you will find out that many developpers don’t know about git and node.js. Some call them « dark matter developpers ». For those people, « npm install » may feel scary, and will begin by an internet search with something like « what is npm ». As a contributor to Vorlon.js I really feel concerned about user adopting and trying Vorlon for their every day « web debugging in hostile environment », not just the up-to-date developpers.
What if we could simply wrap Vorlon into an executable ? just download, and run the executable and you’re good to go. Well, we have done it, and it’s cross platform. The Windows and Mac OSX are available right now on Vorlon.js website. The linux version is missing for now. To be honest it’s just because I don’t have a linux machine at hand, and could not find time for setting up a VM. If you are volunteering for building the linux version, please get in touch !

Making a cross platform desktop app with web technologies

Vorlon.js is written with Node.js, and rewriting it with another technology would have been unwise, and a pain to maintain. In the web world you have some tools to make desktop apps. The more advanced projects are NW.js (aka node webkit) and electron (aka atom shell). Both tools works by combining Chromium (Google Chrome open source engine) and node.js. Those tools have subtle differences I won’t detail here.

For Vorlon we choose electron because it’s more oriented on the node.js part, but nw.js would probably have been great.

Making this desktop version has been easier than I previously thought, and it was really fun. The hardest part was about learning more on node.js to spawn Vorlon.js server process. The rest was just a thin ui layer on top of configuration and displaying active sessions. We intentionnally choose to keep the session dashboard as it is in the web version.

How to build the desktop version

If you want to see for yourself how easy it is, you could get to the github repository and grab the sources. Sources for the application is in the « desktop » folder. You will have to run « npm install » in the root folder to build Vorlon server. After that, you must install the modules for the desktop application. We do not initialize them with other parts of Vorlon because electron is a little fat and will take some time to download. Go to the « desktop » folder and run « npm install » and « npm start » in that folder. You should now see the desktop app running.
All the vorlon team is really proud of this new addition, and we hope it will make it easier for you to try Vorlon and debug your web sites and applications. If you have troubles or any suggestion, feel free to log it on github.

Exploring Microsoft Speech APIs

This article introduces the speech APIs, one of the services updated in Windows 10 and powered by the project Oxford. This article is divided into several parts:


I.Speech APIs features 

These APIs provide two major features :

  • Speech Recognition : Speech To Text (STT)

It converts spoken audio to text. The APIs can recognize audio coming from the microphone in real-time, or from an audio file.

  • Speech Synthesizer : Text To Speech (TTS)

It converts text to spoken audio when applications need to talk back to their users.

Microsoft Speech Platform

 

The Speech APIs are included in Windows 10 libraries, and also provided by the project oxford services, which require an Azure subscription.

II. Project Oxford Speech APIs 

These APIs are in a beta version, they work by sending data to Microsoft servers in the cloud, to use them we must have an Azure account. They also offer the Intent Recognition feature which can convert spoken audio to intent.

To use these APIs, follow the steps below:

  1. Using an Azure account, go to the Market Place to purchase the speechAPIs Service (which is for free ;-) ), then retrieve the primary or secondary key. Just in case you are using the Azure DreamSpark subscription, don’t be surprised if you don’t find this service. Unfortunately this type of account does not give access to Oxford Services.
  2. Download the Speech SDK of project oxford from here! if you are targeting another platform rather than Windows, have a look here you will find what you are looking for.

 

  • Speech To Text (STT):

The oxford version of Speech APIs offers two choice to make the STT:

  1. REST API
  2. Client library

When using the REST API, we only get one recognition result back at the end of the session, but in the case of a client library, we also get partial result before getting the final recognition.

Setting up speech recognition begins with the Speech Recognition Service Factory. By using this factory, we can create an object which can make a recognition request to the Speech Recognition Service. This factory can create two types of objects:

  1. A Data Recognition Client : used for speech recognition with data (for example from an audio file). The data is broken up into buffers and each buffer is sent to the Speech Recognition Service.
  2. A Microphone Recognition Client : used for speech recognition from the microphone. The microphone is turned on, and data is sent to the Speech Recognition Service.

When creating a client from the factory, it can be configured in one of two modes:

  1. In ShortPhrase mode, an utterance may only be up to 15 seconds long, As data is sent to the server, the client will receive multiple partial results and one final multiple N-best choice result.
  2. In LongDictation mode, an utterance may only be up to 2 minutes long. As data is sent to the server, the client will receive multiple partial results and multiple final results.

Also the client can be configured for one of the following several languages:

  • American English: « en-us »
  • British English: « en-gb »
  • German: « de-de »
  • Spanish: « es-es »
  • French: « fr-fr »
  • Italian: « it-it »
  • Mandarin: « zh-cn »

Now, time to code :D you can implement the code below in a WPF app


string stt_primaryOrSecondaryKey = ConfigurationManager.AppSettings["primaryKey"];

// We have 2 choices : LongDictation or ShortPhrase
SpeechRecognitionMode stt_recoMode = SpeechRecognitionMode.LongDictation;

// For a Speech recognition from a Microphone
MicrophoneRecognitionClient stt_micClient = SpeechRecognitionServiceFactory.CreateMicrophoneClient(stt_recoMode, "fr-fr",
stt_primaryOrSecondaryKey);

// For a Speech recognition from a data like wav file
DataRecognitionClient stt_dataClient = SpeechRecognitionServiceFactory.CreateDataClient(stt_recoMode, "fr-fr",
stt_primaryOrSecondaryKey);

Then we must subscribe some events to get the result of the recognition. The Microphone Recognition Client & Data Recognition Client have the same Events as follow:

  • OnConversationError : Event fired when a conversation error occurs
  • OnIntent : Event fired when a Speech Recognition has finished, the recognized text has
    been parsed with LUIS for intent and entities, and the structured JSON result is available.
  • OnMicrophoneStatus : Event fired when the microphone recording status has changed.
  • OnPartialResponseReceived : Event fired when a partial response is received
  • OnResponseReceived : Event fired when a response is received

Inside the events, we can do whatever we want, displaying the result in a textBox for ex. and more…


// Event handlers for speech recognition results
sst_micClient.OnResponseReceived += OnResponseReceivedHandler;
sst_micClient.OnPartialResponseReceived += OnPartialResponseReceivedHandler;
sst_micClient.OnConversationError += OnConversationErrorHandler;
sst_micClient.OnMicrophoneStatus += OnMicrophoneStatus;

// Data Client event from an audio file for ex.
sst_dataClient.OnResponseReceived += OnResponseReceivedHandler;
sst_dataClient.OnPartialResponseReceived += OnPartialResponseReceivedHandler;
sst_dataClient.OnConversationError += OnConversationErrorHandler;

Now how do we start or stop the speech recognition? It’s simple, we just need to make a method call


// Turn on the microphone and stream audio to the Speech Recognition Service
sst_micClient.StartMicAndRecognition();

// Turn off the microphone and the Speech Recognition
sst_micClient.EndMicAndRecognition();

To convert an audio file to text, it’s easy, we just need to convert the file into a byte array and send it to the server for the recognition, like shown below:


if (!string.IsNullOrWhiteSpace(filename))
using (FileStream fileStream = new FileStream(filename, FileMode.Open, FileAccess.Read))
{
int bytesRead = 0;
byte[] buffer = new byte[1024];

try
{
do
{
bytesRead = fileStream.Read(buffer, 0, buffer.Length);
// Send of audio data to cloud service.
sst_dataClient.SendAudio(buffer, bytesRead);
} while (bytesRead &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;gt; 0);
}
finally
{
m_dataClient.EndAudio();
}
}

  • Text To Speech (TTS)

The TTS feature of project oxford can be used only through the REST API, and we have a complete example here.

The end-point to access the service is: https://speech.platform.bing.com/synthesize

The API uses HTTP POST to send audio back to the client. The maximum amount of audio returned for a given request will not exceed 15 seconds.

For any question about using this API, please refer to TTS through REST API documentation

III. Windows 10 Speech APIs

Windows 10 Speech APIs support all Windows 10 based devices including IoT hardware, phones, tablets, and PCs.

The Speech APIs in Windows 10 are represented under this two namespaces :

Requirement 

  1. Windows 10
  2. Visual Studio 2015
  3. Make sure that Windows Universal App Development Tools are installed in VS2015.

First of all we have to create a Windows 10 Universal application project in visual studio : New Project dialog box, click Visual C# > Windows > Windows Universal > Blank App (Windows Universal).

With Windows 10, applications don’t have the permission to use the microphone by default, so you must at first change the parameters of the universal application as follows:

Double click on the file Package.appxmanifest > Capablilites > Microphone > select the check box.

Note: The Windows 10 Speech APIs are using the languages installed in the Operating System.

  • Speech To Text (STT)

The STT feature using Windows 10 APIs works in online mode, if we want to make it available in offline mode we have to provide the necessary grammar manually.

To make this feature works we have 3 steps:

  • Create a SpeechRecognizer object,
  • Create an other object from SpeechRecognitionConstraint type and add it to the SpeechRecognizer object already created,
  • Compile the constraints.

SpeechRecognizer supports 2 types of recognition sessions:

  1. Continuous recognition sessions for prolonged audio input. A continuous session needs to be either explicitly ended or automatically times out after a configurable period of silence (default is 20 seconds).
  2. Speech recognition session for recognizing a short phrase. The session is terminated and the recognition results returned when a pause is detected by the recognizer.

Like shown in the code below


SpeechRecognizer speechRecognizer = new SpeechRecognizer();
// Here we choose a simple constraints scenario of dictation
var dictationConstraint = new SpeechRecognitionTopicConstraint(SpeechRecognitionScenario.Dictation, "dictation");
speechRecognizer.Constraints.Add(dictationConstraint);
SpeechRecognitionCompilationResult result = await speechRecognizer.CompileConstraintsAsync();

A continuous recognition session can be started by calling SpeechRecognizer.ContinuousRecognitionSession.StartAsync() method and can be stoped by calling speechRecognizer.ContinuousRecognitionSession.StopAsync(). The SpeechRecognizer.ContinuousRecognitionSession object provides two events :

  • Completed : Occurs when a continuous recognition session ends.
  • ResultGenerated : Occurs when the speech recognizer returns the result from a continuous recognition session.

We have another event tied to the speechRecognizer object, which is the HypothesisGenerated event, occurs when a recognition result fragment is returned by the speech recognizer.

The code below show how to start the recognition:


public async void StartRecognition()
{
// The recognizer can only start listening in a continuous fashion if the recognizer is urrently idle.
// This prevents an exception from occurring.
if (speechRecognizer.State == SpeechRecognizerState.Idle)
{
try
{
await speechRecognizer.ContinuousRecognitionSession.StartAsync();
}
catch (Exception ex)
{
var messageDialog = new Windows.UI.Popups.MessageDialog(ex.Message, "Exception");
await messageDialog.ShowAsync();
}
}
}

To stop the recognition :


public async void StopRecognition()
{
if (speechRecognizer.State != SpeechRecognizerState.Idle)
{
try
{
await speechRecognizer.ContinuousRecognitionSession.StopAsync();

TXB_SpeechToText.Text = dictatedTextBuilder.ToString();
}
catch (Exception exception)
{
var messageDialog = new Windows.UI.Popups.MessageDialog(exception.Message, "Exception");
await messageDialog.ShowAsync();
}
}
}

 

  • Text To Speech (TTS)

This feature is available in offline and online mode, to make it works we have to create a SpeechSynthesizer object, then we set the speech synthesizer engine (voice) and generate a stream from the speechSynthesizer.SynthesizeTextToStreamAsync method by passing the text we want to read in parameter.

To read the stream we have to use a MediaElement object, like shown in the code below:


SpeechSynthesizer speechSynthesizer = new SpeechSynthesizer();
speechSynthesizer.Voice = SpeechSynthesizer.DefaultVoice;
//Init the media element which will wrap tthe text to speech
MediaElement mediaElement = new MediaElement();
//We have to add the mediaElement to the Grid otherwise it won't work
LayoutRoot.Children.Add(mediaElement);

var stream = await speechSynthesizer.SynthesizeTextToStreamAsync("Hello World!");
mediaElement.SetSource(stream, stream.ContentType);
mediaElement.Play();

Managing voice commands using the STT and TTS features

We can make the applications implementing these APIs more interactive, by passing some commands using voice. Once the command is executed, the app will confirm this, using the TTS feature. To do that, we can use the STT events, like shown in the code below:


private async  void ContinuousRecognitionSession_ResultGenerated(SpeechContinuousRecognitionSession sender, SpeechContinuousRecognitionResultGeneratedEventArgs args)
{
// We can ignore the generated text using the level of the conversion confidence (Low,Medium,High)
if (args.Result.Confidence == SpeechRecognitionConfidence.Medium || args.Result.Confidence == SpeechRecognitionConfidence.High)
{
// The key word to activate any command
//ex. user says : text red, the key word is text and the command is red
string command = "text";

if (args.Result.Text.ToLower().Contains(command))
{
string result = args.Result.Text.ToLower();
string value = result.Substring(result.IndexOf(command) + command.Length + 1).ToLower();
//The generated text may ends with a point
value = value.Replace(".", "");
switch (value)
{
case "in line": case "line": case "in-line":
dictatedTextBuilder.AppendFormat("{0}", Environment.NewLine);
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
ReadSpecilaCommandToUser("Carriage return command is activated");
});
break;
case "blue":
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
TXB_SpeechToText.Foreground = new SolidColorBrush(Colors.Blue);
ReadSpecilaCommandToUser("Blue color command is activated");
});
break;
case "red":
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
TXB_SpeechToText.Foreground = new SolidColorBrush(Colors.Red);
ReadSpecilaCommandToUser("Red color command is activated");
});
break;
case "green":
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
TXB_SpeechToText.Foreground = new SolidColorBrush(Colors.Green);
ReadSpecilaCommandToUser("Green color command is activated");
});
break;
case "black":
await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
TXB_SpeechToText.Foreground = new SolidColorBrush(Colors.Black);
ReadSpecilaCommandToUser("Black color command is activated");
});
break;
}
}
else
{
dictatedTextBuilder.Append(args.Result.Text + " ");
}

await dispatcher.RunAsync(CoreDispatcherPriority.Normal, () =>
{
TXB_SpeechToText.Text = dictatedTextBuilder.ToString();
});

}

}

private async void ReadSpecilaCommandToUser(string text)
{
if (!string.IsNullOrWhiteSpace(text))
{
using (SpeechSynthesizer speech = new SpeechSynthesizer())
{
speech.Voice = SpeechSynthesizer.AllVoices.FirstOrDefault(item => item.Language.Equals(language.LanguageTag));
SpeechSynthesisStream stream = await speech.SynthesizeTextToStreamAsync(text);

mediaElement.SetSource(stream, stream.ContentType);
mediaElement.Play();
}
}
}

 


IV. Demo

The video below shows how to edit text by voice, the app is using the Windows 10 Speech APIs:

Going further

 

Speech APIs – Universal Windows Platform:

SpeechAPIs – Project Oxford: https://github.com/Microsoft/ProjectOxford-ClientSDK/tree/master/Speech

Project Oxford : https://www.projectoxford.ai

Suivre

Recevez les nouvelles publications par mail.

Rejoignez 47 autres abonnés