add a stream identifier back to the audio injector

This commit is contained in:
Stephen Birarda 2013-10-18 17:36:59 -07:00
parent 7da1f5a235
commit 4fe2e25bf0
4 changed files with 9 additions and 41 deletions

View file

@ -21,17 +21,6 @@ sockaddr AudioInjectionManager::_destinationSocket;
bool AudioInjectionManager::_isDestinationSocketExplicit = false;
AudioInjector* AudioInjectionManager::_injectors[50] = {};
AudioInjector* AudioInjectionManager::injectorWithSamplesFromFile(const char* filename) {
for (int i = 0; i < MAX_CONCURRENT_INJECTORS; i++) {
if (!_injectors[i]) {
_injectors[i] = new AudioInjector(filename);
return _injectors[i];
}
}
return NULL;
}
AudioInjector* AudioInjectionManager::injectorWithCapacity(int capacity) {
for (int i = 0; i < MAX_CONCURRENT_INJECTORS; i++) {
if (!_injectors[i]) {

View file

@ -19,7 +19,6 @@ const int MAX_CONCURRENT_INJECTORS = 50;
class AudioInjectionManager {
public:
static AudioInjector* injectorWithCapacity(int capacity);
static AudioInjector* injectorWithSamplesFromFile(const char* filename);
static void threadInjector(AudioInjector* injector);

View file

@ -17,34 +17,8 @@
#include "AudioInjector.h"
AudioInjector::AudioInjector(const char* filename) :
_position(0.0f, 0.0f, 0.0f),
_orientation(0.0f, 0.0f, 0.0f, 0.0f),
_radius(0.0f),
_volume(MAX_INJECTOR_VOLUME),
_indexOfNextSlot(0),
_isInjectingAudio(false)
{
std::fstream sourceFile;
sourceFile.open(filename, std::ios::in | std::ios::binary);
sourceFile.seekg(0, std::ios::end);
int totalBytes = sourceFile.tellg();
if (totalBytes == -1) {
printf("Error reading audio data from file %s\n", filename);
_audioSampleArray = NULL;
} else {
printf("Read %d bytes from audio file\n", totalBytes);
sourceFile.seekg(0, std::ios::beg);
_numTotalSamples = totalBytes / 2;
_audioSampleArray = new int16_t[_numTotalSamples];
sourceFile.read((char *)_audioSampleArray, totalBytes);
}
}
AudioInjector::AudioInjector(int maxNumSamples) :
_streamIdentifier(QUuid::createUuid()),
_numTotalSamples(maxNumSamples),
_position(0.0f, 0.0f, 0.0f),
_orientation(),
@ -79,11 +53,16 @@ void AudioInjector::injectAudio(UDPSocket* injectorSocket, sockaddr* destination
unsigned char* currentPacketPtr = dataPacket + populateTypeAndVersion(dataPacket, PACKET_TYPE_INJECT_AUDIO);
// copy the identifier for this injector
// copy the UUID for the owning node
QByteArray rfcUUID = NodeList::getInstance()->getOwnerUUID().toRfc4122();
memcpy(currentPacketPtr, rfcUUID.constData(), rfcUUID.size());
currentPacketPtr += rfcUUID.size();
// copy the stream identifier
QByteArray rfcStreamIdentifier = _streamIdentifier.toRfc4122();
memcpy(currentPacketPtr, rfcStreamIdentifier.constData(), rfcStreamIdentifier.size());
currentPacketPtr += rfcStreamIdentifier.size();
memcpy(currentPacketPtr, &_position, sizeof(_position));
currentPacketPtr += sizeof(_position);

View file

@ -13,6 +13,7 @@
#include <glm/gtx/component_wise.hpp>
#include <QtCore/QObject>
#include <QtCore/QUuid>
#include <RegisteredMetaTypes.h>
#include <UDPSocket.h>
@ -29,7 +30,6 @@ class AudioInjector : public QObject {
Q_PROPERTY(glm::vec3 position READ getPosition WRITE setPosition)
Q_PROPERTY(uchar volume READ getVolume WRITE setVolume);
public:
AudioInjector(const char* filename);
AudioInjector(int maxNumSamples);
~AudioInjector();
@ -59,6 +59,7 @@ public slots:
int16_t& sampleAt(const int index);
void insertSample(const int index, int sample);
private:
QUuid _streamIdentifier;
int16_t* _audioSampleArray;
int _numTotalSamples;
glm::vec3 _position;