kopia lustrzana https://gitlab.com/eliggett/wfview
Fix wfserver device detection
rodzic
e6a5152734
commit
39dacf54f2
|
@ -82,6 +82,7 @@ void audioDevices::enumerate()
|
|||
"(" << numInputDevices << ") Input Device : " << deviceInfo.description();
|
||||
#endif
|
||||
|
||||
#ifndef BUILD_WFSERVER
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(6,0,0))
|
||||
if (fm.boundingRect(deviceInfo.deviceName()).width() > numCharsIn)
|
||||
numCharsIn = fm.boundingRect(deviceInfo.deviceName()).width();
|
||||
|
@ -89,6 +90,7 @@ void audioDevices::enumerate()
|
|||
if (fm.boundingRect(deviceInfo.description()).width() > numCharsIn)
|
||||
numCharsIn = fm.boundingRect(deviceInfo.description()).width();
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if (defined(Q_OS_WIN) && (QT_VERSION < QT_VERSION_CHECK(6,0,0)))
|
||||
}
|
||||
|
@ -140,6 +142,7 @@ void audioDevices::enumerate()
|
|||
"(" << numOutputDevices << ") Output Device : " << deviceInfo.description();
|
||||
#endif
|
||||
|
||||
#ifndef BUILD_WFSERVER
|
||||
#if (QT_VERSION < QT_VERSION_CHECK(6,0,0))
|
||||
if (fm.boundingRect(deviceInfo.deviceName()).width() > numCharsOut)
|
||||
numCharsOut = fm.boundingRect(deviceInfo.deviceName()).width();
|
||||
|
@ -147,6 +150,7 @@ void audioDevices::enumerate()
|
|||
if (fm.boundingRect(deviceInfo.description()).width() > numCharsOut)
|
||||
numCharsOut = fm.boundingRect(deviceInfo.description()).width();
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#if (defined(Q_OS_WIN) && (QT_VERSION < QT_VERSION_CHECK(6,0,0)))
|
||||
}
|
||||
|
@ -186,8 +190,10 @@ void audioDevices::enumerate()
|
|||
isDefault = true;
|
||||
}
|
||||
inputs.append(audioDevice(QString(info->name), i,isDefault));
|
||||
#ifndef BUILD_WFSERVER
|
||||
if (fm.boundingRect(QString(info->name)).width() > numCharsIn)
|
||||
numCharsIn = fm.boundingRect(QString(info->name)).width();
|
||||
#endif
|
||||
|
||||
}
|
||||
if (info->maxOutputChannels > 0) {
|
||||
|
@ -199,8 +205,10 @@ void audioDevices::enumerate()
|
|||
isDefault = true;
|
||||
}
|
||||
outputs.append(audioDevice(QString(info->name), i,isDefault));
|
||||
#ifndef BUILD_WFSERVER
|
||||
if (fm.boundingRect(QString(info->name)).width() > numCharsOut)
|
||||
numCharsOut = fm.boundingRect(QString(info->name)).width();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
@ -260,9 +268,10 @@ void audioDevices::enumerate()
|
|||
}
|
||||
|
||||
inputs.append(audioDevice(QString::fromStdString(info.name), i, isDefault));
|
||||
|
||||
#ifndef BUILD_WFSERVER
|
||||
if (fm.boundingRect(QString::fromStdString(info.name)).width() > numCharsIn)
|
||||
numCharsIn = fm.boundingRect(QString::fromStdString(info.name)).width();
|
||||
#endif
|
||||
|
||||
}
|
||||
if (info.outputChannels > 0) {
|
||||
|
@ -276,9 +285,10 @@ void audioDevices::enumerate()
|
|||
}
|
||||
|
||||
outputs.append(audioDevice(QString::fromStdString(info.name), i, isDefault));
|
||||
|
||||
#ifndef BUILD_WFSERVER
|
||||
if (fm.boundingRect(QString::fromStdString(info.name)).width() > numCharsOut)
|
||||
numCharsOut = fm.boundingRect(QString::fromStdString(info.name)).width();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
|
195
servermain.cpp
195
servermain.cpp
|
@ -28,6 +28,7 @@ servermain::servermain(const QString settingsFile)
|
|||
qRegisterMetaType<rigstate*>();
|
||||
qRegisterMetaType<QList<radio_cap_packet>>();
|
||||
qRegisterMetaType<networkStatus>();
|
||||
qRegisterMetaType<codecType>();
|
||||
|
||||
setDefPrefs();
|
||||
|
||||
|
@ -35,6 +36,10 @@ servermain::servermain(const QString settingsFile)
|
|||
|
||||
loadSettings(); // Look for saved preferences
|
||||
|
||||
audioDev = new audioDevices(prefs.audioSystem, QFontMetrics(QFont()));
|
||||
connect(audioDev, SIGNAL(updated()), this, SLOT(updateAudioDevices()));
|
||||
audioDev->enumerate();
|
||||
|
||||
setInitialTiming();
|
||||
|
||||
openRig();
|
||||
|
@ -62,6 +67,10 @@ servermain::~servermain()
|
|||
serverThread->wait();
|
||||
}
|
||||
|
||||
if (audioDev != Q_NULLPTR) {
|
||||
delete audioDev;
|
||||
}
|
||||
|
||||
delete settings;
|
||||
|
||||
#if defined(PORTAUDIO)
|
||||
|
@ -527,6 +536,7 @@ void servermain::loadSettings()
|
|||
|
||||
tempPrefs->rig = Q_NULLPTR;
|
||||
tempPrefs->rigThread = Q_NULLPTR;
|
||||
|
||||
serverConfig.rigs.append(tempPrefs);
|
||||
if (tempNum == 0) {
|
||||
settings->endGroup();
|
||||
|
@ -537,167 +547,6 @@ void servermain::loadSettings()
|
|||
}
|
||||
|
||||
|
||||
/*
|
||||
Now we have an array of rig objects, we need to match the configured audio devices with physical devices
|
||||
*/
|
||||
switch (prefs.audioSystem)
|
||||
{
|
||||
case rtAudio:
|
||||
{
|
||||
#if defined(Q_OS_LINUX)
|
||||
RtAudio* audio = new RtAudio(RtAudio::Api::LINUX_ALSA);
|
||||
// RtAudio* audio = new RtAudio(RtAudio::Api::LINUX_PULSE);
|
||||
#elif defined(Q_OS_WIN)
|
||||
RtAudio* audio = new RtAudio(RtAudio::Api::WINDOWS_WASAPI);
|
||||
#elif defined(Q_OS_MACX)
|
||||
RtAudio* audio = new RtAudio(RtAudio::Api::MACOSX_CORE);
|
||||
#endif
|
||||
|
||||
// Enumerate audio devices, need to do before settings are loaded.
|
||||
std::map<int, std::string> apiMap;
|
||||
apiMap[RtAudio::MACOSX_CORE] = "OS-X Core Audio";
|
||||
apiMap[RtAudio::WINDOWS_ASIO] = "Windows ASIO";
|
||||
apiMap[RtAudio::WINDOWS_DS] = "Windows DirectSound";
|
||||
apiMap[RtAudio::WINDOWS_WASAPI] = "Windows WASAPI";
|
||||
apiMap[RtAudio::UNIX_JACK] = "Jack Client";
|
||||
apiMap[RtAudio::LINUX_ALSA] = "Linux ALSA";
|
||||
apiMap[RtAudio::LINUX_PULSE] = "Linux PulseAudio";
|
||||
apiMap[RtAudio::LINUX_OSS] = "Linux OSS";
|
||||
apiMap[RtAudio::RTAUDIO_DUMMY] = "RtAudio Dummy";
|
||||
|
||||
std::vector< RtAudio::Api > apis;
|
||||
RtAudio::getCompiledApi(apis);
|
||||
|
||||
qInfo(logAudio()) << "RtAudio Version " << QString::fromStdString(RtAudio::getVersion());
|
||||
|
||||
qInfo(logAudio()) << "Compiled APIs:";
|
||||
for (unsigned int i = 0; i < apis.size(); i++) {
|
||||
qInfo(logAudio()) << " " << QString::fromStdString(apiMap[apis[i]]);
|
||||
}
|
||||
|
||||
RtAudio::DeviceInfo info;
|
||||
|
||||
qInfo(logAudio()) << "Current API: " << QString::fromStdString(apiMap[audio->getCurrentApi()]);
|
||||
|
||||
unsigned int devices = audio->getDeviceCount();
|
||||
qInfo(logAudio()) << "Found " << devices << " audio device(s) *=default";
|
||||
|
||||
for (unsigned int i = 1; i < devices; i++) {
|
||||
info = audio->getDeviceInfo(i);
|
||||
for (RIGCONFIG* rig : serverConfig.rigs)
|
||||
{
|
||||
qDebug(logAudio()) << "Rig" << rig->rigName << "rxAudio device:" << rig->rxAudioSetup.name;
|
||||
qDebug(logAudio()) << "Rig" << rig->rigName << "txAudio device:" << rig->txAudioSetup.name;
|
||||
if (info.outputChannels > 0)
|
||||
{
|
||||
qInfo(logAudio()) << (info.isDefaultOutput ? "*" : " ") << "(" << i << ") Output Device : " << QString::fromStdString(info.name);
|
||||
if (rig->txAudioSetup.name.toStdString() == info.name) {
|
||||
rig->txAudioSetup.portInt = i;
|
||||
qDebug(logAudio()) << "Rig" << rig->rigName << "Selected txAudio device:" << QString(info.name.c_str());
|
||||
}
|
||||
}
|
||||
if (info.inputChannels > 0)
|
||||
{
|
||||
qInfo(logAudio()) << (info.isDefaultInput ? "*" : " ") << "(" << i << ") Input Device : " << QString::fromStdString(info.name);
|
||||
if (rig->rxAudioSetup.name.toStdString() == info.name) {
|
||||
rig->rxAudioSetup.portInt = i;
|
||||
qDebug(logAudio()) << "Rig" << rig->rigName << "Selected rxAudio device:" << QString(info.name.c_str());
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case portAudio:
|
||||
{
|
||||
// Use PortAudio device enumeration
|
||||
|
||||
PaError err;
|
||||
|
||||
err = Pa_Initialize();
|
||||
|
||||
if (err != paNoError)
|
||||
{
|
||||
qInfo(logAudio()) << "ERROR: Cannot initialize Portaudio";
|
||||
}
|
||||
|
||||
qInfo(logAudio()) << "PortAudio version: " << Pa_GetVersionInfo()->versionText;
|
||||
|
||||
int numDevices;
|
||||
numDevices = Pa_GetDeviceCount();
|
||||
qInfo(logAudio()) << "Pa_CountDevices returned" << numDevices;
|
||||
|
||||
const PaDeviceInfo* info;
|
||||
for (int i = 0; i < numDevices; i++)
|
||||
{
|
||||
info = Pa_GetDeviceInfo(i);
|
||||
for (RIGCONFIG* rig : serverConfig.rigs)
|
||||
{
|
||||
qDebug(logAudio()) << "Rig" << rig->rigName << "rxAudio device:" << rig->rxAudioSetup.name;
|
||||
qDebug(logAudio()) << "Rig" << rig->rigName << "txAudio device:" << rig->txAudioSetup.name;
|
||||
if (info->maxInputChannels > 0) {
|
||||
qDebug(logAudio()) << (i == Pa_GetDefaultInputDevice() ? "*" : " ") << "(" << i << ") Input Device : " << info->name;
|
||||
|
||||
if (rig->rxAudioSetup.name == info->name) {
|
||||
qDebug(logAudio()) << "Rig" << rig->rigName << "Selected rxAudio device:" << QString(info->name);
|
||||
rig->rxAudioSetup.portInt = i;
|
||||
}
|
||||
}
|
||||
if (info->maxOutputChannels > 0) {
|
||||
if (rig->txAudioSetup.name == info->name) {
|
||||
qDebug(logAudio()) << "Rig" << rig->rigName << "Selected txAudio device:" << QString(info->name);
|
||||
rig->txAudioSetup.portInt = i;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
case qtAudio:
|
||||
{
|
||||
const auto audioOutputs = QAudioDeviceInfo::availableDevices(QAudio::AudioOutput);
|
||||
const auto audioInputs = QAudioDeviceInfo::availableDevices(QAudio::AudioInput);
|
||||
//qInfo(logAudio()) << "Looking for audio input devices";
|
||||
for (const QAudioDeviceInfo& deviceInfo : audioInputs) {
|
||||
qDebug(logSystem()) << "Found Audio input: " << deviceInfo.deviceName();
|
||||
for (RIGCONFIG* rig : serverConfig.rigs)
|
||||
{
|
||||
qDebug(logAudio()) << "Rig" << rig->rigName << "rxAudio device:" << rig->rxAudioSetup.name;
|
||||
qDebug(logAudio()) << "Rig" << rig->rigName << "txAudio device:" << rig->txAudioSetup.name;
|
||||
if (deviceInfo.deviceName() == rig->rxAudioSetup.name
|
||||
#ifdef Q_OS_WIN
|
||||
&& deviceInfo.realm() == "wasapi"
|
||||
#endif
|
||||
)
|
||||
{
|
||||
qDebug(logAudio()) << "Rig" << rig->rigName << "Selected rxAudio device:" << deviceInfo.deviceName();
|
||||
rig->rxAudioSetup.port = deviceInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//qInfo(logAudio()) << "Looking for audio output devices";
|
||||
for (const QAudioDeviceInfo& deviceInfo : audioOutputs) {
|
||||
qDebug(logSystem()) << "Found Audio output: " << deviceInfo.deviceName();
|
||||
for (RIGCONFIG* rig : serverConfig.rigs)
|
||||
{
|
||||
if (deviceInfo.deviceName() == rig->txAudioSetup.name
|
||||
#ifdef Q_OS_WIN
|
||||
&& deviceInfo.realm() == "wasapi"
|
||||
#endif
|
||||
)
|
||||
{
|
||||
qDebug(logAudio()) << "Rig" << rig->rigName << "Selected txAudio device:" << deviceInfo.deviceName();
|
||||
rig->txAudioSetup.port = deviceInfo;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
settings->beginGroup("Server");
|
||||
serverConfig.enabled = settings->value("ServerEnabled", false).toBool();
|
||||
serverConfig.controlPort = settings->value("ServerControlPort", 50001).toInt();
|
||||
|
@ -731,6 +580,30 @@ void servermain::loadSettings()
|
|||
|
||||
}
|
||||
|
||||
void servermain::updateAudioDevices()
|
||||
{
|
||||
|
||||
for (RIGCONFIG* rig : serverConfig.rigs)
|
||||
{
|
||||
qDebug(logAudio()) << "Rig" << rig->rigName << "configured rxAudio device:" << rig->rxAudioSetup.name;
|
||||
qDebug(logAudio()) << "Rig" << rig->rigName << "configured txAudio device:" << rig->txAudioSetup.name;
|
||||
|
||||
int inputNum = audioDev->findInput(rig->rigName, rig->rxAudioSetup.name);
|
||||
int outputNum = audioDev->findOutput(rig->rigName, rig->txAudioSetup.name);
|
||||
|
||||
if (prefs.audioSystem == qtAudio) {
|
||||
rig->rxAudioSetup.port = audioDev->getInputDeviceInfo(inputNum);
|
||||
rig->txAudioSetup.port = audioDev->getOutputDeviceInfo(outputNum);
|
||||
}
|
||||
else {
|
||||
rig->rxAudioSetup.portInt = audioDev->getInputDeviceInt(inputNum);
|
||||
rig->txAudioSetup.portInt = audioDev->getOutputDeviceInt(outputNum);
|
||||
}
|
||||
rig->rxAudioSetup.name = audioDev->getInputName(inputNum);
|
||||
rig->txAudioSetup.name = audioDev->getOutputName(outputNum);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
void servermain::receivePTTstatus(bool pttOn)
|
||||
{
|
||||
|
|
|
@ -20,6 +20,7 @@
|
|||
#include "freqmemory.h"
|
||||
#include "rigidentities.h"
|
||||
#include "repeaterattributes.h"
|
||||
#include "audiodevices.h"
|
||||
|
||||
#include "udpserver.h"
|
||||
#include "rigctld.h"
|
||||
|
@ -181,6 +182,7 @@ private slots:
|
|||
void receiveStatusUpdate(networkStatus status);
|
||||
void receiveStateInfo(rigstate* state);
|
||||
void connectToRig(RIGCONFIG* rig);
|
||||
void updateAudioDevices();
|
||||
|
||||
private:
|
||||
QSettings *settings=Q_NULLPTR;
|
||||
|
@ -282,6 +284,8 @@ private:
|
|||
|
||||
rigstate* rigState = Q_NULLPTR;
|
||||
|
||||
audioDevices* audioDev = Q_NULLPTR;
|
||||
|
||||
SERVERCONFIG serverConfig;
|
||||
};
|
||||
|
||||
|
@ -300,6 +304,7 @@ Q_DECLARE_METATYPE(QList<radio_cap_packet>)
|
|||
Q_DECLARE_METATYPE(enum meterKind)
|
||||
Q_DECLARE_METATYPE(enum spectrumMode)
|
||||
Q_DECLARE_METATYPE(rigstate*)
|
||||
Q_DECLARE_METATYPE(codecType)
|
||||
|
||||
|
||||
#endif // WFMAIN_H
|
||||
|
|
|
@ -242,7 +242,7 @@ void wfmain::openRig()
|
|||
//TODO: if(hasRunPreviously)
|
||||
|
||||
//TODO: if(useNetwork){...
|
||||
|
||||
|
||||
// } else {
|
||||
|
||||
// if (prefs.fileWasNotFound) {
|
||||
|
|
|
@ -142,7 +142,8 @@ SOURCES += main.cpp\
|
|||
resampler/resample.c \
|
||||
rigctld.cpp \
|
||||
tcpserver.cpp \
|
||||
keyboard.cpp
|
||||
keyboard.cpp \
|
||||
audiodevices.cpp
|
||||
|
||||
HEADERS += servermain.h \
|
||||
commhandler.h \
|
||||
|
@ -170,4 +171,5 @@ HEADERS += servermain.h \
|
|||
tcpserver.h \
|
||||
audiotaper.h \
|
||||
keyboard.h \
|
||||
wfviewtypes.h
|
||||
wfviewtypes.h \
|
||||
audiodevices.h
|
||||
|
|
|
@ -352,6 +352,7 @@
|
|||
<ItemGroup>
|
||||
<ClCompile Include="..\rtaudio\RTAudio.cpp" />
|
||||
<ClCompile Include="audioconverter.cpp" />
|
||||
<ClCompile Include="audiodevices.cpp" />
|
||||
<ClCompile Include="audiohandler.cpp" />
|
||||
<ClCompile Include="commhandler.cpp" />
|
||||
<ClCompile Include="freqmemory.cpp" />
|
||||
|
@ -375,6 +376,7 @@
|
|||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\rtaudio\RTAUdio.h" />
|
||||
<QtMoc Include="audiodevices.h" />
|
||||
<ClInclude Include="resampler\arch.h" />
|
||||
<QtMoc Include="audioconverter.h">
|
||||
</QtMoc>
|
||||
|
|
|
@ -103,6 +103,9 @@
|
|||
<ClCompile Include="udpserver.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="audiodevices.cpp">
|
||||
<Filter>Source Files</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\rtaudio\RTAUdio.h">
|
||||
|
@ -329,4 +332,9 @@
|
|||
<ItemGroup>
|
||||
<ResourceCompile Include=".\wfserver_resource.rc" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<QtMoc Include="audiodevices.h">
|
||||
<Filter>Header Files</Filter>
|
||||
</QtMoc>
|
||||
</ItemGroup>
|
||||
</Project>
|
|
@ -16,17 +16,17 @@ Global
|
|||
EndGlobalSection
|
||||
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
||||
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Debug|x64.Build.0 = Debug|x64
|
||||
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Release|Win32.Build.0 = Release|Win32
|
||||
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Release|x64.ActiveCfg = Release|x64
|
||||
{326108AD-FA9D-3AAF-8D3E-062C4DDC34E2}.Release|x64.Build.0 = Release|x64
|
||||
{00E054F8-A1D4-3ECA-A8D6-DFC8A68AFD56}.Debug|Win32.ActiveCfg = Debug|Win32
|
||||
{00E054F8-A1D4-3ECA-A8D6-DFC8A68AFD56}.Debug|Win32.Build.0 = Debug|Win32
|
||||
{00E054F8-A1D4-3ECA-A8D6-DFC8A68AFD56}.Debug|x64.ActiveCfg = Debug|x64
|
||||
{00E054F8-A1D4-3ECA-A8D6-DFC8A68AFD56}.Debug|x64.Build.0 = Debug|x64
|
||||
{00E054F8-A1D4-3ECA-A8D6-DFC8A68AFD56}.Release|Win32.ActiveCfg = Release|Win32
|
||||
{00E054F8-A1D4-3ECA-A8D6-DFC8A68AFD56}.Release|Win32.Build.0 = Release|Win32
|
||||
{00E054F8-A1D4-3ECA-A8D6-DFC8A68AFD56}.Release|x64.ActiveCfg = Release|x64
|
||||
EndGlobalSection
|
||||
GlobalSection(SolutionProperties) = preSolution
|
||||
|
|
Ładowanie…
Reference in New Issue