Completed enumeration of audio devices

refs #36
- Cvatlib_Voice_Simple object is created and setup
- enumerates automatically a list of in and output devices.
- both device lists are accessable immediately
- added a sample demonstrating the interface so far

refs #81
This commit is contained in:
Roland Winklmeier
2013-11-29 21:47:49 +01:00
committed by Mathew Sutcliffe
parent 158de31c0b
commit b511f2ffaa
6 changed files with 97 additions and 14 deletions

View File

@@ -52,6 +52,7 @@ equals(WITH_SAMPLES, ON) {
SUBDIRS += samples/blackgui/sample_blackgui.pro
SUBDIRS += samples/blackcore/sample_blackcore.pro
SUBDIRS += samples/blackmisc/sample_blackmisc.pro
SUBDIRS += samples/voiceclient/sample_voice_client.pro
}
equals(WITH_UNITTESTS, ON) {

View File

@@ -0,0 +1,29 @@
/* Copyright (C) 2013 VATSIM Community / authors
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#include "blackcore/voiceclient_vatlib.h"
#include <QCoreApplication>
#include <QDebug>
using namespace BlackMisc::Voice;
int main(int argc, char *argv[])
{
QCoreApplication app (argc, argv);
BlackMisc::IContext::getInstance().setObject(*new BlackMisc::CDebug());
BlackMisc::IContext::getInstance().setObject<BlackCore::IVoiceClient>(*new BlackCore::CVoiceClientVatlib());
BlackCore::IVoiceClient *voiceClient = BlackMisc::IContext::getInstance().singleton<BlackCore::IVoiceClient>();
QList<COutputAudioDevice> outputDevices = voiceClient->audioOutputDevices(0);
qDebug() << "Found " << outputDevices.size() << " output devices:";
foreach (COutputAudioDevice device, outputDevices)
{
qDebug() << device.name();
}
app.exec();
}

View File

@@ -0,0 +1,26 @@
include (../../externals.pri)
QT += core dbus
QT -= gui
TARGET = sample_voice_client
TEMPLATE = app
CONFIG += console c++11
CONFIG -= app_bundle
DEPENDPATH += . ../../src
INCLUDEPATH += . ../../src
SOURCES += *.cpp
HEADERS += *.h
LIBS += -L../../lib -lblackcore -lblackmisc
LIBS += -lvatlib
win32:!win32-g++*: PRE_TARGETDEPS += ../../lib/blackmisc.lib \
../../lib/blackcore.lib
else: PRE_TARGETDEPS += ../../lib/libblackmisc.a \
../../lib/libblackcore.a
DESTDIR = ../../bin

View File

@@ -60,8 +60,8 @@ namespace BlackCore
// and signals emitted in case of a change. This way other objects can listen to this signals and call the getter
// again.
virtual void roomUserList(const uint32_t comUnit) = 0;
virtual void audioInputDevices(const uint32_t comUnit) = 0;
virtual void audioOutputDevices(const uint32_t comUnit) = 0;
virtual const QList<BlackMisc::Voice::CInputAudioDevice> & audioInputDevices(const uint32_t comUnit) const = 0;
virtual const QList<BlackMisc::Voice::COutputAudioDevice> & audioOutputDevices(const uint32_t comUnit) const = 0;
virtual void setInputDevice(const uint32_t comUnit, BlackMisc::Voice::CInputAudioDevice &device) = 0;
virtual void setOutputDevice(const uint32_t comUnit, BlackMisc::Voice::COutputAudioDevice &device) = 0;

View File

@@ -5,13 +5,22 @@
#include "voiceclient_vatlib.h"
#include <QDebug>
namespace BlackCore
{
CVoiceClientVatlib::CVoiceClientVatlib(QObject *parent) :
IVoiceClient(parent),
m_voice(Create_Cvatlib_Voice_Simple())
{
m_voice->Setup(true, 3290, 2, 1, onRoomStatusUpdate, this);
m_voice->GetInputDevices(onInputHardwareDeviceReceived, this);
m_voice->GetOutputDevices(onOutputHardwareDeviceReceived, this);
}
CVoiceClientVatlib::~CVoiceClientVatlib()
{
}
void CVoiceClientVatlib::setCallsign(const BlackMisc::Aviation::CCallsign &callsign)
@@ -59,14 +68,14 @@ namespace BlackCore
}
void CVoiceClientVatlib::audioInputDevices(const uint32_t comIndex)
const QList<BlackMisc::Voice::CInputAudioDevice> &CVoiceClientVatlib::audioInputDevices(const uint32_t comIndex) const
{
return m_inputDevices;
}
void CVoiceClientVatlib::audioOutputDevices(const uint32_t comIndex)
const QList<BlackMisc::Voice::COutputAudioDevice> &CVoiceClientVatlib::audioOutputDevices(const uint32_t comIndex) const
{
return m_outputDevices;
}
void CVoiceClientVatlib::setInputDevice(const uint32_t comUnit, BlackMisc::Voice::CInputAudioDevice &device)
@@ -84,6 +93,15 @@ namespace BlackCore
}
/********************************** * * * * * * * * * * * * * * * * * * * ************************************/
/********************************** shimlib callbacks ************************************/
/********************************** * * * * * * * * * * * * * * * * * * * ************************************/
CVoiceClientVatlib *cbvar_cast(void *cbvar)
{
return static_cast<CVoiceClientVatlib *>(cbvar);
}
void CVoiceClientVatlib::onRoomStatusUpdate(Cvatlib_Voice_Simple *obj, Cvatlib_Voice_Simple::roomStatusUpdate upd, int32_t roomIndex, void *cbVar)
{
@@ -94,9 +112,16 @@ namespace BlackCore
}
void CVoiceClientVatlib::onHardwareDeviceReceived(Cvatlib_Voice_Simple *obj, const char *name, void *cbVar)
void CVoiceClientVatlib::onInputHardwareDeviceReceived(Cvatlib_Voice_Simple *obj, const char *name, void *cbVar)
{
BlackMisc::Voice::CInputAudioDevice inputDevice(cbvar_cast(cbVar)->m_inputDevices.size(), QString(name));
cbvar_cast(cbVar)->m_inputDevices.append(inputDevice);
}
void CVoiceClientVatlib::onOutputHardwareDeviceReceived(Cvatlib_Voice_Simple *obj, const char *name, void *cbVar)
{
BlackMisc::Voice::COutputAudioDevice outputDevice(cbvar_cast(cbVar)->m_outputDevices.size(), QString(name));
cbvar_cast(cbVar)->m_outputDevices.append(outputDevice);
}
} // namespace BlackCore

View File

@@ -32,8 +32,8 @@ namespace BlackCore
virtual bool isConnected(const uint32_t comUnit);
virtual void roomUserList(const uint32_t comUnit);
virtual void audioInputDevices(const uint32_t comUnit);
virtual void audioOutputDevices(const uint32_t comUnit);
virtual const QList<BlackMisc::Voice::CInputAudioDevice> &audioInputDevices(const uint32_t comUnit) const ;
virtual const QList<BlackMisc::Voice::COutputAudioDevice> & audioOutputDevices(const uint32_t comUnit) const;
virtual void setInputDevice(const uint32_t comUnit, BlackMisc::Voice::CInputAudioDevice &device);
virtual void setOutputDevice(const uint32_t comUnit, BlackMisc::Voice::COutputAudioDevice &device);
@@ -47,14 +47,16 @@ namespace BlackCore
private:
// shimlib callbacks
void onRoomStatusUpdate(Cvatlib_Voice_Simple* obj, Cvatlib_Voice_Simple::roomStatusUpdate upd, INT roomIndex, void* cbVar);
void onRoomUserReceived(Cvatlib_Voice_Simple* obj, const char* name, void* cbVar);
void onHardwareDeviceReceived(Cvatlib_Voice_Simple* obj, const char* name, void* cbVar);
static void onRoomStatusUpdate(Cvatlib_Voice_Simple* obj, Cvatlib_Voice_Simple::roomStatusUpdate upd, INT roomIndex, void* cbVar);
static void onRoomUserReceived(Cvatlib_Voice_Simple* obj, const char* name, void* cbVar);
static void onInputHardwareDeviceReceived(Cvatlib_Voice_Simple* obj, const char* name, void* cbVar);
static void onOutputHardwareDeviceReceived(Cvatlib_Voice_Simple* obj, const char* name, void* cbVar);
QScopedPointer<Cvatlib_Voice_Simple> m_voice;
BlackMisc::Aviation::CCallsign m_callsign;
QMap<uint32_t, BlackMisc::Voice::CVoiceRoom> m_voiceRoomMap;
QList<BlackMisc::Voice::CInputAudioDevice> m_inputDevices;
QList<BlackMisc::Voice::COutputAudioDevice> m_outputDevices;
};
} // namespace BlackCore