#include <iostream>
#include <string>
#include <Windows.h>
#include <sapi.h>
#include <vector>
using namespace std;
#pragma comment(lib,"winmm.lib")
ISpVoice* pVoice;
HRESULT hr;
// una funzione per far comunicare l'applicazione con lutente sia tramite video sia col riscontro vocale
void output(wstring esempio)
{
wcout << esempio; hr = pVoice->Speak(esempio.c_str(), 0, NULL);
}
int main()
{
//in caso ci fossero file audio con caratteri accentati nei nomi, perché siano riconosciuti correttamente
system("chcp.com 1252");
wstring nome;
vector<wstring>audio;
pVoice = NULL;
if (FAILED(::CoInitialize(NULL)))
{
cout << "Non è stato possibile attivare lo speaker su questo computer. Per tanto l'applicazione non è in grado di proseguire. Prego, verifica sull'hard disk la disponibilità del motore di sintesi vocale Sapi prima di avviare nuovamente l'eseguibile" << endl;
system("set /p asd=Premi nuovamente invio per uscire");
return FALSE;
}
hr = CoCreateInstance(CLSID_SpVoice, NULL, CLSCTX_ALL, IID_ISpVoice, (void**)&pVoice);
if (SUCCEEDED(hr))
{
WIN32_FIND_DATA FindFileData;
HANDLE hFind;
hFind = FindFirstFile(L"\*.*", &FindFileData);
while (FindNextFile(hFind, &FindFileData))
{
//dovrebbe servire a scorrere i nomi di tutti i file presenti, ma memorizzare solo gli audio wav
nome = FindFileData.cFileName;
if (nome.substr(nome.size() - 4, nome.size()) == L".wav") { audio.push_back(nome);}
}
FindClose(hFind);
output(L"Ben venuto! Abbiamo trovato " + to_wstring(audio.size()) + L" brani! Buon ascolto");
cout << endl;
for (wstring brano : audio)
{
output(brano.substr(0, brano.size() - 4));
PlaySound(brano.c_str(), NULL, SND_FILENAME);
cout << endl;
}
output(L"Arrivederci");
}
pVoice->Release();
pVoice = NULL;
::CoUninitialize();
}