Ciao a tutti, premetto subito che sono
nuovissssimo nel c# e in questi ultimi giorni mi sono cimentato in un progetto molto basico per cominciare ad apprendere e mettere in pratica le prime basi di questo linguaggio. Il progetto consiste in una console app con framework .net che funge da "assistente vocale" per l'utente. Dopo avere realizzato le prime funzioni che compie l'assistente, come aprire il browser in determinate schede per soddisfare le ricerche dell'utilizzatore e fornire l'ora all'utente. Ovviamente aggiungerò altre funzioni, ma il punto è che, dopo avere utilizzato System.Speech.Synthesis come sintetizzatore vocale, ho bisogno di un metodo per far comprendere al programma i comandi attraverso l'audio. Infatti fino ad ora i comandi a cui risponde l'assistente sono scritti in user input, con Console.WriteLine();. Cercando online però, a differenza di tutte le altre informazioni che ho trovato su atri forum o sul sito ufficiale Microsoft, ho trovato solo esempii di codice che se inseriti nella mia app provocano errori che non sono nemmeno in grado di comprendere, dato che come ho scritto, anche se sono più avanzato nella programmazione Python, per quanto riguarda C# sono in alto mare. Il succo di questa pergamena è che sto cercando un metodo con cui l'applicazione ascolti ciò che l'utente dice, per poi memorizzare il testo in una variabile. Lascio qui sotto il codice dell'app.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Speech.Synthesis;
using System.Threading;
namespace AssistenteVocale
{
class Assistente
{
static void Main(string[] args)
{
string[] saluti_in = { "Ciao!", "Buongiorno!", "Benvenuto nel tuo assistente vocale!" };
string[] saluti_in_seconda_rep = { "Cos'altro", "Adesso cosa", "Ora cosa", "Adesso cos'altro", "Ora cos'altro" };
string[] saluti_out = { "Alla prossima!", "Arrivederci!", "Ciao ciao!", "Ci vediamo!" };
SpeechSynthesizer sps = new SpeechSynthesizer();
sps.SetOutputToDefaultAudioDevice();
sps.Rate = 2;
sps.SelectVoice("Microsoft Elsa Desktop");
Random saluto_in = new Random();
int saluto_in_numero = saluto_in.Next(saluti_in.Length);
bool riprodotto = false;
bool prima_riproduzione = true;
while (riprodotto == false)
{
if (prima_riproduzione == true)
{
sps.SpeakAsync($"\n{saluti_in[saluto_in_numero]} Cosa posso fare per te?");
Console.WriteLine($"\n{saluti_in[saluto_in_numero]} Cosa posso fare per te?");
}
else if (prima_riproduzione == false)
{
Thread.Sleep(3000);
Random saluto_in_seconda_rep = new Random();
int saluto_in_seconda_rep_numero = saluto_in.Next(saluti_in_seconda_rep.Length);
sps.SpeakAsync($"\n{saluti_in_seconda_rep[saluto_in_seconda_rep_numero]} posso fare?");
Console.WriteLine($"\n{saluti_in_seconda_rep[saluto_in_seconda_rep_numero]} posso fare?");
}
string comando_maiusc = "";
comando_maiusc = Console.ReadLine();
string comando = comando_maiusc.ToLower();
// Verificare quali parole sono presenti nel comando
bool riprodurre_brano1 = comando.Contains("riproduci");
bool riprodurre_brano2 = comando.Contains("riprodurre");
// Richiesta dell'orario
if ((comando.Contains("ore") || comando.Contains("ora") && comando.Contains("che")))
{
string datetime = DateTime.Now.ToString("HH:mm");
sps.SpeakAsync($"\nSono le {datetime}!");
Console.WriteLine($"\nSono le {datetime}!");
prima_riproduzione = false;
}
// Richieta di riproduzione di un brano
string brano = "";
if (riprodurre_brano1 == true || riprodurre_brano2 == true)
{
if (riprodurre_brano1 == true)
{
brano = comando.Replace("riproduci ", "");
string cantante = brano.Replace(" ", "+");
string url_cantante = ($"https://www.youtube.com/results?search_query={cantante}");
try
{
System.Diagnostics.Process.Start(url_cantante);
sps.SpeakAsync($"\nEcco i risultati di '{brano}' su YouTube.");
Console.WriteLine($"\nEcco i risultati di '{brano}' su YouTube.");
}
catch
{
sps.SpeakAsync($"\n{brano}: risultato non trovato. Riprova.");
Console.WriteLine($"\n{brano}: risultato non trovato. Riprova.");
riprodotto = true;
}
}
if (riprodurre_brano2 == true)
{
brano = comando.Replace("riprodurre ", "");
Console.WriteLine($"{brano}");
}
prima_riproduzione = false;
}
// Richiesta di chiusura dell'assistente
if (comando.Contains("esci") || (comando.Contains("chiudi")))
{
Random saluto_out = new Random();
int saluto_out_numero = saluto_in.Next(saluti_out.Length);
sps.SpeakAsync($"{saluti_out[saluto_out_numero]}");
Console.WriteLine($"\n{saluti_out[saluto_out_numero]}");
Thread.Sleep(2000);
Environment.Exit(0);
}
// Richiesta di ricerca online
string oggetto_ricerca = "";
comando = "";
}
Console.ReadKey();
}
}
}
Spero che qualcuno mi dia una mano qui