From b94b737f268eb7c4931ebedb3f5d3117f740fa34 Mon Sep 17 00:00:00 2001 From: Andrew Meadows Date: Fri, 12 Sep 2014 17:56:25 -0700 Subject: [PATCH 1/4] fix build for no XMPP --- interface/src/scripting/GlobalServicesScriptingInterface.cpp | 4 +++- interface/src/scripting/GlobalServicesScriptingInterface.h | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/interface/src/scripting/GlobalServicesScriptingInterface.cpp b/interface/src/scripting/GlobalServicesScriptingInterface.cpp index 8c117a4a11..26fa7c564b 100644 --- a/interface/src/scripting/GlobalServicesScriptingInterface.cpp +++ b/interface/src/scripting/GlobalServicesScriptingInterface.cpp @@ -104,10 +104,12 @@ void GlobalServicesScriptingInterface::loggedOut() { emit GlobalServicesScriptingInterface::disconnected(QString("logout")); } +#ifdef HAVE_QXMPP void GlobalServicesScriptingInterface::messageReceived(const QXmppMessage& message) { if (message.type() != QXmppMessage::GroupChat) { return; } const QXmppMucRoom* publicChatRoom = XmppClient::getInstance().getPublicChatRoom(); emit GlobalServicesScriptingInterface::incomingMessage(message.from().right(message.from().count() - 1 - publicChatRoom->jid().count()), message.body()); -} \ No newline at end of file +} +#endif // HAVE_QXMPP diff --git a/interface/src/scripting/GlobalServicesScriptingInterface.h b/interface/src/scripting/GlobalServicesScriptingInterface.h index 370ba1ade9..44b2f7c1bf 100644 --- a/interface/src/scripting/GlobalServicesScriptingInterface.h +++ b/interface/src/scripting/GlobalServicesScriptingInterface.h @@ -24,7 +24,7 @@ #include #include -#endif +#endif // HAVE_QXMPP class GlobalServicesScriptingInterface : public QObject { Q_OBJECT @@ -47,7 +47,9 @@ private slots: void loggedOut(); void onConnected(); void participantsChanged(); +#ifdef HAVE_QXMPP void messageReceived(const QXmppMessage& message); +#endif // HAVE_QXMPP signals: void connected(); From 2f8ef6b4fba30e73ef2f8d7dececabb4e3692d88 Mon Sep 17 00:00:00 2001 From: Craig Hansen-Sturm Date: Fri, 12 Sep 2014 18:31:33 -0700 Subject: [PATCH 2/4] new head penumbra gain calculations --- assignment-client/src/audio/AudioMixer.cpp | 92 +++++++++++++--------- 1 file changed, 56 insertions(+), 36 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 044396f844..28c59a1e6c 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -315,53 +315,73 @@ int AudioMixer::addStreamToMixForListeningNodeWithStream(PositionalAudioStream* rotatedSourcePosition.y = 0.0f; // produce an oriented angle about the y-axis - bearingRelativeAngleToSource = glm::orientedAngle(glm::vec3(0.0f, 0.0f, -1.0f), - glm::normalize(rotatedSourcePosition), - glm::vec3(0.0f, 1.0f, 0.0f)); + float bearingAngleToSource = glm::orientedAngle(glm::vec3(0.0f, 0.0f, -1.0f), + glm::normalize(rotatedSourcePosition), + glm::vec3(0.0f, -1.0f, 0.0f)); + const float TWO_OVER_PI = 2.0f / PI; - // if the source is in the range (-pi/2,+pi/2) (e.g, -Z from the listener's perspective - if (bearingRelativeAngleToSource < -PI_OVER_TWO || bearingRelativeAngleToSource > PI_OVER_TWO) - { - AudioFilterHSF1s& penumbraFilter = streamToAdd->getFilter(); + const float ZERO_DB = 1.0f; + const float NEGATIVE_ONE_DB = 0.891f; + const float NEGATIVE_THREE_DB = 0.708f; - const float FULL_POWER = 1.0f; - const float SQUARE_ROOT_OF_TWO_OVER_TWO = 0.71f; - const float HALF_POWER = SQUARE_ROOT_OF_TWO_OVER_TWO; - - const float ONE_OVER_TWO_PI = 1.0f / TWO_PI; - const float FILTER_CUTOFF_FREQUENCY_HZ = 1000.0f; - - // calculate the updated gain, frequency and slope. - const float penumbraFilterFrequency = FILTER_CUTOFF_FREQUENCY_HZ; // constant frequency - const float penumbraFilterSlope = SQUARE_ROOT_OF_TWO_OVER_TWO; // constant slope + const float FILTER_CUTOFF_FREQUENCY_HZ = 1000.0f; + + const float penumbraFilterFrequency = FILTER_CUTOFF_FREQUENCY_HZ; // constant frequency + const float penumbraFilterSlope = NEGATIVE_THREE_DB; // constant slope + + float penumbraFilterGainL; + float penumbraFilterGainR; + + // variable gain calculation broken down by quadrent + if (bearingAngleToSource < -PI_OVER_TWO && bearingAngleToSource > -PI) { + // gainL(-pi/2,0b)->(-pi,-1db) + penumbraFilterGainL = TWO_OVER_PI * + (ZERO_DB - NEGATIVE_ONE_DB) * (bearingAngleToSource + PI_OVER_TWO) + ZERO_DB; + // gainR(-pi/2,-3db)->(-pi,-1db) + penumbraFilterGainR = TWO_OVER_PI * + (NEGATIVE_THREE_DB - NEGATIVE_ONE_DB) * (bearingAngleToSource + PI_OVER_TWO) + NEGATIVE_THREE_DB; + } + else if (bearingAngleToSource <= PI && bearingAngleToSource > PI_OVER_TWO) { + // gainL(+pi,-1db)->(pi/2,-3db) + penumbraFilterGainL = TWO_OVER_PI * + (NEGATIVE_ONE_DB - NEGATIVE_THREE_DB) * (bearingAngleToSource - PI) + NEGATIVE_ONE_DB; + // gainR(+pi,-1db)->(pi/2,0db) + penumbraFilterGainR = TWO_OVER_PI * + (NEGATIVE_ONE_DB - ZERO_DB) * (bearingAngleToSource - PI) + NEGATIVE_ONE_DB; + } + else if (bearingAngleToSource <= PI_OVER_TWO && bearingAngleToSource > 0) { + // gainL(+pi/2,-3db)->(0,0db) + penumbraFilterGainL = TWO_OVER_PI * + (NEGATIVE_THREE_DB - ZERO_DB) * (bearingAngleToSource - PI_OVER_TWO) + NEGATIVE_THREE_DB; + // gainR(+p1/2,0db)->(0,0db) + penumbraFilterGainR = ZERO_DB; + } + else { + // gainL(0,0db)->(-pi/2,0db) + penumbraFilterGainL = ZERO_DB; + // gainR(0,0db)->(-pi/2,-3db) + penumbraFilterGainR = TWO_OVER_PI * + (ZERO_DB - NEGATIVE_THREE_DB) * (bearingAngleToSource) + ZERO_DB; + } - const float penumbraFilterGainL = (bearingRelativeAngleToSource <= -PI_OVER_TWO) ? - ((+1.0 * ONE_OVER_TWO_PI * (bearingRelativeAngleToSource + PI_OVER_TWO)) + FULL_POWER) : - ((+1.0 * ONE_OVER_TWO_PI * (bearingRelativeAngleToSource - PI)) + HALF_POWER); - - const float penumbraFilterGainR = (bearingRelativeAngleToSource <= -PI_OVER_TWO) ? - ((-1.0 * ONE_OVER_TWO_PI * (bearingRelativeAngleToSource + PI_OVER_TWO)) + HALF_POWER) : - ((-1.0 * ONE_OVER_TWO_PI * (bearingRelativeAngleToSource - PI)) + HALF_POWER); - #if 0 - float distanceBetween = glm::length(relativePosition); - qDebug() << "avatar=" - << listeningNodeStream + qDebug() << "avatar=" + << listeningNodeStream << "gainL=" << penumbraFilterGainL << "gainR=" << penumbraFilterGainR << "angle=" - << bearingRelativeAngleToSource - << "dist=" - << distanceBetween; + << bearingAngleToSource; #endif - // set the gain on both filter channels - penumbraFilter.setParameters(0, 0, SAMPLE_RATE, penumbraFilterFrequency, penumbraFilterGainL, penumbraFilterSlope); - penumbraFilter.setParameters(0, 1, SAMPLE_RATE, penumbraFilterFrequency, penumbraFilterGainR, penumbraFilterSlope); + + // set the gain on both filter channels + AudioFilterHSF1s& penumbraFilter = streamToAdd->getFilter(); + + penumbraFilter.setParameters(0, 0, SAMPLE_RATE, penumbraFilterFrequency, penumbraFilterGainL, penumbraFilterSlope); + penumbraFilter.setParameters(0, 1, SAMPLE_RATE, penumbraFilterFrequency, penumbraFilterGainR, penumbraFilterSlope); - penumbraFilter.render(_clientSamples, _clientSamples, NETWORK_BUFFER_LENGTH_SAMPLES_STEREO / 2); - } + penumbraFilter.render(_clientSamples, _clientSamples, NETWORK_BUFFER_LENGTH_SAMPLES_STEREO / 2); } return 1; From 2c7d15c01b09a23e115df75ff3025911982e5415 Mon Sep 17 00:00:00 2001 From: Craig Hansen-Sturm Date: Fri, 12 Sep 2014 18:32:28 -0700 Subject: [PATCH 3/4] disable input gain/mute --- interface/src/Audio.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Audio.cpp b/interface/src/Audio.cpp index 885df74d2b..80500d392d 100644 --- a/interface/src/Audio.cpp +++ b/interface/src/Audio.cpp @@ -511,7 +511,7 @@ void Audio::handleAudioInput() { _inputFrameBuffer.copyFrames(1, inputFrameCount, inputFrameData, false /*copy in*/); - _inputGain.render(_inputFrameBuffer); // input/mic gain+mute + // _inputGain.render(_inputFrameBuffer); // input/mic gain+mute // Add audio source injection if enabled if (_audioSourceInjectEnabled && !_muted) { From 09370840d5154a5609029bab00936b21a0b665c8 Mon Sep 17 00:00:00 2001 From: Craig Hansen-Sturm Date: Sat, 13 Sep 2014 00:35:02 -0700 Subject: [PATCH 4/4] coding standard --- assignment-client/src/audio/AudioMixer.cpp | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/assignment-client/src/audio/AudioMixer.cpp b/assignment-client/src/audio/AudioMixer.cpp index 28c59a1e6c..bfe2f7e249 100644 --- a/assignment-client/src/audio/AudioMixer.cpp +++ b/assignment-client/src/audio/AudioMixer.cpp @@ -340,30 +340,26 @@ int AudioMixer::addStreamToMixForListeningNodeWithStream(PositionalAudioStream* // gainR(-pi/2,-3db)->(-pi,-1db) penumbraFilterGainR = TWO_OVER_PI * (NEGATIVE_THREE_DB - NEGATIVE_ONE_DB) * (bearingAngleToSource + PI_OVER_TWO) + NEGATIVE_THREE_DB; - } - else if (bearingAngleToSource <= PI && bearingAngleToSource > PI_OVER_TWO) { + } else if (bearingAngleToSource <= PI && bearingAngleToSource > PI_OVER_TWO) { // gainL(+pi,-1db)->(pi/2,-3db) penumbraFilterGainL = TWO_OVER_PI * (NEGATIVE_ONE_DB - NEGATIVE_THREE_DB) * (bearingAngleToSource - PI) + NEGATIVE_ONE_DB; // gainR(+pi,-1db)->(pi/2,0db) penumbraFilterGainR = TWO_OVER_PI * (NEGATIVE_ONE_DB - ZERO_DB) * (bearingAngleToSource - PI) + NEGATIVE_ONE_DB; - } - else if (bearingAngleToSource <= PI_OVER_TWO && bearingAngleToSource > 0) { + } else if (bearingAngleToSource <= PI_OVER_TWO && bearingAngleToSource > 0) { // gainL(+pi/2,-3db)->(0,0db) penumbraFilterGainL = TWO_OVER_PI * (NEGATIVE_THREE_DB - ZERO_DB) * (bearingAngleToSource - PI_OVER_TWO) + NEGATIVE_THREE_DB; // gainR(+p1/2,0db)->(0,0db) penumbraFilterGainR = ZERO_DB; - } - else { + } else { // gainL(0,0db)->(-pi/2,0db) penumbraFilterGainL = ZERO_DB; // gainR(0,0db)->(-pi/2,-3db) penumbraFilterGainR = TWO_OVER_PI * (ZERO_DB - NEGATIVE_THREE_DB) * (bearingAngleToSource) + ZERO_DB; } - #if 0 qDebug() << "avatar=" << listeningNodeStream