Update options position and orientation correctly in the AudioInjector

This commit is contained in:
Atlante45 2014-08-18 21:05:03 -07:00
parent c113dd350e
commit 45ccb01297
4 changed files with 22 additions and 3 deletions

View file

@ -27,7 +27,6 @@ AudioInjector::AudioInjector(QObject* parent) :
_options(), _options(),
_shouldStop(false) _shouldStop(false)
{ {
} }
AudioInjector::AudioInjector(Sound* sound, const AudioInjectorOptions& injectorOptions) : AudioInjector::AudioInjector(Sound* sound, const AudioInjectorOptions& injectorOptions) :
@ -35,7 +34,10 @@ AudioInjector::AudioInjector(Sound* sound, const AudioInjectorOptions& injectorO
_options(injectorOptions), _options(injectorOptions),
_shouldStop(false) _shouldStop(false)
{ {
}
void AudioInjector::setOptions(AudioInjectorOptions& options) {
_options = options;
} }
const uchar MAX_INJECTOR_VOLUME = 0xFF; const uchar MAX_INJECTOR_VOLUME = 0xFF;
@ -73,9 +75,11 @@ void AudioInjector::injectAudio() {
packetStream << loopbackFlag; packetStream << loopbackFlag;
// pack the position for injected audio // pack the position for injected audio
int positionOptionOffset = injectAudioPacket.size();
packetStream.writeRawData(reinterpret_cast<const char*>(&_options.getPosition()), sizeof(_options.getPosition())); packetStream.writeRawData(reinterpret_cast<const char*>(&_options.getPosition()), sizeof(_options.getPosition()));
// pack our orientation for injected audio // pack our orientation for injected audio
int orientationOptionOffset = injectAudioPacket.size();
packetStream.writeRawData(reinterpret_cast<const char*>(&_options.getOrientation()), sizeof(_options.getOrientation())); packetStream.writeRawData(reinterpret_cast<const char*>(&_options.getOrientation()), sizeof(_options.getOrientation()));
// pack zero for radius // pack zero for radius
@ -101,6 +105,12 @@ void AudioInjector::injectAudio() {
int bytesToCopy = std::min(NETWORK_BUFFER_LENGTH_BYTES_PER_CHANNEL, int bytesToCopy = std::min(NETWORK_BUFFER_LENGTH_BYTES_PER_CHANNEL,
soundByteArray.size() - currentSendPosition); soundByteArray.size() - currentSendPosition);
memcpy(injectAudioPacket.data() + positionOptionOffset,
&_options.getPosition(),
sizeof(_options.getPosition()));
memcpy(injectAudioPacket.data() + orientationOptionOffset,
&_options.getOrientation(),
sizeof(_options.getOrientation()));
// resize the QByteArray to the right size // resize the QByteArray to the right size
injectAudioPacket.resize(numPreAudioDataBytes + bytesToCopy); injectAudioPacket.resize(numPreAudioDataBytes + bytesToCopy);

View file

@ -29,6 +29,7 @@ public:
public slots: public slots:
void injectAudio(); void injectAudio();
void stop() { _shouldStop = true; } void stop() { _shouldStop = true; }
void setOptions(AudioInjectorOptions& options);
signals: signals:
void finished(); void finished();
private: private:

View file

@ -19,7 +19,6 @@ AudioInjectorOptions::AudioInjectorOptions(QObject* parent) :
_orientation(glm::vec3(0.0f, 0.0f, 0.0f)), _orientation(glm::vec3(0.0f, 0.0f, 0.0f)),
_loopbackAudioInterface(NULL) _loopbackAudioInterface(NULL)
{ {
} }
AudioInjectorOptions::AudioInjectorOptions(const AudioInjectorOptions& other) { AudioInjectorOptions::AudioInjectorOptions(const AudioInjectorOptions& other) {
@ -29,3 +28,11 @@ AudioInjectorOptions::AudioInjectorOptions(const AudioInjectorOptions& other) {
_orientation = other._orientation; _orientation = other._orientation;
_loopbackAudioInterface = other._loopbackAudioInterface; _loopbackAudioInterface = other._loopbackAudioInterface;
} }
void AudioInjectorOptions::operator=(const AudioInjectorOptions& other) {
_position = other._position;
_volume = other._volume;
_loop = other._loop;
_orientation = other._orientation;
_loopbackAudioInterface = other._loopbackAudioInterface;
}

View file

@ -30,6 +30,7 @@ class AudioInjectorOptions : public QObject {
public: public:
AudioInjectorOptions(QObject* parent = 0); AudioInjectorOptions(QObject* parent = 0);
AudioInjectorOptions(const AudioInjectorOptions& other); AudioInjectorOptions(const AudioInjectorOptions& other);
void operator=(const AudioInjectorOptions& other);
const glm::vec3& getPosition() const { return _position; } const glm::vec3& getPosition() const { return _position; }
void setPosition(const glm::vec3& position) { _position = position; } void setPosition(const glm::vec3& position) { _position = position; }