From f6cc40362c12c20b40eb11a6cc482d139cc4f2e3 Mon Sep 17 00:00:00 2001
From: Stephen Birarda <commit@birarda.com>
Date: Thu, 16 May 2013 13:10:48 -0700
Subject: [PATCH] hook the injector up to the change AudioInjector setup

---
 injector/src/main.cpp                         | 15 +++---
 libraries/audio/src/AudioInjectionManager.cpp | 44 +---------------
 libraries/audio/src/AudioInjector.cpp         | 50 ++++++++++++++++++-
 libraries/audio/src/AudioInjector.h           |  2 +
 4 files changed, 59 insertions(+), 52 deletions(-)

diff --git a/injector/src/main.cpp b/injector/src/main.cpp
index bf49cb6a99..9d2fa76c39 100644
--- a/injector/src/main.cpp
+++ b/injector/src/main.cpp
@@ -18,6 +18,7 @@
 #include <PacketHeaders.h>
 #include <UDPSocket.h>
 #include <AudioInjector.h>
+#include <AudioInjectionManager.h>
 
 char EC2_WEST_AUDIO_SERVER[] = "54.241.92.53";
 const int AUDIO_UDP_LISTEN_PORT = 55443;
@@ -29,7 +30,7 @@ float sleepIntervalMax = 2.00;
 char *sourceAudioFile = NULL;
 const char *allowedParameters = ":rb::t::c::a::f:";
 float floatArguments[4] = {0.0f, 0.0f, 0.0f, 0.0f};
-unsigned char attenuationModifier = 255;
+unsigned char volume = 255;
 
 void usage(void)
 {
@@ -80,7 +81,7 @@ bool processParameters(int parameterCount, char* parameterData[])
                 break;
             }
             case 'a':
-                ::attenuationModifier = atoi(optarg);
+                ::volume = atoi(optarg);
                 std::cout << "[DEBUG] Attenuation modifier: " << optarg << std::endl;
                 break;
             default:
@@ -110,19 +111,17 @@ int main(int argc, char* argv[]) {
             exit(-1);
         } else {
             AudioInjector injector(sourceAudioFile);
-            injector.setInjectorSocket(&streamSocket);
-            injector.setDestinationSocket((sockaddr*) &mixerSocket);
             
-            injector.setPosition(::floatArguments);
+            injector.setPosition(glm::vec3(::floatArguments[0], ::floatArguments[1], ::floatArguments[2]));
             injector.setBearing(*(::floatArguments + 3));
-            injector.setAttenuationModifier(::attenuationModifier);
+            injector.setVolume(::volume);
         
             float delay = 0;
             int usecDelay = 0;
             
             while (true) {
-                injector.injectAudio();
-                
+                injector.injectAudio(&streamSocket, (sockaddr*) &mixerSocket);
+            
                 if (!::loopAudio) {
                     delay = randFloatInRange(::sleepIntervalMin, ::sleepIntervalMax);
                     usecDelay = delay * 1000 * 1000;
diff --git a/libraries/audio/src/AudioInjectionManager.cpp b/libraries/audio/src/AudioInjectionManager.cpp
index b9ca3a4150..ce252afd23 100644
--- a/libraries/audio/src/AudioInjectionManager.cpp
+++ b/libraries/audio/src/AudioInjectionManager.cpp
@@ -42,49 +42,7 @@ AudioInjector* AudioInjectionManager::injectorWithCapacity(int capacity) {
 void* AudioInjectionManager::injectAudioViaThread(void* args) {
     AudioInjector* injector = (AudioInjector*) args;
     
-    if (injector->_audioSampleArray) {
-        injector->setIsInjectingAudio(true);
-        
-        timeval startTime;
-        
-        // one byte for header, 3 positional floats, 1 bearing float, 1 attenuation modifier byte
-        int leadingBytes = 1 + (sizeof(float) * 4) + 1;
-        unsigned char dataPacket[BUFFER_LENGTH_BYTES + leadingBytes];
-        
-        dataPacket[0] = PACKET_HEADER_INJECT_AUDIO;
-        unsigned char *currentPacketPtr = dataPacket + 1;
-        
-        memcpy(currentPacketPtr, &injector->getPosition(), sizeof(injector->getPosition()));
-        currentPacketPtr += sizeof(injector->getPosition());
-        
-        *currentPacketPtr = injector->getVolume();
-        currentPacketPtr++;
-        
-        memcpy(currentPacketPtr, &injector->_bearing, sizeof(injector->_bearing));
-        currentPacketPtr += sizeof(injector->_bearing);
-        
-        for (int i = 0; i < injector->_numTotalSamples; i += BUFFER_LENGTH_SAMPLES) {
-            gettimeofday(&startTime, NULL);
-            
-            int numSamplesToCopy = BUFFER_LENGTH_SAMPLES;
-            
-            if (injector->_numTotalSamples - i < BUFFER_LENGTH_SAMPLES) {
-                numSamplesToCopy = injector->_numTotalSamples - i;
-                memset(currentPacketPtr + numSamplesToCopy, 0, BUFFER_LENGTH_BYTES - (numSamplesToCopy * sizeof(int16_t)));
-            }
-            
-            memcpy(currentPacketPtr, injector->_audioSampleArray + i, numSamplesToCopy * sizeof(int16_t));
-            
-            _injectorSocket->send(&_destinationSocket, dataPacket, sizeof(dataPacket));
-            
-            double usecToSleep = BUFFER_SEND_INTERVAL_USECS - (usecTimestampNow() - usecTimestamp(&startTime));
-            if (usecToSleep > 0) {
-                usleep(usecToSleep);
-            }
-        }
-        
-        injector->_isInjectingAudio = false;
-    }
+    injector->injectAudio(_injectorSocket, &_destinationSocket);
     
     // if this an injector inside the injection manager's array we're responsible for deletion
     for (int i = 0; i < MAX_CONCURRENT_INJECTORS; i++) {
diff --git a/libraries/audio/src/AudioInjector.cpp b/libraries/audio/src/AudioInjector.cpp
index 05530cebe3..fa05570d40 100644
--- a/libraries/audio/src/AudioInjector.cpp
+++ b/libraries/audio/src/AudioInjector.cpp
@@ -9,7 +9,9 @@
 #include <fstream>
 #include <cstring>
 
-#include "SharedUtil.h"
+#include <SharedUtil.h>
+#include <PacketHeaders.h>
+#include <UDPSocket.h>
 
 #include "AudioInjector.h"
 
@@ -55,6 +57,52 @@ AudioInjector::~AudioInjector() {
     delete[] _audioSampleArray;
 }
 
+void AudioInjector::injectAudio(UDPSocket* injectorSocket, sockaddr* destinationSocket) {
+    if (_audioSampleArray) {
+        _isInjectingAudio = true;
+        
+        timeval startTime;
+        
+        // one byte for header, 3 positional floats, 1 bearing float, 1 attenuation modifier byte
+        int leadingBytes = 1 + (sizeof(float) * 4) + 1;
+        unsigned char dataPacket[BUFFER_LENGTH_BYTES + leadingBytes];
+        
+        dataPacket[0] = PACKET_HEADER_INJECT_AUDIO;
+        unsigned char *currentPacketPtr = dataPacket + 1;
+        
+        memcpy(currentPacketPtr, &_position, sizeof(_position));
+        currentPacketPtr += sizeof(_position);
+        
+        *currentPacketPtr = _volume;
+        currentPacketPtr++;
+        
+        memcpy(currentPacketPtr, &_bearing, sizeof(_bearing));
+        currentPacketPtr += sizeof(_bearing);
+        
+        for (int i = 0; i < _numTotalSamples; i += BUFFER_LENGTH_SAMPLES) {
+            gettimeofday(&startTime, NULL);
+            
+            int numSamplesToCopy = BUFFER_LENGTH_SAMPLES;
+            
+            if (_numTotalSamples - i < BUFFER_LENGTH_SAMPLES) {
+                numSamplesToCopy = _numTotalSamples - i;
+                memset(currentPacketPtr + numSamplesToCopy, 0, BUFFER_LENGTH_BYTES - (numSamplesToCopy * sizeof(int16_t)));
+            }
+            
+            memcpy(currentPacketPtr, _audioSampleArray + i, numSamplesToCopy * sizeof(int16_t));
+            
+            injectorSocket->send(destinationSocket, dataPacket, sizeof(dataPacket));
+            
+            double usecToSleep = BUFFER_SEND_INTERVAL_USECS - (usecTimestampNow() - usecTimestamp(&startTime));
+            if (usecToSleep > 0) {
+                usleep(usecToSleep);
+            }
+        }
+        
+        _isInjectingAudio = false;
+    }
+}
+
 void AudioInjector::addSample(const int16_t sample) {
     if (_indexOfNextSlot != _numTotalSamples) {
         // only add this sample if we actually have space for it
diff --git a/libraries/audio/src/AudioInjector.h b/libraries/audio/src/AudioInjector.h
index fb5bf86c58..eb22df1177 100644
--- a/libraries/audio/src/AudioInjector.h
+++ b/libraries/audio/src/AudioInjector.h
@@ -25,6 +25,8 @@ public:
     AudioInjector(const char* filename);
     AudioInjector(int maxNumSamples);
     ~AudioInjector();
+
+    void injectAudio(UDPSocket* injectorSocket, sockaddr* destinationSocket);
     
     bool isInjectingAudio() const { return _isInjectingAudio; }
     void setIsInjectingAudio(bool isInjectingAudio) { _isInjectingAudio = isInjectingAudio; }