History

Lots of progress today

Zach Fox committed 8 years ago

Commit daeedc61 parent 5d4de3d5 files · +94 −51Browse files

Showing the changes to interface/src/scripting/TTSScriptingInterface.h (1 of 5 files). Show all

Unified · Split

interface/src/scripting/TTSScriptingInterface.h+83−0
@@ -0,0 +1,83 @@
1// TTSScriptingInterface.h
2// libraries/audio-client/src/scripting
3//
4// Created by Zach Fox on 2018-10-10.
5// Copyright 2018 High Fidelity, Inc.
6//
7// Distributed under the Apache License, Version 2.0.
8// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
9//
10
11#ifndef hifi_SpeechScriptingInterface_h
12#define hifi_SpeechScriptingInterface_h
13
14#include <QtCore/QObject>
15#include <DependencyManager.h>
16#ifndef WIN32_LEAN_AND_MEAN
17#define WIN32_LEAN_AND_MEAN
18#endif
19#include <sapi.h> // SAPI
20#include <sphelper.h> // SAPI Helper
21#include <AudioInjector.h>
22
23class TTSScriptingInterface : public QObject, public Dependency {
24 Q_OBJECT
25
26public:
27 TTSScriptingInterface();
28 ~TTSScriptingInterface();
29
30 Q_INVOKABLE void testTone(const bool& alsoInject = false);
31 Q_INVOKABLE void speakText(const QString& textToSpeak, const bool& alsoInject = false);
32 Q_INVOKABLE void stopLastSpeech();
33
34signals:
35 void ttsSampleCreated(QByteArray outputArray);
36
37private:
38 class CComAutoInit {
39 public:
40 // Initializes COM using CoInitialize.
41 // On failure, signals error using AtlThrow.
42 CComAutoInit() {
43 HRESULT hr = ::CoInitialize(NULL);
44 if (FAILED(hr)) {
45 ATLTRACE(TEXT("CoInitialize() failed in CComAutoInit constructor (hr=0x%08X).\n"), hr);
46 AtlThrow(hr);
47 }
48 }
49
50 // Initializes COM using CoInitializeEx.
51 // On failure, signals error using AtlThrow.
52 explicit CComAutoInit(__in DWORD dwCoInit) {
53 HRESULT hr = ::CoInitializeEx(NULL, dwCoInit);
54 if (FAILED(hr)) {
55 ATLTRACE(TEXT("CoInitializeEx() failed in CComAutoInit constructor (hr=0x%08X).\n"), hr);
56 AtlThrow(hr);
57 }
58 }
59
60 // Uninitializes COM using CoUninitialize.
61 ~CComAutoInit() { ::CoUninitialize(); }
62
63 //
64 // Ban copy
65 //
66 private:
67 CComAutoInit(const CComAutoInit&);
68 };
69
70 // COM initialization and cleanup (must precede other COM related data members)
71 CComAutoInit m_comInit;
72
73 // Text to speech engine
74 CComPtr<ISpVoice> m_tts;
75
76 // Default voice token
77 CComPtr<ISpObjectToken> m_voiceToken;
78
79 QByteArray _lastSoundByteArray;
80 AudioInjectorPointer _lastSoundByteArray;
81};
82
83#endif // hifi_SpeechScriptingInterface_h