mirror of
https://github.com/overte-org/overte.git
synced 2025-04-21 04:03:59 +02:00
add a stream identifier back to the audio injector
This commit is contained in:
parent
7da1f5a235
commit
4fe2e25bf0
4 changed files with 9 additions and 41 deletions
|
@ -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]) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue