From 676ca9cf76d276aca529a8be637cfdd23c6716f0 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 11 Jun 2013 14:39:32 -0700 Subject: [PATCH 01/14] re-link the STK library in the audio-mixer --- audio-mixer/CMakeLists.txt | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/audio-mixer/CMakeLists.txt b/audio-mixer/CMakeLists.txt index eac2792883..7e83e6fc1a 100644 --- a/audio-mixer/CMakeLists.txt +++ b/audio-mixer/CMakeLists.txt @@ -18,4 +18,10 @@ include_glm(${TARGET_NAME} ${ROOT_DIR}) # link the shared hifi library include(${MACRO_DIR}/LinkHifiLibrary.cmake) link_hifi_library(shared ${TARGET_NAME} ${ROOT_DIR}) -link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) \ No newline at end of file +link_hifi_library(audio ${TARGET_NAME} ${ROOT_DIR}) + +# link the stk library +set(STK_ROOT_DIR ${ROOT_DIR}/externals/stk) +find_package(STK REQUIRED) +target_link_libraries(${TARGET_NAME} ${STK_LIBRARIES}) +include_directories(${STK_INCLUDE_DIRS}) \ No newline at end of file From 1e0dcd0eae28abdab0f896d4ae9276651ce58ef6 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 11 Jun 2013 14:49:56 -0700 Subject: [PATCH 02/14] add a map for TwoPole objects to AvatarAudioRingBuffer --- audio-mixer/src/AvatarAudioRingBuffer.cpp | 8 ++++++++ audio-mixer/src/AvatarAudioRingBuffer.h | 9 +++++++++ 2 files changed, 17 insertions(+) diff --git a/audio-mixer/src/AvatarAudioRingBuffer.cpp b/audio-mixer/src/AvatarAudioRingBuffer.cpp index 6da4e20871..144f0181d9 100644 --- a/audio-mixer/src/AvatarAudioRingBuffer.cpp +++ b/audio-mixer/src/AvatarAudioRingBuffer.cpp @@ -11,10 +11,18 @@ #include "AvatarAudioRingBuffer.h" AvatarAudioRingBuffer::AvatarAudioRingBuffer() : + _twoPoles(), _shouldLoopbackForAgent(false) { } +AvatarAudioRingBuffer::~AvatarAudioRingBuffer() { + // enumerate the freeVerbs map and delete the FreeVerb objects + for (TwoPoleAgentMap::iterator poleIterator = _twoPoles.begin(); poleIterator != _twoPoles.end(); poleIterator++) { + delete poleIterator->second; + } +} + int AvatarAudioRingBuffer::parseData(unsigned char* sourceBuffer, int numBytes) { _shouldLoopbackForAgent = (sourceBuffer[0] == PACKET_HEADER_MICROPHONE_AUDIO_WITH_ECHO); return PositionalAudioRingBuffer::parseData(sourceBuffer, numBytes); diff --git a/audio-mixer/src/AvatarAudioRingBuffer.h b/audio-mixer/src/AvatarAudioRingBuffer.h index 7efb503f16..d35113e65e 100644 --- a/audio-mixer/src/AvatarAudioRingBuffer.h +++ b/audio-mixer/src/AvatarAudioRingBuffer.h @@ -9,20 +9,29 @@ #ifndef __hifi__AvatarAudioRingBuffer__ #define __hifi__AvatarAudioRingBuffer__ +#include +#include + #include "PositionalAudioRingBuffer.h" +typedef std::map TwoPoleAgentMap; + class AvatarAudioRingBuffer : public PositionalAudioRingBuffer { public: AvatarAudioRingBuffer(); + ~AvatarAudioRingBuffer(); int parseData(unsigned char* sourceBuffer, int numBytes); + TwoPoleAgentMap& getTwoPoles() { return _twoPoles; } + bool shouldLoopbackForAgent() const { return _shouldLoopbackForAgent; } private: // disallow copying of AvatarAudioRingBuffer objects AvatarAudioRingBuffer(const AvatarAudioRingBuffer&); AvatarAudioRingBuffer& operator= (const AvatarAudioRingBuffer&); + TwoPoleAgentMap _twoPoles; bool _shouldLoopbackForAgent; }; From 84422628a94d0f8be1f233e8dafb0ffb4a7dbc35 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 11 Jun 2013 14:50:10 -0700 Subject: [PATCH 03/14] remove thread link to audio library --- libraries/audio/CMakeLists.txt | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/libraries/audio/CMakeLists.txt b/libraries/audio/CMakeLists.txt index 686986340f..6070649060 100644 --- a/libraries/audio/CMakeLists.txt +++ b/libraries/audio/CMakeLists.txt @@ -15,8 +15,4 @@ include(${MACRO_DIR}/IncludeGLM.cmake) include_glm(${TARGET_NAME} ${ROOT_DIR}) include(${MACRO_DIR}/LinkHifiLibrary.cmake) -link_hifi_library(shared ${TARGET_NAME} ${ROOT_DIR}) - -# link the threads library -find_package(Threads REQUIRED) -target_link_libraries(${TARGET_NAME} ${CMAKE_THREAD_LIBS_INIT}) \ No newline at end of file +link_hifi_library(shared ${TARGET_NAME} ${ROOT_DIR}) \ No newline at end of file From 2cc44c6d2e5ab981f5919d9a4d45b9f50a0ec887 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 11 Jun 2013 15:01:35 -0700 Subject: [PATCH 04/14] add a TwoPole low pass filter for each source for each listener --- audio-mixer/src/main.cpp | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index c9ea474354..edf561b026 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -136,6 +136,8 @@ int main(int argc, const char* argv[]) { int numSamplesDelay = 0; float weakChannelAmplitudeRatio = 1.0f; + stk::TwoPole* otherAgentTwoPole = NULL; + if (otherAgent != agent) { glm::vec3 listenerPosition = agentRingBuffer->getPosition(); @@ -212,6 +214,25 @@ int main(int argc, const char* argv[]) { float sinRatio = fabsf(sinf(glm::radians(bearingRelativeAngleToSource))); numSamplesDelay = PHASE_DELAY_AT_90 * sinRatio; weakChannelAmplitudeRatio = 1 - (PHASE_AMPLITUDE_RATIO_AT_90 * sinRatio); + + // grab the TwoPole object for this source, add it if it doesn't exist + TwoPoleAgentMap& agentTwoPoles = agentRingBuffer->getTwoPoles(); + TwoPoleAgentMap::iterator twoPoleIterator = agentTwoPoles.find(otherAgent->getAgentID()); + + if (twoPoleIterator == agentTwoPoles.end()) { + // setup the freeVerb effect for this source for this client + otherAgentTwoPole = agentTwoPoles[otherAgent->getAgentID()] = new stk::TwoPole; + } else { + otherAgentTwoPole = twoPoleIterator->second; + } + + // calculate the reasonance for this TwoPole based on angle to source + float TWO_POLE_CUT_OFF_FREQUENCY = 1000.0f; + float TWO_POLE_MAX_FILTER_STRENGTH = 0.4f; + + otherAgentTwoPole->setResonance(TWO_POLE_CUT_OFF_FREQUENCY, + TWO_POLE_MAX_FILTER_STRENGTH + * fabsf(bearingRelativeAngleToSource) / 180.0f); } } @@ -237,6 +258,10 @@ int main(int argc, const char* argv[]) { plateauAdditionOfSamples(delayedChannel[s], earlierSample); } + if (otherAgentTwoPole) { + otherAgentBuffer->getNextOutput()[s] = otherAgentTwoPole->tick(otherAgentBuffer->getNextOutput()[s]); + } + int16_t currentSample = otherAgentBuffer->getNextOutput()[s] * attenuationCoefficient; plateauAdditionOfSamples(goodChannel[s], currentSample); From 3ef1b24f1c33ec8fa4f2085bf9bf93e63c8bdad2 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 11 Jun 2013 15:32:12 -0700 Subject: [PATCH 05/14] tuning TwoPole effect in audio-mixer --- audio-mixer/src/main.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index edf561b026..b7ca6d1f41 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -227,12 +227,13 @@ int main(int argc, const char* argv[]) { } // calculate the reasonance for this TwoPole based on angle to source - float TWO_POLE_CUT_OFF_FREQUENCY = 1000.0f; + float TWO_POLE_CUT_OFF_FREQUENCY = 800.0f; float TWO_POLE_MAX_FILTER_STRENGTH = 0.4f; otherAgentTwoPole->setResonance(TWO_POLE_CUT_OFF_FREQUENCY, TWO_POLE_MAX_FILTER_STRENGTH - * fabsf(bearingRelativeAngleToSource) / 180.0f); + * fabsf(bearingRelativeAngleToSource) / 180.0f, + true); } } From 7d1bcf07eff866aa9ee7285dd90b2e53521f145b Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 11 Jun 2013 17:09:39 -0700 Subject: [PATCH 06/14] add a Logstash class to prepare for sending stats over UDP --- audio-mixer/src/main.cpp | 37 ++++++++++++++++++++++++ libraries/shared/src/Logstash.cpp | 45 +++++++++++++++++++++++++++++ libraries/shared/src/Logstash.h | 25 ++++++++++++++++ libraries/shared/src/SharedUtil.cpp | 9 ++++++ libraries/shared/src/SharedUtil.h | 1 + 5 files changed, 117 insertions(+) create mode 100644 libraries/shared/src/Logstash.cpp create mode 100644 libraries/shared/src/Logstash.h diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index b7ca6d1f41..8cd2abc2d9 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include "InjectedAudioRingBuffer.h" #include "AvatarAudioRingBuffer.h" @@ -100,7 +101,17 @@ int main(int argc, const char* argv[]) { timeval lastDomainServerCheckIn = {}; + timeval beginSendTime, endSendTime; + + // if we'll be sending stats, call the Logstash::socket() method to make it load the logstash IP outside the loop + if (Logstash::shouldSendStats()) { + Logstash::socket(); + } + while (true) { + if (Logstash::shouldSendStats()) { + gettimeofday(&beginSendTime, NULL); + } // send a check in packet to the domain server if DOMAIN_SERVER_CHECK_IN_USECS has elapsed if (usecTimestampNow() - usecTimestamp(&lastDomainServerCheckIn) >= DOMAIN_SERVER_CHECK_IN_USECS) { @@ -344,6 +355,32 @@ int main(int argc, const char* argv[]) { } } + if (Logstash::shouldSendStats()) { + // send a packet to our logstash instance + + // calculate the percentage value for time elapsed for this send (of the max allowable time) + gettimeofday(&endSendTime, NULL); + + float percentageOfMaxElapsed = (usecTimestamp(&endSendTime) - usecTimestamp(&beginSendTime)) + / BUFFER_SEND_INTERVAL_USECS * 100.0f; + + if (percentageOfMaxElapsed < 0) { + percentageOfMaxElapsed = 0.0f; + } + + const char MIXER_LOGSTASH_METRIC_NAME[] = "audio-mixer-frame-time-usage"; + + // we're sending a floating point percentage with two mandatory numbers after decimal point + // that could be up to 6 bytes + const int MIXER_LOGSTASH_PACKET_BYTES = strlen(MIXER_LOGSTASH_METRIC_NAME) + 7; + char logstashPacket[MIXER_LOGSTASH_PACKET_BYTES]; + + sprintf(logstashPacket, "%s %.2f", MIXER_LOGSTASH_METRIC_NAME, percentageOfMaxElapsed); + +// agentList->getAgentSocket()->send(Logstash::socket(), logstashPacket, MIXER_LOGSTASH_PACKET_BYTES); + + } + double usecToSleep = usecTimestamp(&startTime) + (++nextFrame * BUFFER_SEND_INTERVAL_USECS) - usecTimestampNow(); if (usecToSleep > 0) { diff --git a/libraries/shared/src/Logstash.cpp b/libraries/shared/src/Logstash.cpp new file mode 100644 index 0000000000..dbbf7f8ec3 --- /dev/null +++ b/libraries/shared/src/Logstash.cpp @@ -0,0 +1,45 @@ +// +// Logstash.cpp +// hifi +// +// Created by Stephen Birarda on 6/11/13. +// Copyright (c) 2013 HighFidelity, Inc. All rights reserved. +// + +#include +#include +#include + +#include "SharedUtil.h" + +#include "Logstash.h" + +sockaddr_in Logstash::logstashSocket = {}; + +sockaddr* Logstash::socket() { + + if (logstashSocket.sin_addr.s_addr == 0) { + // we need to construct the socket object + + // assume IPv4 + logstashSocket.sin_family = AF_INET; + + // use the constant port + logstashSocket.sin_port = htons(LOGSTASH_UDP_PORT); + + // lookup the IP address for the constant hostname + struct hostent* logstashHostInfo; + if ((logstashHostInfo = gethostbyname(LOGSTASH_HOSTNAME))) { + memcpy(&logstashSocket.sin_addr, logstashHostInfo->h_addr_list[0], logstashHostInfo->h_length); + } else { + printf("Failed to lookup logstash IP - will try again on next log attempt.\n"); + } + } + + return (sockaddr*) &logstashSocket; +} + +bool Logstash::shouldSendStats() { + static bool shouldSendStats = isInEnvironment("production"); + return shouldSendStats; +} \ No newline at end of file diff --git a/libraries/shared/src/Logstash.h b/libraries/shared/src/Logstash.h new file mode 100644 index 0000000000..20f58b8057 --- /dev/null +++ b/libraries/shared/src/Logstash.h @@ -0,0 +1,25 @@ +// +// Logstash.h +// hifi +// +// Created by Stephen Birarda on 6/11/13. +// Copyright (c) 2013 HighFidelity, Inc. All rights reserved. +// + +#ifndef __hifi__Logstash__ +#define __hifi__Logstash__ + +#include + +const int LOGSTASH_UDP_PORT = 9500; +const char LOGSTASH_HOSTNAME[] = "graphite.highfidelity.io"; + +class Logstash { +public: + static sockaddr* socket(); + static bool shouldSendStats(); +private: + static sockaddr_in logstashSocket; +}; + +#endif /* defined(__hifi__Logstash__) */ diff --git a/libraries/shared/src/SharedUtil.cpp b/libraries/shared/src/SharedUtil.cpp index 30aa75b461..66a3ba0012 100644 --- a/libraries/shared/src/SharedUtil.cpp +++ b/libraries/shared/src/SharedUtil.cpp @@ -110,6 +110,15 @@ void setSemiNibbleAt(unsigned char& byte, int bitIndex, int value) { byte += ((value & 3) << (7 - bitIndex)); // semi-nibbles store 00, 01, 10, or 11 } +bool isInEnvironment(const char* environment) { + char* environmentString = getenv("HIFI_ENVIRONMENT"); + + if (environmentString && strcmp(environmentString, environment) == 0) { + return true; + } else { + return false; + } +} void switchToResourcesParentIfRequired() { #ifdef __APPLE__ diff --git a/libraries/shared/src/SharedUtil.h b/libraries/shared/src/SharedUtil.h index 28c4adb296..ba531d23cc 100644 --- a/libraries/shared/src/SharedUtil.h +++ b/libraries/shared/src/SharedUtil.h @@ -57,6 +57,7 @@ void setAtBit(unsigned char& byte, int bitIndex); int getSemiNibbleAt(unsigned char& byte, int bitIndex); void setSemiNibbleAt(unsigned char& byte, int bitIndex, int value); +bool isInEnvironment(const char* environment); void switchToResourcesParentIfRequired(); From 2cdb30e6dcc3c1d9ed084a305bc2b9951a90bab2 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 11 Jun 2013 17:33:37 -0700 Subject: [PATCH 07/14] send stats to graphite on same interval as DS checkin --- audio-mixer/src/main.cpp | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index 8cd2abc2d9..e1cca1477b 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -102,6 +102,8 @@ int main(int argc, const char* argv[]) { timeval lastDomainServerCheckIn = {}; timeval beginSendTime, endSendTime; + float sumFrameTimePercentages = 0.0f; + int numStatCollections = 0; // if we'll be sending stats, call the Logstash::socket() method to make it load the logstash IP outside the loop if (Logstash::shouldSendStats()) { @@ -117,6 +119,26 @@ int main(int argc, const char* argv[]) { if (usecTimestampNow() - usecTimestamp(&lastDomainServerCheckIn) >= DOMAIN_SERVER_CHECK_IN_USECS) { gettimeofday(&lastDomainServerCheckIn, NULL); AgentList::getInstance()->sendDomainServerCheckIn(); + + if (Logstash::shouldSendStats()) { + // if we should be sending stats to Logstash send the appropriate average now + const char MIXER_LOGSTASH_METRIC_NAME[] = "audio-mixer-frame-time-usage"; + + // we're sending a floating point percentage with two mandatory numbers after decimal point + // that could be up to 6 bytes + const int MIXER_LOGSTASH_PACKET_BYTES = strlen(MIXER_LOGSTASH_METRIC_NAME) + 7; + char logstashPacket[MIXER_LOGSTASH_PACKET_BYTES]; + + float averageFrameTimePercentage = sumFrameTimePercentages / numStatCollections; + sprintf(logstashPacket, "%s %.2f", MIXER_LOGSTASH_METRIC_NAME, averageFrameTimePercentage); + + sockaddr_in* printSocket = (sockaddr_in*)Logstash::socket(); + + agentList->getAgentSocket()->send(Logstash::socket(), logstashPacket, MIXER_LOGSTASH_PACKET_BYTES); + + sumFrameTimePercentages = 0.0f; + numStatCollections = 0; + } } for (AgentList::iterator agent = agentList->begin(); agent != agentList->end(); agent++) { @@ -364,21 +386,11 @@ int main(int argc, const char* argv[]) { float percentageOfMaxElapsed = (usecTimestamp(&endSendTime) - usecTimestamp(&beginSendTime)) / BUFFER_SEND_INTERVAL_USECS * 100.0f; - if (percentageOfMaxElapsed < 0) { - percentageOfMaxElapsed = 0.0f; + if (percentageOfMaxElapsed > 0) { + sumFrameTimePercentages += percentageOfMaxElapsed; } - const char MIXER_LOGSTASH_METRIC_NAME[] = "audio-mixer-frame-time-usage"; - - // we're sending a floating point percentage with two mandatory numbers after decimal point - // that could be up to 6 bytes - const int MIXER_LOGSTASH_PACKET_BYTES = strlen(MIXER_LOGSTASH_METRIC_NAME) + 7; - char logstashPacket[MIXER_LOGSTASH_PACKET_BYTES]; - - sprintf(logstashPacket, "%s %.2f", MIXER_LOGSTASH_METRIC_NAME, percentageOfMaxElapsed); - -// agentList->getAgentSocket()->send(Logstash::socket(), logstashPacket, MIXER_LOGSTASH_PACKET_BYTES); - + numStatCollections++; } double usecToSleep = usecTimestamp(&startTime) + (++nextFrame * BUFFER_SEND_INTERVAL_USECS) - usecTimestampNow(); From 659189745c27bd01a18edcf682bb7feca27bfd4f Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Tue, 11 Jun 2013 17:34:06 -0700 Subject: [PATCH 08/14] remove the debug printSocket variable --- audio-mixer/src/main.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index e1cca1477b..b44bf587b8 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -132,8 +132,6 @@ int main(int argc, const char* argv[]) { float averageFrameTimePercentage = sumFrameTimePercentages / numStatCollections; sprintf(logstashPacket, "%s %.2f", MIXER_LOGSTASH_METRIC_NAME, averageFrameTimePercentage); - sockaddr_in* printSocket = (sockaddr_in*)Logstash::socket(); - agentList->getAgentSocket()->send(Logstash::socket(), logstashPacket, MIXER_LOGSTASH_PACKET_BYTES); sumFrameTimePercentages = 0.0f; From fab53113e464cef910aba2a68fe6754a5b22db85 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 13 Jun 2013 17:07:25 -0600 Subject: [PATCH 09/14] fix a divide by zero for audio-mixer stat sending --- audio-mixer/src/main.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index 04a8ae0885..4aaef6ade0 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -120,7 +120,7 @@ int main(int argc, const char* argv[]) { gettimeofday(&lastDomainServerCheckIn, NULL); AgentList::getInstance()->sendDomainServerCheckIn(); - if (Logstash::shouldSendStats()) { + if (Logstash::shouldSendStats() && numStatCollections > 0) { // if we should be sending stats to Logstash send the appropriate average now const char MIXER_LOGSTASH_METRIC_NAME[] = "audio-mixer-frame-time-usage"; From be4c7fc085bdd72f929cddd36be46483e15851a6 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 13 Jun 2013 17:15:22 -0600 Subject: [PATCH 10/14] fix audio-mixer sleep time calculation --- audio-mixer/src/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index 4aaef6ade0..60abe557ec 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -47,7 +47,7 @@ const unsigned short MIXER_LISTEN_PORT = 55443; const short JITTER_BUFFER_MSECS = 12; const short JITTER_BUFFER_SAMPLES = JITTER_BUFFER_MSECS * (SAMPLE_RATE / 1000.0); -const float BUFFER_SEND_INTERVAL_USECS = (BUFFER_LENGTH_SAMPLES_PER_CHANNEL / SAMPLE_RATE) * 1000000; +const long long BUFFER_SEND_INTERVAL_USECS = floorf((BUFFER_LENGTH_SAMPLES_PER_CHANNEL / SAMPLE_RATE) * 1000000); const long MAX_SAMPLE_VALUE = std::numeric_limits::max(); const long MIN_SAMPLE_VALUE = std::numeric_limits::min(); @@ -58,7 +58,7 @@ void plateauAdditionOfSamples(int16_t &mixSample, int16_t sampleToAdd) { long normalizedSample = std::min(MAX_SAMPLE_VALUE, sumSample); normalizedSample = std::max(MIN_SAMPLE_VALUE, sumSample); - mixSample = normalizedSample; + mixSample = normalizedSample; } void attachNewBufferToAgent(Agent *newAgent) { From 1ebd007f362ca084dc6ccf26ebc2e4e25a1047bb Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 13 Jun 2013 17:28:58 -0600 Subject: [PATCH 11/14] wrap things in brackets to correct percentage --- audio-mixer/src/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index 60abe557ec..2394813ad2 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -381,8 +381,8 @@ int main(int argc, const char* argv[]) { // calculate the percentage value for time elapsed for this send (of the max allowable time) gettimeofday(&endSendTime, NULL); - float percentageOfMaxElapsed = (usecTimestamp(&endSendTime) - usecTimestamp(&beginSendTime)) - / BUFFER_SEND_INTERVAL_USECS * 100.0f; + float percentageOfMaxElapsed = ((float) (usecTimestamp(&endSendTime) - usecTimestamp(&beginSendTime)) + / BUFFER_SEND_INTERVAL_USECS) * 100.0f; if (percentageOfMaxElapsed > 0) { sumFrameTimePercentages += percentageOfMaxElapsed; From 90500a899086839a39fd24f7a76b82b351b1dade Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Thu, 13 Jun 2013 19:17:42 -0600 Subject: [PATCH 12/14] send a packet with the exact number of bytes to logstash --- audio-mixer/src/main.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index 2394813ad2..6d9abd1e03 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -130,9 +130,9 @@ int main(int argc, const char* argv[]) { char logstashPacket[MIXER_LOGSTASH_PACKET_BYTES]; float averageFrameTimePercentage = sumFrameTimePercentages / numStatCollections; - sprintf(logstashPacket, "%s %.2f", MIXER_LOGSTASH_METRIC_NAME, averageFrameTimePercentage); + int packetBytes = sprintf(logstashPacket, "%s %.2f", MIXER_LOGSTASH_METRIC_NAME, averageFrameTimePercentage); - agentList->getAgentSocket()->send(Logstash::socket(), logstashPacket, MIXER_LOGSTASH_PACKET_BYTES); + agentList->getAgentSocket()->send(Logstash::socket(), logstashPacket, packetBytes); sumFrameTimePercentages = 0.0f; numStatCollections = 0; From 471c9a3dad544046d0ba0070d1dc7ad204da0a0a Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 14 Jun 2013 09:18:01 -0700 Subject: [PATCH 13/14] added local mode --- audio-mixer/src/main.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index 7276a24594..c8ffa5d55d 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -74,10 +74,20 @@ struct SharedAudioFactors { float distanceCoefficient; float effectMix; }; +bool wantLocalDomain = false; int main(int argc, const char* argv[]) { setvbuf(stdout, NULL, _IOLBF, 0); + // Handle Local Domain testing with the --local command line + const char* local = "--local"; + ::wantLocalDomain = cmdOptionExists(argc, argv,local); + if (::wantLocalDomain) { + printf("Local Domain MODE!\n"); + int ip = getLocalAddress(); + sprintf(DOMAIN_IP,"%d.%d.%d.%d", (ip & 0xFF), ((ip >> 8) & 0xFF),((ip >> 16) & 0xFF), ((ip >> 24) & 0xFF)); + } + AgentList* agentList = AgentList::createInstance(AGENT_TYPE_AUDIO_MIXER, MIXER_LISTEN_PORT); ssize_t receivedBytes = 0; From 5d6a5a737765d3cb2d46124d6809891104d336e3 Mon Sep 17 00:00:00 2001 From: ZappoMan Date: Fri, 14 Jun 2013 09:22:14 -0700 Subject: [PATCH 14/14] Removed accidentally merged code --- audio-mixer/src/main.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/audio-mixer/src/main.cpp b/audio-mixer/src/main.cpp index df4716c08d..1297d6d0eb 100644 --- a/audio-mixer/src/main.cpp +++ b/audio-mixer/src/main.cpp @@ -70,10 +70,6 @@ void attachNewBufferToAgent(Agent *newAgent) { } } -struct SharedAudioFactors { - float distanceCoefficient; - float effectMix; -}; bool wantLocalDomain = false; int main(int argc, const char* argv[]) {