diff options
author | Tuomas Tuononen <tuomas.tuononen@code-q.fi> | 2015-09-16 14:09:37 +0300 |
---|---|---|
committer | Tuomas Tuononen <tuomas.tuononen@code-q.fi> | 2015-10-14 07:17:25 +0000 |
commit | 6ab8c10340e3a588c4a9ca5e6fa1e1651fef8d34 (patch) | |
tree | 1c5dde255e1f70bf2ac5f4133a35274c1416ea4b | |
parent | 614f4f7fc307862a96217c4fc3e5978c910897c7 (diff) |
PocketSphinx: Move engine parameter initialization to engine class
Change-Id: Ic8353670b02258b4598e22845ffbf30365e92ca9
Reviewed-by: Johannes Oikarinen <johannes.oikarinen@digia.com>
Reviewed-by: Frederik Gladhorn <frederik.gladhorn@theqtcompany.com>
3 files changed, 34 insertions, 19 deletions
diff --git a/src/plugins/asr/pocketsphinx/qspeechrecognitionengine_pocketsphinx.cpp b/src/plugins/asr/pocketsphinx/qspeechrecognitionengine_pocketsphinx.cpp index 2f68858..a4c5c8c 100755 --- a/src/plugins/asr/pocketsphinx/qspeechrecognitionengine_pocketsphinx.cpp +++ b/src/plugins/asr/pocketsphinx/qspeechrecognitionengine_pocketsphinx.cpp @@ -66,8 +66,8 @@ void PocketShpinxErrorCb(void *user_data, err_lvl_t lvl, const char *fmt, ...) } QSpeechRecognitionEnginePocketSphinx::QSpeechRecognitionEnginePocketSphinx(const QString &name, - const QVariantMap ¶meters, const QAudioDeviceInfo &defaultDevice, QObject *parent) - : QSpeechRecognitionPluginEngine(name, parameters, + const QVariantMap ¶meters, QObject *parent) + : QSpeechRecognitionPluginEngine(name, createEngineParameters(parameters), QStringList() << "locale" << "dictionary" << "resourceDirectory" @@ -80,7 +80,7 @@ QSpeechRecognitionEnginePocketSphinx::QSpeechRecognitionEnginePocketSphinx(const parent), m_session(0), m_decoder(0), - m_device(defaultDevice), + m_device(QAudioDeviceInfo::defaultInputDevice()), m_audioInput(0), m_grammar(0), m_audioBuffer(0), @@ -90,6 +90,15 @@ QSpeechRecognitionEnginePocketSphinx::QSpeechRecognitionEnginePocketSphinx(const m_cmnVec(0), m_cmnSize(0) { + const QVariantMap &engineParams = QSpeechRecognitionPluginEngine::parameters(); + QString inputDeviceName = engineParams["audioInputDevice"].toString(); + QList<QAudioDeviceInfo> audioDevices = QAudioDeviceInfo::availableDevices(QAudio::AudioInput); + foreach (QAudioDeviceInfo device, audioDevices) { + if (!inputDeviceName.isEmpty() && device.deviceName() == inputDeviceName) { + m_device = device; + break; + } + } } QSpeechRecognitionEnginePocketSphinx::~QSpeechRecognitionEnginePocketSphinx() @@ -452,6 +461,25 @@ QString QSpeechRecognitionEnginePocketSphinx::localizedFilePath(const QString &f return QSpeechRecognitionPluginEngine::localizedFilePath(filePath); } +QVariantMap QSpeechRecognitionEnginePocketSphinx::createEngineParameters(const QVariantMap &inputParameters) +{ + QVariantMap newParameters = inputParameters; + QStringList audioDeviceNames; + QString inputDeviceName; + QAudioDeviceInfo inputDevice = QAudioDeviceInfo::defaultInputDevice(); + if (inputParameters.contains("audioInputDevice")) + inputDeviceName = inputParameters["audioInputDevice"].toString(); + QList<QAudioDeviceInfo> audioDevices = QAudioDeviceInfo::availableDevices(QAudio::AudioInput); + foreach (QAudioDeviceInfo device, audioDevices) { + audioDeviceNames.append(device.deviceName()); + if (!inputDeviceName.isEmpty() && device.deviceName() == inputDeviceName) + inputDevice = device; + } + newParameters.insert("audioInputDevices", audioDeviceNames); + newParameters.insert("audioInputDevice", inputDevice.deviceName()); + return newParameters; +} + bool QSpeechRecognitionEnginePocketSphinx::processNextAudio() { if (!m_inputFileDecoder.sourceFilename().isEmpty()) { // File input was selected for this session diff --git a/src/plugins/asr/pocketsphinx/qspeechrecognitionengine_pocketsphinx.h b/src/plugins/asr/pocketsphinx/qspeechrecognitionengine_pocketsphinx.h index 02f9493..899130c 100755 --- a/src/plugins/asr/pocketsphinx/qspeechrecognitionengine_pocketsphinx.h +++ b/src/plugins/asr/pocketsphinx/qspeechrecognitionengine_pocketsphinx.h @@ -55,7 +55,7 @@ class QSpeechRecognitionEnginePocketSphinx : public QSpeechRecognitionPluginEngi { Q_OBJECT public: - QSpeechRecognitionEnginePocketSphinx(const QString &name, const QVariantMap ¶meters, const QAudioDeviceInfo &defaultDevice, QObject *parent); + QSpeechRecognitionEnginePocketSphinx(const QString &name, const QVariantMap ¶meters, QObject *parent); virtual ~QSpeechRecognitionEnginePocketSphinx(); // Plug-in API: @@ -84,6 +84,7 @@ public slots: void onAudioDecoderBufferReady(); void onAudioDecoderFinished(); private: + static QVariantMap createEngineParameters(const QVariantMap &inputParameters); bool processNextAudio(); void processAudio(const void *data, size_t dataSize); void storeCmn(); diff --git a/src/plugins/asr/pocketsphinx/qspeechrecognitionplugin_pocketsphinx.cpp b/src/plugins/asr/pocketsphinx/qspeechrecognitionplugin_pocketsphinx.cpp index 43d374a..935bca8 100755 --- a/src/plugins/asr/pocketsphinx/qspeechrecognitionplugin_pocketsphinx.cpp +++ b/src/plugins/asr/pocketsphinx/qspeechrecognitionplugin_pocketsphinx.cpp @@ -47,21 +47,7 @@ Q_LOGGING_CATEGORY(lcSpeechAsrPocketSphinx, "qt.speech.asr.pocketsphinx") QSpeechRecognitionPluginEngine *QSpeechRecognitionPluginPocketSphinx::createSpeechRecognitionEngine(const QString &name, const QVariantMap ¶meters, QObject *parent, QString *errorString) const { - QVariantMap newParameters = parameters; - QStringList audioDeviceNames; - QString inputDeviceName; - QAudioDeviceInfo inputDevice = QAudioDeviceInfo::defaultInputDevice(); - if (parameters.contains("audioInputDevice")) - inputDeviceName = parameters["audioInputDevice"].toString(); - QList<QAudioDeviceInfo> audioDevices = QAudioDeviceInfo::availableDevices(QAudio::AudioInput); - foreach (QAudioDeviceInfo device, audioDevices) { - audioDeviceNames.append(device.deviceName()); - if (!inputDeviceName.isEmpty() && device.deviceName() == inputDeviceName) - inputDevice = device; - } - newParameters.insert("audioInputDevices", audioDeviceNames); - newParameters.insert("audioInputDevice", inputDevice.deviceName()); - QSpeechRecognitionEnginePocketSphinx *ps = new QSpeechRecognitionEnginePocketSphinx(name, newParameters, inputDevice, parent); + QSpeechRecognitionEnginePocketSphinx *ps = new QSpeechRecognitionEnginePocketSphinx(name, parameters, parent); if (ps && ps->init(errorString)) { return ps; } |