mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-08-06 10:57:09 +02:00
clear agent audio injector after send, don't send if empty
This commit is contained in:
parent
d3c3e330e0
commit
ef655f5e78
3 changed files with 15 additions and 2 deletions
|
@ -161,13 +161,16 @@ void Agent::run() {
|
||||||
|
|
||||||
emit willSendAudioDataCallback();
|
emit willSendAudioDataCallback();
|
||||||
|
|
||||||
if (audioMixer) {
|
if (audioMixer && scriptedAudioInjector.hasSamplesToInject()) {
|
||||||
int usecToSleep = usecTimestamp(&startTime) + (thisFrame++ * INJECT_INTERVAL_USECS) - usecTimestampNow();
|
int usecToSleep = usecTimestamp(&startTime) + (thisFrame++ * INJECT_INTERVAL_USECS) - usecTimestampNow();
|
||||||
if (usecToSleep > 0) {
|
if (usecToSleep > 0) {
|
||||||
usleep(usecToSleep);
|
usleep(usecToSleep);
|
||||||
}
|
}
|
||||||
|
|
||||||
scriptedAudioInjector.injectAudio(NodeList::getInstance()->getNodeSocket(), audioMixer->getPublicSocket());
|
scriptedAudioInjector.injectAudio(NodeList::getInstance()->getNodeSocket(), audioMixer->getPublicSocket());
|
||||||
|
|
||||||
|
// clear out the audio injector so that it doesn't re-send what we just sent
|
||||||
|
scriptedAudioInjector.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
// allow the scripter's call back to setup visual data
|
// allow the scripter's call back to setup visual data
|
||||||
|
|
|
@ -64,7 +64,7 @@ AudioInjector::~AudioInjector() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void AudioInjector::injectAudio(UDPSocket* injectorSocket, sockaddr* destinationSocket) {
|
void AudioInjector::injectAudio(UDPSocket* injectorSocket, sockaddr* destinationSocket) {
|
||||||
if (_audioSampleArray) {
|
if (_audioSampleArray && _indexOfNextSlot > 0) {
|
||||||
_isInjectingAudio = true;
|
_isInjectingAudio = true;
|
||||||
|
|
||||||
timeval startTime;
|
timeval startTime;
|
||||||
|
@ -139,6 +139,11 @@ void AudioInjector::addSamples(int16_t* sampleBuffer, int numSamples) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void AudioInjector::clear() {
|
||||||
|
_indexOfNextSlot = 0;
|
||||||
|
memset(_audioSampleArray, 0, _numTotalSamples * sizeof(int16_t));
|
||||||
|
}
|
||||||
|
|
||||||
int16_t& AudioInjector::sampleAt(const int index) {
|
int16_t& AudioInjector::sampleAt(const int index) {
|
||||||
assert(index >= 0 && index < _numTotalSamples);
|
assert(index >= 0 && index < _numTotalSamples);
|
||||||
|
|
||||||
|
@ -149,4 +154,5 @@ void AudioInjector::insertSample(const int index, int sample) {
|
||||||
assert (index >= 0 && index < _numTotalSamples);
|
assert (index >= 0 && index < _numTotalSamples);
|
||||||
|
|
||||||
_audioSampleArray[index] = (int16_t) sample;
|
_audioSampleArray[index] = (int16_t) sample;
|
||||||
|
_indexOfNextSlot = index + 1;
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,8 +51,12 @@ public:
|
||||||
float getRadius() const { return _radius; }
|
float getRadius() const { return _radius; }
|
||||||
void setRadius(float radius) { _radius = radius; }
|
void setRadius(float radius) { _radius = radius; }
|
||||||
|
|
||||||
|
bool hasSamplesToInject() const { return _indexOfNextSlot > 0; }
|
||||||
|
|
||||||
void addSample(const int16_t sample);
|
void addSample(const int16_t sample);
|
||||||
void addSamples(int16_t* sampleBuffer, int numSamples);
|
void addSamples(int16_t* sampleBuffer, int numSamples);
|
||||||
|
|
||||||
|
void clear();
|
||||||
public slots:
|
public slots:
|
||||||
int16_t& sampleAt(const int index);
|
int16_t& sampleAt(const int index);
|
||||||
void insertSample(const int index, int sample);
|
void insertSample(const int index, int sample);
|
||||||
|
|
Loading…
Reference in a new issue