History

Add limitless connection and scripting interface

Delamare2112 committed 9 years ago

Commit 4f7cbd51 parent 52fb6ed4 files · +249 −0Browse files

Showing the changes to interface/src/scripting/LimitlessVoiceRecognitionScriptingInterface.cpp (1 of 4 files). Show all

Unified · Split

interface/src/scripting/LimitlessVoiceRecognitionScriptingInterface.cpp+64−0
@@ -0,0 +1,64 @@
1//
2// SpeechRecognitionScriptingInterface.h
3// interface/src/scripting
4//
5// Created by Trevor Berninger on 3/20/17.
6// Copyright 2017 Limitless ltd.
7//
8// Distributed under the Apache License, Version 2.0.
9// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
10//
11
12#include <src/InterfaceLogging.h>
13#include <src/ui/AvatarInputs.h>
14#include <QtConcurrent/QtConcurrentRun>
15#include "LimitlessVoiceRecognitionScriptingInterface.h"
16
17const float LimitlessVoiceRecognitionScriptingInterface::_audioLevelThreshold = 0.33f;
18const int LimitlessVoiceRecognitionScriptingInterface::_voiceTimeoutDuration = 2000;
19
20LimitlessVoiceRecognitionScriptingInterface::LimitlessVoiceRecognitionScriptingInterface() :
21 _shouldStartListeningForVoice(false)
22{
23 _voiceTimer.setSingleShot(true);
24 connect(&_voiceTimer, &QTimer::timeout, this, &LimitlessVoiceRecognitionScriptingInterface::voiceTimeout);
25 connect(&_connection, &LimitlessConnection::onReceivedTranscription, this, [this](QString transcription){emit onReceivedTranscription(transcription);});
26 connect(&_connection, &LimitlessConnection::onFinishedSpeaking, this, [this](QString transcription){emit onFinishedSpeaking(transcription);});
27 _connection.moveToThread(&_connectionThread);
28 _connectionThread.setObjectName("Limitless Connection");
29 _connectionThread.start();
30}
31
32void LimitlessVoiceRecognitionScriptingInterface::update() {
33 const float audioLevel = AvatarInputs::getInstance()->loudnessToAudioLevel(DependencyManager::get<AudioClient>()->getAudioAverageInputLoudness());
34
35 if (_shouldStartListeningForVoice) {
36 if (_connection._streamingAudioForTranscription) {
37 if (audioLevel > _audioLevelThreshold) {
38 if (_voiceTimer.isActive()) {
39 _voiceTimer.stop();
40 }
41 } else if (!_voiceTimer.isActive()){
42 _voiceTimer.start(_voiceTimeoutDuration);
43 }
44 } else if (audioLevel > _audioLevelThreshold) {
45 // to make sure invoke doesn't get called twice before the method actually gets called
46 _connection._streamingAudioForTranscription = true;
47 QMetaObject::invokeMethod(&_connection, "startListening", Q_ARG(QString, authCode));
48 }
49 }
50}
51
52void LimitlessVoiceRecognitionScriptingInterface::setListeningToVoice(bool listening) {
53 _shouldStartListeningForVoice = listening;
54}
55
56void LimitlessVoiceRecognitionScriptingInterface::setAuthKey(QString key) {
57 authCode = key;
58}
59
60void LimitlessVoiceRecognitionScriptingInterface::voiceTimeout() {
61 if (_connection._streamingAudioForTranscription) {
62 QMetaObject::invokeMethod(&_connection, "stopListening");
63 }
64}