mirror of https://github.com/f1xpl/openauto.git
Add settings for selection of audio output backend
parent
b0bb0c7b4f
commit
4d53277763
|
@ -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 <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
namespace f1x
|
||||||
|
{
|
||||||
|
namespace openauto
|
||||||
|
{
|
||||||
|
namespace autoapp
|
||||||
|
{
|
||||||
|
namespace configuration
|
||||||
|
{
|
||||||
|
|
||||||
|
enum class AudioOutputBackendType
|
||||||
|
{
|
||||||
|
RTAUDIO,
|
||||||
|
QT
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -69,6 +69,8 @@ public:
|
||||||
void setMusicAudioChannelEnabled(bool value) override;
|
void setMusicAudioChannelEnabled(bool value) override;
|
||||||
bool speechAudioChannelEnabled() const override;
|
bool speechAudioChannelEnabled() const override;
|
||||||
void setSpeechAudioChannelEnabled(bool value) override;
|
void setSpeechAudioChannelEnabled(bool value) override;
|
||||||
|
AudioOutputBackendType getAudioOutputBackendType() const override;
|
||||||
|
void setAudioOutputBackendType(AudioOutputBackendType value) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void readButtonCodes(boost::property_tree::ptree& iniConfig);
|
void readButtonCodes(boost::property_tree::ptree& iniConfig);
|
||||||
|
@ -88,6 +90,7 @@ private:
|
||||||
std::string bluetoothRemoteAdapterAddress_;
|
std::string bluetoothRemoteAdapterAddress_;
|
||||||
bool musicAudioChannelEnabled_;
|
bool musicAudioChannelEnabled_;
|
||||||
bool speechAudiochannelEnabled_;
|
bool speechAudiochannelEnabled_;
|
||||||
|
AudioOutputBackendType audioOutputBackendType_;
|
||||||
|
|
||||||
static const std::string cConfigFileName;
|
static const std::string cConfigFileName;
|
||||||
|
|
||||||
|
@ -103,6 +106,7 @@ private:
|
||||||
|
|
||||||
static const std::string cAudioMusicAudioChannelEnabled;
|
static const std::string cAudioMusicAudioChannelEnabled;
|
||||||
static const std::string cAudioSpeechAudioChannelEnabled;
|
static const std::string cAudioSpeechAudioChannelEnabled;
|
||||||
|
static const std::string cAudioOutputBackendType;
|
||||||
|
|
||||||
static const std::string cBluetoothAdapterTypeKey;
|
static const std::string cBluetoothAdapterTypeKey;
|
||||||
static const std::string cBluetoothRemoteAdapterAddressKey;
|
static const std::string cBluetoothRemoteAdapterAddressKey;
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include <aasdk_proto/ButtonCodeEnum.pb.h>
|
#include <aasdk_proto/ButtonCodeEnum.pb.h>
|
||||||
#include <f1x/openauto/autoapp/Configuration/BluetootAdapterType.hpp>
|
#include <f1x/openauto/autoapp/Configuration/BluetootAdapterType.hpp>
|
||||||
#include <f1x/openauto/autoapp/Configuration/HandednessOfTrafficType.hpp>
|
#include <f1x/openauto/autoapp/Configuration/HandednessOfTrafficType.hpp>
|
||||||
|
#include <f1x/openauto/autoapp/Configuration/AudioOutputBackendType.hpp>
|
||||||
|
|
||||||
namespace f1x
|
namespace f1x
|
||||||
{
|
{
|
||||||
|
@ -77,6 +78,8 @@ public:
|
||||||
virtual void setMusicAudioChannelEnabled(bool value) = 0;
|
virtual void setMusicAudioChannelEnabled(bool value) = 0;
|
||||||
virtual bool speechAudioChannelEnabled() const = 0;
|
virtual bool speechAudioChannelEnabled() const = 0;
|
||||||
virtual void setSpeechAudioChannelEnabled(bool value) = 0;
|
virtual void setSpeechAudioChannelEnabled(bool value) = 0;
|
||||||
|
virtual AudioOutputBackendType getAudioOutputBackendType() const = 0;
|
||||||
|
virtual void setAudioOutputBackendType(AudioOutputBackendType value) = 0;
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -40,6 +40,7 @@ private:
|
||||||
IService::Pointer createVideoService(aasdk::messenger::IMessenger::Pointer messenger);
|
IService::Pointer createVideoService(aasdk::messenger::IMessenger::Pointer messenger);
|
||||||
IService::Pointer createBluetoothService(aasdk::messenger::IMessenger::Pointer messenger);
|
IService::Pointer createBluetoothService(aasdk::messenger::IMessenger::Pointer messenger);
|
||||||
IService::Pointer createInputService(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_;
|
boost::asio::io_service& ioService_;
|
||||||
configuration::IConfiguration::Pointer configuration_;
|
configuration::IConfiguration::Pointer configuration_;
|
||||||
|
|
|
@ -42,6 +42,7 @@ const std::string Configuration::cVideoMarginHeight = "Video.MarginHeight";
|
||||||
|
|
||||||
const std::string Configuration::cAudioMusicAudioChannelEnabled = "Audio.MusicAudioChannelEnabled";
|
const std::string Configuration::cAudioMusicAudioChannelEnabled = "Audio.MusicAudioChannelEnabled";
|
||||||
const std::string Configuration::cAudioSpeechAudioChannelEnabled = "Audio.SpeechAudioChannelEnabled";
|
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::cBluetoothAdapterTypeKey = "Bluetooth.AdapterType";
|
||||||
const std::string Configuration::cBluetoothRemoteAdapterAddressKey = "Bluetooth.RemoteAdapterAddress";
|
const std::string Configuration::cBluetoothRemoteAdapterAddressKey = "Bluetooth.RemoteAdapterAddress";
|
||||||
|
@ -101,6 +102,7 @@ void Configuration::load()
|
||||||
|
|
||||||
musicAudioChannelEnabled_ = iniConfig.get<bool>(cAudioMusicAudioChannelEnabled, true);
|
musicAudioChannelEnabled_ = iniConfig.get<bool>(cAudioMusicAudioChannelEnabled, true);
|
||||||
speechAudiochannelEnabled_ = iniConfig.get<bool>(cAudioSpeechAudioChannelEnabled, true);
|
speechAudiochannelEnabled_ = iniConfig.get<bool>(cAudioSpeechAudioChannelEnabled, true);
|
||||||
|
audioOutputBackendType_ = static_cast<AudioOutputBackendType>(iniConfig.get<uint32_t>(cAudioOutputBackendType, static_cast<uint32_t>(AudioOutputBackendType::RTAUDIO)));
|
||||||
}
|
}
|
||||||
catch(const boost::property_tree::ini_parser_error& e)
|
catch(const boost::property_tree::ini_parser_error& e)
|
||||||
{
|
{
|
||||||
|
@ -126,6 +128,7 @@ void Configuration::reset()
|
||||||
bluetoothRemoteAdapterAddress_ = "";
|
bluetoothRemoteAdapterAddress_ = "";
|
||||||
musicAudioChannelEnabled_ = true;
|
musicAudioChannelEnabled_ = true;
|
||||||
speechAudiochannelEnabled_ = true;
|
speechAudiochannelEnabled_ = true;
|
||||||
|
audioOutputBackendType_ = AudioOutputBackendType::RTAUDIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Configuration::save()
|
void Configuration::save()
|
||||||
|
@ -149,6 +152,7 @@ void Configuration::save()
|
||||||
|
|
||||||
iniConfig.put<bool>(cAudioMusicAudioChannelEnabled, musicAudioChannelEnabled_);
|
iniConfig.put<bool>(cAudioMusicAudioChannelEnabled, musicAudioChannelEnabled_);
|
||||||
iniConfig.put<bool>(cAudioSpeechAudioChannelEnabled, speechAudiochannelEnabled_);
|
iniConfig.put<bool>(cAudioSpeechAudioChannelEnabled, speechAudiochannelEnabled_);
|
||||||
|
iniConfig.put<uint32_t>(cAudioOutputBackendType, static_cast<uint32_t>(audioOutputBackendType_));
|
||||||
boost::property_tree::ini_parser::write_ini(cConfigFileName, iniConfig);
|
boost::property_tree::ini_parser::write_ini(cConfigFileName, iniConfig);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -282,6 +286,16 @@ void Configuration::setSpeechAudioChannelEnabled(bool value)
|
||||||
speechAudiochannelEnabled_ = value;
|
speechAudiochannelEnabled_ = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AudioOutputBackendType Configuration::getAudioOutputBackendType() const
|
||||||
|
{
|
||||||
|
return audioOutputBackendType_;
|
||||||
|
}
|
||||||
|
|
||||||
|
void Configuration::setAudioOutputBackendType(AudioOutputBackendType value)
|
||||||
|
{
|
||||||
|
audioOutputBackendType_ = value;
|
||||||
|
}
|
||||||
|
|
||||||
void Configuration::readButtonCodes(boost::property_tree::ptree& iniConfig)
|
void Configuration::readButtonCodes(boost::property_tree::ptree& iniConfig)
|
||||||
{
|
{
|
||||||
this->insertButtonCode(iniConfig, cInputPlayButtonKey, aasdk::proto::enums::ButtonCode::PLAY);
|
this->insertButtonCode(iniConfig, cInputPlayButtonKey, aasdk::proto::enums::ButtonCode::PLAY);
|
||||||
|
|
|
@ -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));
|
IAudioInput::Pointer audioInput(new QtAudioInput(1, 16, 16000), std::bind(&QObject::deleteLater, std::placeholders::_1));
|
||||||
serviceList.emplace_back(std::make_shared<AudioInputService>(ioService_, messenger, std::move(audioInput)));
|
serviceList.emplace_back(std::make_shared<AudioInputService>(ioService_, messenger, std::move(audioInput)));
|
||||||
|
this->createAudioServices(serviceList, messenger);
|
||||||
if(configuration_->musicAudioChannelEnabled())
|
|
||||||
{
|
|
||||||
//IAudioOutput::Pointer mediaAudioOutput(new QtAudioOutput(2, 16, 48000), std::bind(&QObject::deleteLater, std::placeholders::_1));
|
|
||||||
auto mediaAudioOutput(std::make_shared<RtAudioOutput>(2, 16, 48000));
|
|
||||||
serviceList.emplace_back(std::make_shared<MediaAudioService>(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<RtAudioOutput>(1, 16, 16000));
|
|
||||||
serviceList.emplace_back(std::make_shared<SpeechAudioService>(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<RtAudioOutput>(1, 16, 16000));
|
|
||||||
serviceList.emplace_back(std::make_shared<SystemAudioService>(ioService_, messenger, std::move(systemAudioOutput)));
|
|
||||||
|
|
||||||
serviceList.emplace_back(std::make_shared<SensorService>(ioService_, messenger));
|
serviceList.emplace_back(std::make_shared<SensorService>(ioService_, messenger));
|
||||||
serviceList.emplace_back(this->createVideoService(messenger));
|
serviceList.emplace_back(this->createVideoService(messenger));
|
||||||
serviceList.emplace_back(this->createBluetoothService(messenger));
|
serviceList.emplace_back(this->createBluetoothService(messenger));
|
||||||
|
@ -145,6 +127,33 @@ IService::Pointer ServiceFactory::createInputService(aasdk::messenger::IMessenge
|
||||||
return std::make_shared<InputService>(ioService_, messenger, std::move(inputDevice));
|
return std::make_shared<InputService>(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<RtAudioOutput>(2, 16, 48000) :
|
||||||
|
IAudioOutput::Pointer(new QtAudioOutput(2, 16, 48000), std::bind(&QObject::deleteLater, std::placeholders::_1));
|
||||||
|
|
||||||
|
serviceList.emplace_back(std::make_shared<MediaAudioService>(ioService_, messenger, std::move(mediaAudioOutput)));
|
||||||
|
}
|
||||||
|
|
||||||
|
if(configuration_->speechAudioChannelEnabled())
|
||||||
|
{
|
||||||
|
auto speechAudioOutput = configuration_->getAudioOutputBackendType() == configuration::AudioOutputBackendType::RTAUDIO ?
|
||||||
|
std::make_shared<RtAudioOutput>(1, 16, 16000) :
|
||||||
|
IAudioOutput::Pointer(new QtAudioOutput(1, 16, 16000), std::bind(&QObject::deleteLater, std::placeholders::_1));
|
||||||
|
|
||||||
|
serviceList.emplace_back(std::make_shared<SpeechAudioService>(ioService_, messenger, std::move(speechAudioOutput)));
|
||||||
|
}
|
||||||
|
|
||||||
|
auto systemAudioOutput = configuration_->getAudioOutputBackendType() == configuration::AudioOutputBackendType::RTAUDIO ?
|
||||||
|
std::make_shared<RtAudioOutput>(1, 16, 16000) :
|
||||||
|
IAudioOutput::Pointer(new QtAudioOutput(1, 16, 16000), std::bind(&QObject::deleteLater, std::placeholders::_1));
|
||||||
|
|
||||||
|
serviceList.emplace_back(std::make_shared<SystemAudioService>(ioService_, messenger, std::move(systemAudioOutput)));
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -97,6 +97,7 @@ void SettingsWindow::onSave()
|
||||||
|
|
||||||
configuration_->setMusicAudioChannelEnabled(ui_->checkBoxMusicAudioChannel->isChecked());
|
configuration_->setMusicAudioChannelEnabled(ui_->checkBoxMusicAudioChannel->isChecked());
|
||||||
configuration_->setSpeechAudioChannelEnabled(ui_->checkBoxSpeechAudioChannel->isChecked());
|
configuration_->setSpeechAudioChannelEnabled(ui_->checkBoxSpeechAudioChannel->isChecked());
|
||||||
|
configuration_->setAudioOutputBackendType(ui_->radioButtonRtAudio->isChecked() ? configuration::AudioOutputBackendType::RTAUDIO : configuration::AudioOutputBackendType::QT);
|
||||||
|
|
||||||
configuration_->save();
|
configuration_->save();
|
||||||
this->close();
|
this->close();
|
||||||
|
@ -149,6 +150,10 @@ void SettingsWindow::load()
|
||||||
|
|
||||||
ui_->checkBoxMusicAudioChannel->setChecked(configuration_->musicAudioChannelEnabled());
|
ui_->checkBoxMusicAudioChannel->setChecked(configuration_->musicAudioChannelEnabled());
|
||||||
ui_->checkBoxSpeechAudioChannel->setChecked(configuration_->speechAudioChannelEnabled());
|
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()
|
void SettingsWindow::loadButtonCheckBoxes()
|
||||||
|
|
|
@ -486,6 +486,45 @@ color: rgb(238, 238, 236);</string>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
|
<widget class="QGroupBox" name="groupBoxAudioOutputBackend">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>130</y>
|
||||||
|
<width>621</width>
|
||||||
|
<height>61</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="title">
|
||||||
|
<string>Output backend</string>
|
||||||
|
</property>
|
||||||
|
<widget class="QRadioButton" name="radioButtonRtAudio">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>10</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>112</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>RT audio</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
<widget class="QRadioButton" name="radioButtonQtAudio">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>140</x>
|
||||||
|
<y>30</y>
|
||||||
|
<width>112</width>
|
||||||
|
<height>23</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Qt</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QWidget" name="tabInput">
|
<widget class="QWidget" name="tabInput">
|
||||||
<attribute name="title">
|
<attribute name="title">
|
||||||
|
@ -969,6 +1008,8 @@ color: rgb(238, 238, 236);</string>
|
||||||
<tabstop>horizontalSliderScreenDPI</tabstop>
|
<tabstop>horizontalSliderScreenDPI</tabstop>
|
||||||
<tabstop>checkBoxMusicAudioChannel</tabstop>
|
<tabstop>checkBoxMusicAudioChannel</tabstop>
|
||||||
<tabstop>checkBoxSpeechAudioChannel</tabstop>
|
<tabstop>checkBoxSpeechAudioChannel</tabstop>
|
||||||
|
<tabstop>radioButtonRtAudio</tabstop>
|
||||||
|
<tabstop>radioButtonQtAudio</tabstop>
|
||||||
<tabstop>checkBoxEnableTouchscreen</tabstop>
|
<tabstop>checkBoxEnableTouchscreen</tabstop>
|
||||||
<tabstop>listWidgetButtons</tabstop>
|
<tabstop>listWidgetButtons</tabstop>
|
||||||
<tabstop>checkBoxPlayButton</tabstop>
|
<tabstop>checkBoxPlayButton</tabstop>
|
||||||
|
|
Loading…
Reference in New Issue