mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-06-16 22:28:46 +02:00
90 lines
2.8 KiB
C++
90 lines
2.8 KiB
C++
// TTSScriptingInterface.h
|
|
// libraries/audio-client/src/scripting
|
|
//
|
|
// Created by Zach Fox on 2018-10-10.
|
|
// Copyright 2018 High Fidelity, Inc.
|
|
//
|
|
// Distributed under the Apache License, Version 2.0.
|
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
|
//
|
|
|
|
#ifndef hifi_SpeechScriptingInterface_h
|
|
#define hifi_SpeechScriptingInterface_h
|
|
|
|
#include <QtCore/QObject>
|
|
#include <DependencyManager.h>
|
|
#ifndef WIN32_LEAN_AND_MEAN
|
|
#define WIN32_LEAN_AND_MEAN
|
|
#endif
|
|
#include <sapi.h> // SAPI
|
|
#include <sphelper.h> // SAPI Helper
|
|
#include <AudioInjector.h>
|
|
#include <AudioConstants.h>
|
|
|
|
class TTSScriptingInterface : public QObject, public Dependency {
|
|
Q_OBJECT
|
|
|
|
public:
|
|
TTSScriptingInterface();
|
|
~TTSScriptingInterface();
|
|
|
|
Q_INVOKABLE void testTone(const bool& alsoInject = false);
|
|
Q_INVOKABLE void speakText(const QString& textToSpeak,
|
|
const int& newChunkSize = (AudioConstants::NETWORK_FRAME_SAMPLES_PER_CHANNEL * 50),
|
|
const int& timerInterval = 96,
|
|
const int& sampleRate = 24000,
|
|
const int& bitsPerSample = 16,
|
|
const bool& alsoInject = false);
|
|
Q_INVOKABLE void stopLastSpeech();
|
|
|
|
signals:
|
|
void ttsSampleCreated(QByteArray outputArray, const int& newChunkSize, const int& timerInterval);
|
|
void clearTTSBuffer();
|
|
|
|
private:
|
|
class CComAutoInit {
|
|
public:
|
|
// Initializes COM using CoInitialize.
|
|
// On failure, signals error using AtlThrow.
|
|
CComAutoInit() {
|
|
HRESULT hr = ::CoInitialize(NULL);
|
|
if (FAILED(hr)) {
|
|
ATLTRACE(TEXT("CoInitialize() failed in CComAutoInit constructor (hr=0x%08X).\n"), hr);
|
|
AtlThrow(hr);
|
|
}
|
|
}
|
|
|
|
// Initializes COM using CoInitializeEx.
|
|
// On failure, signals error using AtlThrow.
|
|
explicit CComAutoInit(__in DWORD dwCoInit) {
|
|
HRESULT hr = ::CoInitializeEx(NULL, dwCoInit);
|
|
if (FAILED(hr)) {
|
|
ATLTRACE(TEXT("CoInitializeEx() failed in CComAutoInit constructor (hr=0x%08X).\n"), hr);
|
|
AtlThrow(hr);
|
|
}
|
|
}
|
|
|
|
// Uninitializes COM using CoUninitialize.
|
|
~CComAutoInit() { ::CoUninitialize(); }
|
|
|
|
//
|
|
// Ban copy
|
|
//
|
|
private:
|
|
CComAutoInit(const CComAutoInit&);
|
|
};
|
|
|
|
// COM initialization and cleanup (must precede other COM related data members)
|
|
CComAutoInit m_comInit;
|
|
|
|
// Text to speech engine
|
|
CComPtr<ISpVoice> m_tts;
|
|
|
|
// Default voice token
|
|
CComPtr<ISpObjectToken> m_voiceToken;
|
|
|
|
QByteArray _lastSoundByteArray;
|
|
AudioInjectorPointer _lastSoundAudioInjector;
|
|
};
|
|
|
|
#endif // hifi_SpeechScriptingInterface_h
|