From adebb076c0dbbab789f6277e2c172cd1d5282bdf Mon Sep 17 00:00:00 2001 From: Phil Taylor Date: Sat, 22 May 2021 00:10:22 +0100 Subject: [PATCH 1/3] Fix for stuttering audio on mac --- audiohandler.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/audiohandler.cpp b/audiohandler.cpp index 71d13f3..ccc5e78 100644 --- a/audiohandler.cpp +++ b/audiohandler.cpp @@ -901,7 +901,11 @@ void audioHandler::reinit() audioOutput = new QAudioOutput(deviceInfo, format, this); // This seems to only be needed on Linux but is critical in aligning buffer sizes. - audioOutput->setBufferSize(chunkSize*4); +#ifdef Q_OS_MAC + audioOutput->setBufferSize(chunkSize*8); +#else + audioOutput->setBufferSize(chunkSize*4); +#endif connect(audioOutput, SIGNAL(notify()), SLOT(notified())); connect(audioOutput, SIGNAL(stateChanged(QAudio::State)), SLOT(stateChanged(QAudio::State))); From daf9d7738da7cfbb1757cff1c576ea6af66ff685 Mon Sep 17 00:00:00 2001 From: Phil Taylor Date: Sat, 22 May 2021 00:32:09 +0100 Subject: [PATCH 2/3] Fix for TX audio in udp server --- audiohandler.cpp | 1 + udpserver.cpp | 5 +++-- wfview.vcxproj | 8 ++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/audiohandler.cpp b/audiohandler.cpp index 71d13f3..eb6a015 100644 --- a/audiohandler.cpp +++ b/audiohandler.cpp @@ -782,6 +782,7 @@ bool audioHandler::init(const quint8 bits, const quint8 channels, const quint16 this->chunkSize = (INTERNAL_SAMPLE_RATE / 25) * radioChannels; qInfo(logAudio()) << (isInput ? "Input" : "Output") << "chunkSize: " << this->chunkSize; + qInfo(logAudio()) << (isInput ? "Input" : "Output") << "bufferLength (latency): " << this->latency; int resample_error=0; diff --git a/udpserver.cpp b/udpserver.cpp index 7ba242b..03d174d 100644 --- a/udpserver.cpp +++ b/udpserver.cpp @@ -395,7 +395,7 @@ void udpServer::controlReceived() connect(this, SIGNAL(setupTxAudio(quint8, quint8, quint16, quint16, bool, bool, QString, quint8)), txaudio, SLOT(init(quint8, quint8, quint16, quint16, bool, bool, QString, quint8))); connect(txAudioThread, SIGNAL(finished()), txaudio, SLOT(deleteLater())); - emit setupTxAudio(samples, channels, current->txSampleRate, in->txbuffer, uLaw, false, config.audioOutput, config.resampleQuality); + emit setupTxAudio(samples, channels, current->txSampleRate, current->txBufferLen, uLaw, false, config.audioOutput, config.resampleQuality); hasTxAudio=datagram.senderAddress(); connect(this, SIGNAL(haveAudioData(audioPacket)), txaudio, SLOT(incomingAudio(audioPacket))); @@ -431,8 +431,9 @@ void udpServer::controlReceived() emit setupRxAudio(samples, channels, current->rxSampleRate, 150, uLaw, true, config.audioInput, config.resampleQuality); rxAudioTimer = new QTimer(); + rxAudioTimer->setTimerType(Qt::PreciseTimer); connect(rxAudioTimer, &QTimer::timeout, this, std::bind(&udpServer::sendRxAudio, this)); - rxAudioTimer->start(10); + rxAudioTimer->start(20); } } diff --git a/wfview.vcxproj b/wfview.vcxproj index 12bb382..330f68d 100644 --- a/wfview.vcxproj +++ b/wfview.vcxproj @@ -57,7 +57,7 @@ Sync release\ MaxSpeed - _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;GITSHORT="7eba494";HOST="wfview.org";UNAME="build";NDEBUG;QT_NO_DEBUG;%(PreprocessorDefinitions) + _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;GITSHORT="b5d6063";HOST="wfview.org";UNAME="build";NDEBUG;QT_NO_DEBUG;%(PreprocessorDefinitions) false MultiThreadedDLL @@ -85,7 +85,7 @@ 0 - _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;GITSHORT=\"7eba494\";HOST=\"wfview.org\";UNAME=\"build\";NDEBUG;QT_NO_DEBUG;QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;%(PreprocessorDefinitions) + _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;GITSHORT=\"b5d6063\";HOST=\"wfview.org\";UNAME=\"build\";NDEBUG;QT_NO_DEBUG;QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;%(PreprocessorDefinitions) msvc./$(Configuration)/moc_predefs.hMoc'ing %(Identity)...output$(Configuration)moc_%(Filename).cppdefaultRcc'ing %(Identity)...$(Configuration)qrc_%(Filename).cppUic'ing %(Identity)...$(ProjectDir)ui_%(Filename).h @@ -99,7 +99,7 @@ Sync debug\ Disabled - _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;GITSHORT="7eba494";HOST="wfview.org";UNAME="build";%(PreprocessorDefinitions) + _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;GITSHORT="b5d6063";HOST="wfview.org";UNAME="build";%(PreprocessorDefinitions) false MultiThreadedDebugDLL true @@ -124,7 +124,7 @@ 0 - _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;GITSHORT=\"7eba494\";HOST=\"wfview.org\";UNAME=\"build\";QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;_DEBUG;%(PreprocessorDefinitions) + _WINDOWS;UNICODE;_UNICODE;WIN32;_ENABLE_EXTENDED_ALIGNED_STORAGE;QT_DEPRECATED_WARNINGS;QCUSTOMPLOT_COMPILE_LIBRARY;OUTSIDE_SPEEX;RANDOM_PREFIX=wf;GITSHORT=\"b5d6063\";HOST=\"wfview.org\";UNAME=\"build\";QT_MULTIMEDIA_LIB;QT_PRINTSUPPORT_LIB;QT_WIDGETS_LIB;QT_GUI_LIB;QT_SERIALPORT_LIB;QT_NETWORK_LIB;QT_CORE_LIB;_DEBUG;%(PreprocessorDefinitions) msvc./$(Configuration)/moc_predefs.hMoc'ing %(Identity)...output$(Configuration)moc_%(Filename).cppdefaultRcc'ing %(Identity)...$(Configuration)qrc_%(Filename).cppUic'ing %(Identity)...$(ProjectDir)ui_%(Filename).h From a18d005cee03a389d51178da423e46eb70fcbbd2 Mon Sep 17 00:00:00 2001 From: Phil Taylor Date: Sat, 22 May 2021 00:52:01 +0100 Subject: [PATCH 3/3] "Hopefully" fix annoying UDP server crash on client disconnect! --- udpserver.cpp | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/udpserver.cpp b/udpserver.cpp index 03d174d..cfda49b 100644 --- a/udpserver.cpp +++ b/udpserver.cpp @@ -714,7 +714,9 @@ void udpServer::audioReceived() void udpServer::commonReceived(QList* l,CLIENT* current, QByteArray r) { Q_UNUSED(l); // We might need it later! - + if (current == Q_NULLPTR || r.isNull()) { + return; + } current->lastHeard = QDateTime::currentDateTime(); if (r.length() < 0x10) {