mirror of
https://github.com/swift-project/pilotclient.git
synced 2026-03-22 14:55:36 +08:00
refs #372 Adapt CContextAudio and voice sample to IAudioMixer
This commit is contained in:
committed by
Klaus Basan
parent
7ba3a50e18
commit
ff56d64ff2
@@ -11,7 +11,7 @@
|
||||
|
||||
using namespace BlackMisc::Audio;
|
||||
using namespace BlackMisc::Aviation;
|
||||
|
||||
using namespace BlackCore;
|
||||
|
||||
/*
|
||||
* Client
|
||||
@@ -24,15 +24,19 @@ Client::Client(QObject *parent) :
|
||||
m_channelCom1 = m_voice->createVoiceChannel();
|
||||
m_inputDevice = m_voice->createInputDevice();
|
||||
m_outputDevice = m_voice->createOutputDevice();
|
||||
m_audioMixer = m_voice->createAudioMixer();
|
||||
|
||||
m_voice->connectChannelOutputDevice(m_channelCom1.get(), m_outputDevice.get());
|
||||
m_voice->connectVoice(m_inputDevice.get(), m_audioMixer.get(), IAudioMixer::InputMicrophone);
|
||||
m_voice->connectVoice(m_channelCom1.data(), m_audioMixer.get(), IAudioMixer::InputVoiceChannel1);
|
||||
m_voice->connectVoice(m_audioMixer.get(), IAudioMixer::OutputOutputDevice1, m_outputDevice.get());
|
||||
m_audioMixer->makeMixerConnection(IAudioMixer::InputVoiceChannel1, IAudioMixer::OutputOutputDevice1);
|
||||
|
||||
using namespace BlackCore;
|
||||
connect(m_channelCom1.get(), &IVoiceChannel::connectionStatusChanged, this, &Client::connectionStatusChanged);
|
||||
connect(m_channelCom1.get(), &IVoiceChannel::audioStarted, this, &Client::audioStartedStream);
|
||||
connect(m_channelCom1.get(), &IVoiceChannel::audioStopped, this, &Client::audioStoppedStream);
|
||||
connect(m_channelCom1.get(), &IVoiceChannel::userJoinedRoom, this, &Client::userJoinedRoom);
|
||||
connect(m_channelCom1.get(), &IVoiceChannel::userLeftRoom, this, &Client::userLeftRoom);
|
||||
connect(m_channelCom1.data(), &IVoiceChannel::connectionStatusChanged, this, &Client::connectionStatusChanged);
|
||||
connect(m_channelCom1.data(), &IVoiceChannel::audioStarted, this, &Client::audioStartedStream);
|
||||
connect(m_channelCom1.data(), &IVoiceChannel::audioStopped, this, &Client::audioStoppedStream);
|
||||
connect(m_channelCom1.data(), &IVoiceChannel::userJoinedRoom, this, &Client::userJoinedRoom);
|
||||
connect(m_channelCom1.data(), &IVoiceChannel::userLeftRoom, this, &Client::userLeftRoom);
|
||||
|
||||
using namespace std::placeholders;
|
||||
m_commands["help"] = std::bind(&Client::help, this, _1);
|
||||
@@ -167,7 +171,7 @@ void Client::enableLoopbackCmd(QTextStream &/*args*/)
|
||||
{
|
||||
m_stdout << endl;
|
||||
m_stdout << "Enabling audio loopback." << endl;
|
||||
m_voice->enableAudioLoopback(m_inputDevice.get(), m_outputDevice.get());
|
||||
m_audioMixer->makeMixerConnection(IAudioMixer::InputMicrophone, IAudioMixer::OutputOutputDevice1);
|
||||
printLinePrefix();
|
||||
}
|
||||
|
||||
@@ -175,7 +179,7 @@ void Client::disableLoopbackCmd(QTextStream &/*args*/)
|
||||
{
|
||||
m_stdout << endl;
|
||||
m_stdout << "Disabling audio loopback." << endl;
|
||||
m_voice->enableAudioLoopback(m_inputDevice.get(), nullptr);
|
||||
m_audioMixer->removeMixerConnection(IAudioMixer::InputMicrophone, IAudioMixer::OutputOutputDevice1);
|
||||
printLinePrefix();
|
||||
}
|
||||
|
||||
|
||||
@@ -8,6 +8,7 @@
|
||||
|
||||
#include "blackcore/voice.h"
|
||||
#include "blackcore/voice_channel.h"
|
||||
#include "blackcore/audio_mixer.h"
|
||||
|
||||
#include <QObject>
|
||||
#include <QPointer>
|
||||
@@ -15,6 +16,7 @@
|
||||
#include <QMap>
|
||||
#include <QThread>
|
||||
#include <QTextStream>
|
||||
#include <QSharedPointer>
|
||||
|
||||
class Client : public QObject
|
||||
{
|
||||
@@ -62,7 +64,8 @@ private:
|
||||
BlackCore::IVoice *m_voice;
|
||||
std::unique_ptr<BlackCore::IAudioInputDevice> m_inputDevice;
|
||||
std::unique_ptr<BlackCore::IAudioOutputDevice> m_outputDevice;
|
||||
std::unique_ptr<BlackCore::IVoiceChannel> m_channelCom1;
|
||||
std::unique_ptr<BlackCore::IAudioMixer> m_audioMixer;
|
||||
QSharedPointer<BlackCore::IVoiceChannel> m_channelCom1;
|
||||
QTextStream m_stdout;
|
||||
|
||||
};
|
||||
|
||||
@@ -51,8 +51,17 @@ namespace BlackCore
|
||||
m_voiceInputDevice = m_voice->createInputDevice();
|
||||
m_voiceOutputDevice = m_voice->createOutputDevice();
|
||||
|
||||
m_voice->connectChannelOutputDevice(m_channelCom1.get(), m_voiceOutputDevice.get());
|
||||
m_voice->connectChannelOutputDevice(m_channelCom2.get(), m_voiceOutputDevice.get());
|
||||
m_audioMixer = m_voice->createAudioMixer();
|
||||
|
||||
m_voice->connectVoice(m_voiceInputDevice.get(), m_audioMixer.get(), IAudioMixer::InputMicrophone);
|
||||
m_voice->connectVoice(m_channelCom1.get(), m_audioMixer.get(), IAudioMixer::InputVoiceChannel1);
|
||||
m_voice->connectVoice(m_channelCom2.get(), m_audioMixer.get(), IAudioMixer::InputVoiceChannel2);
|
||||
m_voice->connectVoice(m_audioMixer.get(), IAudioMixer::OutputOutputDevice1, m_voiceOutputDevice.get());
|
||||
m_voice->connectVoice(m_audioMixer.get(), IAudioMixer::OutputVoiceChannel1, m_channelCom1.get());
|
||||
m_voice->connectVoice(m_audioMixer.get(), IAudioMixer::OutputVoiceChannel2, m_channelCom2.get());
|
||||
|
||||
m_audioMixer->makeMixerConnection(IAudioMixer::InputVoiceChannel1, IAudioMixer::OutputOutputDevice1);
|
||||
m_audioMixer->makeMixerConnection(IAudioMixer::InputVoiceChannel2, IAudioMixer::OutputOutputDevice1);
|
||||
|
||||
// 4. load sounds (init), not possible in own thread
|
||||
QTimer::singleShot(10 * 1000, this, SLOT(ps_initNotificationSounds()));
|
||||
@@ -406,9 +415,9 @@ namespace BlackCore
|
||||
Q_ASSERT(this->m_voice);
|
||||
CLogMessage(this, CLogCategory::contextSlot()).debug() << Q_FUNC_INFO;
|
||||
if (enable)
|
||||
m_voice->enableAudioLoopback(m_voiceInputDevice.get(), m_voiceOutputDevice.get());
|
||||
m_audioMixer->makeMixerConnection(IAudioMixer::InputMicrophone, IAudioMixer::OutputOutputDevice1);
|
||||
else
|
||||
m_voice->enableAudioLoopback(m_voiceInputDevice.get(), nullptr);
|
||||
m_audioMixer->removeMixerConnection(IAudioMixer::InputMicrophone, IAudioMixer::OutputOutputDevice1);
|
||||
}
|
||||
|
||||
bool CContextAudio::parseCommandLine(const QString &commandLine)
|
||||
@@ -462,8 +471,8 @@ namespace BlackCore
|
||||
void CContextAudio::ps_setVoiceTransmission(bool enable)
|
||||
{
|
||||
// FIXME: Use the 'active' channel instead of hardcoded COM1
|
||||
if (enable) m_voice->connectChannelInputDevice(m_voiceInputDevice.get(), m_channelCom1.get());
|
||||
else m_voice->connectChannelInputDevice(nullptr, m_channelCom1.get());
|
||||
if (enable) m_audioMixer->makeMixerConnection(IAudioMixer::InputMicrophone, IAudioMixer::OutputVoiceChannel1);
|
||||
else m_audioMixer->removeMixerConnection(IAudioMixer::InputMicrophone, IAudioMixer::OutputVoiceChannel1);
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
@@ -19,6 +19,7 @@
|
||||
#include "voice.h"
|
||||
#include "voice_channel.h"
|
||||
#include "audio_device.h"
|
||||
#include "audio_mixer.h"
|
||||
#include "input_manager.h"
|
||||
#include "blackinput/keyboard.h"
|
||||
#include "blackmisc/voiceroomlist.h"
|
||||
@@ -166,15 +167,19 @@ namespace BlackCore
|
||||
//! Connection in transition
|
||||
bool inTransitionState() const;
|
||||
|
||||
std::unique_ptr<IVoice> m_voice; //!< underlying voice lib
|
||||
|
||||
CInputManager *m_inputManager = nullptr;
|
||||
CInputManager::RegistrationHandle m_handlePtt;
|
||||
|
||||
std::unique_ptr<IVoice> m_voice; //!< underlying voice lib
|
||||
std::unique_ptr<IAudioMixer> m_audioMixer;
|
||||
|
||||
int m_outDeviceVolume = 100;
|
||||
std::unique_ptr<IVoiceChannel> m_channelCom1;
|
||||
std::unique_ptr<IVoiceChannel> m_channelCom2;
|
||||
std::unique_ptr<IAudioOutputDevice> m_voiceOutputDevice;
|
||||
int m_outDeviceVolume = 100;
|
||||
std::unique_ptr<IAudioInputDevice> m_voiceInputDevice;
|
||||
|
||||
|
||||
};
|
||||
} // namespace
|
||||
|
||||
|
||||
Reference in New Issue
Block a user