forked from LeenkxTeam/LNXSDK
43 lines
1.3 KiB
C++
43 lines
1.3 KiB
C++
|
#ifdef KINC_WINDOWSAPP
|
||
|
|
||
|
#include <Kore/Audio3/TextToSpeech.h>
|
||
|
#include <Kore/Log.h>
|
||
|
#include <ppltasks.h>
|
||
|
|
||
|
using namespace Kore;
|
||
|
using namespace Windows::Media::SpeechSynthesis;
|
||
|
using namespace Windows::Media::Core;
|
||
|
using namespace Windows::Media::Playback;
|
||
|
|
||
|
SpeechSynthesizer ^ speechSynthesizer;
|
||
|
MediaPlayer ^ mediaPlayer;
|
||
|
|
||
|
void TextToSpeech::init() {
|
||
|
speechSynthesizer = ref new SpeechSynthesizer();
|
||
|
// auto voices = speechSynthesizer->AllVoices;
|
||
|
// for (int i = 0; i < voices->Size; i++) {
|
||
|
// auto voiceInfo = voices->GetAt(i);
|
||
|
// OutputDebugStringW(voiceInfo->DisplayName->Data());
|
||
|
// OutputDebugStringW(voiceInfo->Description->Data());
|
||
|
//}
|
||
|
mediaPlayer = ref new MediaPlayer();
|
||
|
}
|
||
|
|
||
|
Platform::String ^
|
||
|
CharToString(const char *char_array) {
|
||
|
std::string s_str = std::string(char_array);
|
||
|
std::wstring wid_str = std::wstring(s_str.begin(), s_str.end());
|
||
|
const wchar_t *w_char = wid_str.c_str();
|
||
|
return ref new Platform::String(w_char);
|
||
|
}
|
||
|
|
||
|
void TextToSpeech::speakText(const char *text) {
|
||
|
concurrency::create_task(speechSynthesizer->SynthesizeTextToStreamAsync(CharToString(text))).then([](SpeechSynthesisStream ^ stream) {
|
||
|
mediaPlayer->Source = MediaSource::CreateFromStream(stream, stream->ContentType);
|
||
|
// mediaPlayer->Volume = 1;
|
||
|
mediaPlayer->Play();
|
||
|
// mediaPlayer->
|
||
|
});
|
||
|
}
|
||
|
|
||
|
#endif
|