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 |