diff --git a/include/f1x/openauto/autoapp/Configuration/AudioOutputBackendType.hpp b/include/f1x/openauto/autoapp/Configuration/AudioOutputBackendType.hpp
new file mode 100644
index 0000000..e954874
--- /dev/null
+++ b/include/f1x/openauto/autoapp/Configuration/AudioOutputBackendType.hpp
@@ -0,0 +1,39 @@
+/*
+* This file is part of openauto project.
+* Copyright (C) 2018 f1x.studio (Michal Szwaj)
+*
+* openauto is free software: you can redistribute it and/or modify
+* it under the terms of the GNU General Public License as published by
+* the Free Software Foundation; either version 3 of the License, or
+* (at your option) any later version.
+
+* openauto is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU General Public License for more details.
+*
+* You should have received a copy of the GNU General Public License
+* along with openauto. If not, see .
+*/
+
+#pragma once
+
+namespace f1x
+{
+namespace openauto
+{
+namespace autoapp
+{
+namespace configuration
+{
+
+enum class AudioOutputBackendType
+{
+ RTAUDIO,
+ QT
+};
+
+}
+}
+}
+}
diff --git a/include/f1x/openauto/autoapp/Configuration/Configuration.hpp b/include/f1x/openauto/autoapp/Configuration/Configuration.hpp
index 93d44b3..f4a0649 100644
--- a/include/f1x/openauto/autoapp/Configuration/Configuration.hpp
+++ b/include/f1x/openauto/autoapp/Configuration/Configuration.hpp
@@ -69,6 +69,8 @@ public:
void setMusicAudioChannelEnabled(bool value) override;
bool speechAudioChannelEnabled() const override;
void setSpeechAudioChannelEnabled(bool value) override;
+ AudioOutputBackendType getAudioOutputBackendType() const override;
+ void setAudioOutputBackendType(AudioOutputBackendType value) override;
private:
void readButtonCodes(boost::property_tree::ptree& iniConfig);
@@ -88,6 +90,7 @@ private:
std::string bluetoothRemoteAdapterAddress_;
bool musicAudioChannelEnabled_;
bool speechAudiochannelEnabled_;
+ AudioOutputBackendType audioOutputBackendType_;
static const std::string cConfigFileName;
@@ -103,6 +106,7 @@ private:
static const std::string cAudioMusicAudioChannelEnabled;
static const std::string cAudioSpeechAudioChannelEnabled;
+ static const std::string cAudioOutputBackendType;
static const std::string cBluetoothAdapterTypeKey;
static const std::string cBluetoothRemoteAdapterAddressKey;
diff --git a/include/f1x/openauto/autoapp/Configuration/IConfiguration.hpp b/include/f1x/openauto/autoapp/Configuration/IConfiguration.hpp
index 2f086cd..2165a68 100644
--- a/include/f1x/openauto/autoapp/Configuration/IConfiguration.hpp
+++ b/include/f1x/openauto/autoapp/Configuration/IConfiguration.hpp
@@ -25,6 +25,7 @@
#include
#include
#include
+#include
namespace f1x
{
@@ -77,6 +78,8 @@ public:
virtual void setMusicAudioChannelEnabled(bool value) = 0;
virtual bool speechAudioChannelEnabled() const = 0;
virtual void setSpeechAudioChannelEnabled(bool value) = 0;
+ virtual AudioOutputBackendType getAudioOutputBackendType() const = 0;
+ virtual void setAudioOutputBackendType(AudioOutputBackendType value) = 0;
};
}
diff --git a/include/f1x/openauto/autoapp/Projection/ServiceFactory.hpp b/include/f1x/openauto/autoapp/Projection/ServiceFactory.hpp
index 0d929b6..f7fdbd2 100644
--- a/include/f1x/openauto/autoapp/Projection/ServiceFactory.hpp
+++ b/include/f1x/openauto/autoapp/Projection/ServiceFactory.hpp
@@ -40,6 +40,7 @@ private:
IService::Pointer createVideoService(aasdk::messenger::IMessenger::Pointer messenger);
IService::Pointer createBluetoothService(aasdk::messenger::IMessenger::Pointer messenger);
IService::Pointer createInputService(aasdk::messenger::IMessenger::Pointer messenger);
+ void createAudioServices(ServiceList& serviceList, aasdk::messenger::IMessenger::Pointer messenger);
boost::asio::io_service& ioService_;
configuration::IConfiguration::Pointer configuration_;
diff --git a/src/autoapp/Configuration/Configuration.cpp b/src/autoapp/Configuration/Configuration.cpp
index 72e51e1..0e79129 100644
--- a/src/autoapp/Configuration/Configuration.cpp
+++ b/src/autoapp/Configuration/Configuration.cpp
@@ -42,6 +42,7 @@ const std::string Configuration::cVideoMarginHeight = "Video.MarginHeight";
const std::string Configuration::cAudioMusicAudioChannelEnabled = "Audio.MusicAudioChannelEnabled";
const std::string Configuration::cAudioSpeechAudioChannelEnabled = "Audio.SpeechAudioChannelEnabled";
+const std::string Configuration::cAudioOutputBackendType = "Audio.OutputBackendType";
const std::string Configuration::cBluetoothAdapterTypeKey = "Bluetooth.AdapterType";
const std::string Configuration::cBluetoothRemoteAdapterAddressKey = "Bluetooth.RemoteAdapterAddress";
@@ -101,6 +102,7 @@ void Configuration::load()
musicAudioChannelEnabled_ = iniConfig.get(cAudioMusicAudioChannelEnabled, true);
speechAudiochannelEnabled_ = iniConfig.get(cAudioSpeechAudioChannelEnabled, true);
+ audioOutputBackendType_ = static_cast(iniConfig.get(cAudioOutputBackendType, static_cast(AudioOutputBackendType::RTAUDIO)));
}
catch(const boost::property_tree::ini_parser_error& e)
{
@@ -126,6 +128,7 @@ void Configuration::reset()
bluetoothRemoteAdapterAddress_ = "";
musicAudioChannelEnabled_ = true;
speechAudiochannelEnabled_ = true;
+ audioOutputBackendType_ = AudioOutputBackendType::RTAUDIO;
}
void Configuration::save()
@@ -149,6 +152,7 @@ void Configuration::save()
iniConfig.put(cAudioMusicAudioChannelEnabled, musicAudioChannelEnabled_);
iniConfig.put(cAudioSpeechAudioChannelEnabled, speechAudiochannelEnabled_);
+ iniConfig.put(cAudioOutputBackendType, static_cast(audioOutputBackendType_));
boost::property_tree::ini_parser::write_ini(cConfigFileName, iniConfig);
}
@@ -282,6 +286,16 @@ void Configuration::setSpeechAudioChannelEnabled(bool value)
speechAudiochannelEnabled_ = value;
}
+AudioOutputBackendType Configuration::getAudioOutputBackendType() const
+{
+ return audioOutputBackendType_;
+}
+
+void Configuration::setAudioOutputBackendType(AudioOutputBackendType value)
+{
+ audioOutputBackendType_ = value;
+}
+
void Configuration::readButtonCodes(boost::property_tree::ptree& iniConfig)
{
this->insertButtonCode(iniConfig, cInputPlayButtonKey, aasdk::proto::enums::ButtonCode::PLAY);
diff --git a/src/autoapp/Projection/ServiceFactory.cpp b/src/autoapp/Projection/ServiceFactory.cpp
index 82ede87..d10ddff 100644
--- a/src/autoapp/Projection/ServiceFactory.cpp
+++ b/src/autoapp/Projection/ServiceFactory.cpp
@@ -62,25 +62,7 @@ ServiceList ServiceFactory::create(aasdk::messenger::IMessenger::Pointer messeng
IAudioInput::Pointer audioInput(new QtAudioInput(1, 16, 16000), std::bind(&QObject::deleteLater, std::placeholders::_1));
serviceList.emplace_back(std::make_shared(ioService_, messenger, std::move(audioInput)));
-
- if(configuration_->musicAudioChannelEnabled())
- {
- //IAudioOutput::Pointer mediaAudioOutput(new QtAudioOutput(2, 16, 48000), std::bind(&QObject::deleteLater, std::placeholders::_1));
- auto mediaAudioOutput(std::make_shared(2, 16, 48000));
- serviceList.emplace_back(std::make_shared(ioService_, messenger, std::move(mediaAudioOutput)));
- }
-
- if(configuration_->speechAudioChannelEnabled())
- {
- //IAudioOutput::Pointer speechAudioOutput(new QtAudioOutput(1, 16, 16000), std::bind(&QObject::deleteLater, std::placeholders::_1));
- auto speechAudioOutput(std::make_shared(1, 16, 16000));
- serviceList.emplace_back(std::make_shared(ioService_, messenger, std::move(speechAudioOutput)));
- }
-
- //IAudioOutput::Pointer systemAudioOutput(new QtAudioOutput(1, 16, 16000), std::bind(&QObject::deleteLater, std::placeholders::_1));
- auto systemAudioOutput(std::make_shared(1, 16, 16000));
- serviceList.emplace_back(std::make_shared(ioService_, messenger, std::move(systemAudioOutput)));
-
+ this->createAudioServices(serviceList, messenger);
serviceList.emplace_back(std::make_shared(ioService_, messenger));
serviceList.emplace_back(this->createVideoService(messenger));
serviceList.emplace_back(this->createBluetoothService(messenger));
@@ -145,6 +127,33 @@ IService::Pointer ServiceFactory::createInputService(aasdk::messenger::IMessenge
return std::make_shared(ioService_, messenger, std::move(inputDevice));
}
+void ServiceFactory::createAudioServices(ServiceList& serviceList, aasdk::messenger::IMessenger::Pointer messenger)
+{
+ if(configuration_->musicAudioChannelEnabled())
+ {
+ auto mediaAudioOutput = configuration_->getAudioOutputBackendType() == configuration::AudioOutputBackendType::RTAUDIO ?
+ std::make_shared(2, 16, 48000) :
+ IAudioOutput::Pointer(new QtAudioOutput(2, 16, 48000), std::bind(&QObject::deleteLater, std::placeholders::_1));
+
+ serviceList.emplace_back(std::make_shared(ioService_, messenger, std::move(mediaAudioOutput)));
+ }
+
+ if(configuration_->speechAudioChannelEnabled())
+ {
+ auto speechAudioOutput = configuration_->getAudioOutputBackendType() == configuration::AudioOutputBackendType::RTAUDIO ?
+ std::make_shared(1, 16, 16000) :
+ IAudioOutput::Pointer(new QtAudioOutput(1, 16, 16000), std::bind(&QObject::deleteLater, std::placeholders::_1));
+
+ serviceList.emplace_back(std::make_shared(ioService_, messenger, std::move(speechAudioOutput)));
+ }
+
+ auto systemAudioOutput = configuration_->getAudioOutputBackendType() == configuration::AudioOutputBackendType::RTAUDIO ?
+ std::make_shared(1, 16, 16000) :
+ IAudioOutput::Pointer(new QtAudioOutput(1, 16, 16000), std::bind(&QObject::deleteLater, std::placeholders::_1));
+
+ serviceList.emplace_back(std::make_shared(ioService_, messenger, std::move(systemAudioOutput)));
+}
+
}
}
}
diff --git a/src/autoapp/UI/SettingsWindow.cpp b/src/autoapp/UI/SettingsWindow.cpp
index 3117cf3..5f64b3e 100644
--- a/src/autoapp/UI/SettingsWindow.cpp
+++ b/src/autoapp/UI/SettingsWindow.cpp
@@ -97,6 +97,7 @@ void SettingsWindow::onSave()
configuration_->setMusicAudioChannelEnabled(ui_->checkBoxMusicAudioChannel->isChecked());
configuration_->setSpeechAudioChannelEnabled(ui_->checkBoxSpeechAudioChannel->isChecked());
+ configuration_->setAudioOutputBackendType(ui_->radioButtonRtAudio->isChecked() ? configuration::AudioOutputBackendType::RTAUDIO : configuration::AudioOutputBackendType::QT);
configuration_->save();
this->close();
@@ -149,6 +150,10 @@ void SettingsWindow::load()
ui_->checkBoxMusicAudioChannel->setChecked(configuration_->musicAudioChannelEnabled());
ui_->checkBoxSpeechAudioChannel->setChecked(configuration_->speechAudioChannelEnabled());
+
+ const auto& audioOutputBackendType = configuration_->getAudioOutputBackendType();
+ ui_->radioButtonRtAudio->setChecked(audioOutputBackendType == configuration::AudioOutputBackendType::RTAUDIO);
+ ui_->radioButtonQtAudio->setChecked(audioOutputBackendType == configuration::AudioOutputBackendType::QT);
}
void SettingsWindow::loadButtonCheckBoxes()
diff --git a/src/autoapp/UI/settingswindow.ui b/src/autoapp/UI/settingswindow.ui
index b066a78..4028487 100644
--- a/src/autoapp/UI/settingswindow.ui
+++ b/src/autoapp/UI/settingswindow.ui
@@ -486,6 +486,45 @@ color: rgb(238, 238, 236);
+
+
+
+ 0
+ 130
+ 621
+ 61
+
+
+
+ Output backend
+
+
+
+
+ 10
+ 30
+ 112
+ 23
+
+
+
+ RT audio
+
+
+
+
+
+ 140
+ 30
+ 112
+ 23
+
+
+
+ Qt
+
+
+
@@ -969,6 +1008,8 @@ color: rgb(238, 238, 236);
horizontalSliderScreenDPI
checkBoxMusicAudioChannel
checkBoxSpeechAudioChannel
+ radioButtonRtAudio
+ radioButtonQtAudio
checkBoxEnableTouchscreen
listWidgetButtons
checkBoxPlayButton