maxFramesOverDesired added; settable from domain page and preferences

This commit is contained in:
wangyix 2014-07-29 15:57:32 -07:00
parent bb2adb2721
commit d49970d010
22 changed files with 149 additions and 22 deletions

View file

@ -36,7 +36,7 @@ Agent::Agent(const QByteArray& packet) :
_voxelEditSender(), _voxelEditSender(),
_particleEditSender(), _particleEditSender(),
_modelEditSender(), _modelEditSender(),
_receivedAudioStream(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO, 1, false), _receivedAudioStream(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO, 1, false, 0),
_avatarHashMap() _avatarHashMap()
{ {
// be the parent of the script engine so it gets moved when we do // be the parent of the script engine so it gets moved when we do

View file

@ -68,6 +68,7 @@ void attachNewNodeDataToNode(Node *newNode) {
} }
bool AudioMixer::_useDynamicJitterBuffers = false; bool AudioMixer::_useDynamicJitterBuffers = false;
int AudioMixer::_maxFramesOverDesired = 20;
AudioMixer::AudioMixer(const QByteArray& packet) : AudioMixer::AudioMixer(const QByteArray& packet) :
ThreadedAssignment(packet), ThreadedAssignment(packet),
@ -469,6 +470,10 @@ void AudioMixer::run() {
qDebug() << "Dynamic jitter buffers disabled, using old behavior."; qDebug() << "Dynamic jitter buffers disabled, using old behavior.";
_useDynamicJitterBuffers = false; _useDynamicJitterBuffers = false;
} }
const QString MAX_FRAMES_OVER_DESIRED_JSON_KEY = "max-frames-over-desired";
_maxFramesOverDesired = audioGroupObject[MAX_FRAMES_OVER_DESIRED_JSON_KEY].toString().toInt();
qDebug() << "Max frames over desired:" << _maxFramesOverDesired;
} }
int nextFrame = 0; int nextFrame = 0;

View file

@ -38,6 +38,7 @@ public slots:
void sendStatsPacket(); void sendStatsPacket();
static bool getUseDynamicJitterBuffers() { return _useDynamicJitterBuffers; } static bool getUseDynamicJitterBuffers() { return _useDynamicJitterBuffers; }
static int getMaxFramesOverDesired() { return _maxFramesOverDesired; }
private: private:
/// adds one stream to the mix for a listening node /// adds one stream to the mix for a listening node
@ -59,7 +60,9 @@ private:
int _sumMixes; int _sumMixes;
AABox* _sourceUnattenuatedZone; AABox* _sourceUnattenuatedZone;
AABox* _listenerUnattenuatedZone; AABox* _listenerUnattenuatedZone;
static bool _useDynamicJitterBuffers; static bool _useDynamicJitterBuffers;
static int _maxFramesOverDesired;
quint64 _lastSendAudioStreamStatsTime; quint64 _lastSendAudioStreamStatsTime;
}; };

View file

@ -74,7 +74,7 @@ int AudioMixerClientData::parseData(const QByteArray& packet) {
bool isStereo = channelFlag == 1; bool isStereo = channelFlag == 1;
_audioStreams.insert(nullUUID, _audioStreams.insert(nullUUID,
matchingStream = new AvatarAudioStream(isStereo, AudioMixer::getUseDynamicJitterBuffers())); matchingStream = new AvatarAudioStream(isStereo, AudioMixer::getUseDynamicJitterBuffers(), AudioMixer::getMaxFramesOverDesired()));
} else { } else {
matchingStream = _audioStreams.value(nullUUID); matchingStream = _audioStreams.value(nullUUID);
} }
@ -87,7 +87,7 @@ int AudioMixerClientData::parseData(const QByteArray& packet) {
if (!_audioStreams.contains(streamIdentifier)) { if (!_audioStreams.contains(streamIdentifier)) {
_audioStreams.insert(streamIdentifier, _audioStreams.insert(streamIdentifier,
matchingStream = new InjectedAudioStream(streamIdentifier, AudioMixer::getUseDynamicJitterBuffers())); matchingStream = new InjectedAudioStream(streamIdentifier, AudioMixer::getUseDynamicJitterBuffers(), AudioMixer::getMaxFramesOverDesired()));
} else { } else {
matchingStream = _audioStreams.value(streamIdentifier); matchingStream = _audioStreams.value(streamIdentifier);
} }

View file

@ -13,8 +13,8 @@
#include "AvatarAudioStream.h" #include "AvatarAudioStream.h"
AvatarAudioStream::AvatarAudioStream(bool isStereo, bool dynamicJitterBuffer) : AvatarAudioStream::AvatarAudioStream(bool isStereo, bool dynamicJitterBuffer, int maxFramesOverDesired) :
PositionalAudioStream(PositionalAudioStream::Microphone, isStereo, dynamicJitterBuffer) PositionalAudioStream(PositionalAudioStream::Microphone, isStereo, dynamicJitterBuffer, maxFramesOverDesired)
{ {
} }

View file

@ -18,7 +18,7 @@
class AvatarAudioStream : public PositionalAudioStream { class AvatarAudioStream : public PositionalAudioStream {
public: public:
AvatarAudioStream(bool isStereo = false, bool dynamicJitterBuffer = false); AvatarAudioStream(bool isStereo, bool dynamicJitterBuffer, int maxFramesOverDesired);
private: private:
// disallow copying of AvatarAudioStream objects // disallow copying of AvatarAudioStream objects

View file

@ -8,6 +8,12 @@
"help": "Boxes for source and listener (corner x, corner y, corner z, size x, size y, size z, corner x, corner y, corner z, size x, size y, size z)", "help": "Boxes for source and listener (corner x, corner y, corner z, size x, size y, size z, corner x, corner y, corner z, size x, size y, size z)",
"placeholder": "no zone", "placeholder": "no zone",
"default": "" "default": ""
},
"max-frames-over-desired": {
"label": "Max Frames Over Desired",
"help": "The highest number of frames an AudioMixer's ringbuffer can exceed the desired jitter buffer frames by",
"placeholder": "20",
"default": ""
}, },
"dynamic-jitter-buffer": { "dynamic-jitter-buffer": {
"type": "checkbox", "type": "checkbox",

View file

@ -1711,6 +1711,9 @@ void Application::init() {
if (Menu::getInstance()->getAudioJitterBufferFrames() != 0) { if (Menu::getInstance()->getAudioJitterBufferFrames() != 0) {
_audio.overrideDesiredJitterBufferFramesTo(Menu::getInstance()->getAudioJitterBufferFrames()); _audio.overrideDesiredJitterBufferFramesTo(Menu::getInstance()->getAudioJitterBufferFrames());
} }
_audio.setMaxFramesOverDesired(Menu::getInstance()->getMaxFramesOverDesired());
qDebug("Loaded settings"); qDebug("Loaded settings");
// initialize our face trackers after loading the menu settings // initialize our face trackers after loading the menu settings

View file

@ -76,9 +76,9 @@ Audio::Audio(QObject* parent) :
// this delay will slowly add up and the longer someone runs, they more delayed their audio will be. // this delay will slowly add up and the longer someone runs, they more delayed their audio will be.
_inputRingBuffer(0), _inputRingBuffer(0),
#ifdef _WIN32 #ifdef _WIN32
_receivedAudioStream(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO, 100, true, true), _receivedAudioStream(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO, 100, true, 20, true),
#else #else
_receivedAudioStream(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO, 10, true, true), // DO NOT CHANGE THIS UNLESS YOU SOLVE THE AUDIO DEVICE DRIFT PROBLEM!!! _receivedAudioStream(NETWORK_BUFFER_LENGTH_SAMPLES_STEREO, 10, true, 20, true), // DO NOT CHANGE THIS UNLESS YOU SOLVE THE AUDIO DEVICE DRIFT PROBLEM!!!
#endif #endif
_isStereoInput(false), _isStereoInput(false),
_averagedLatency(0.0), _averagedLatency(0.0),

View file

@ -59,6 +59,9 @@ public:
void overrideDesiredJitterBufferFramesTo(int desired) { _receivedAudioStream.overrideDesiredJitterBufferFramesTo(desired); } void overrideDesiredJitterBufferFramesTo(int desired) { _receivedAudioStream.overrideDesiredJitterBufferFramesTo(desired); }
void unoverrideDesiredJitterBufferFrames() { _receivedAudioStream.unoverrideDesiredJitterBufferFrames(); } void unoverrideDesiredJitterBufferFrames() { _receivedAudioStream.unoverrideDesiredJitterBufferFrames(); }
void setMaxFramesOverDesired(int maxFramesOverDesired) { _receivedAudioStream.setMaxFramesOverDesired(maxFramesOverDesired); }
int getDesiredJitterBufferFrames() const { return _receivedAudioStream.getDesiredJitterBufferFrames(); } int getDesiredJitterBufferFrames() const { return _receivedAudioStream.getDesiredJitterBufferFrames(); }
float getCollisionSoundMagnitude() { return _collisionSoundMagnitude; } float getCollisionSoundMagnitude() { return _collisionSoundMagnitude; }

View file

@ -83,6 +83,7 @@ const int CONSOLE_HEIGHT = 200;
Menu::Menu() : Menu::Menu() :
_actionHash(), _actionHash(),
_audioJitterBufferFrames(0), _audioJitterBufferFrames(0),
_maxFramesOverDesired(0),
_bandwidthDialog(NULL), _bandwidthDialog(NULL),
_fieldOfView(DEFAULT_FIELD_OF_VIEW_DEGREES), _fieldOfView(DEFAULT_FIELD_OF_VIEW_DEGREES),
_realWorldFieldOfView(DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES), _realWorldFieldOfView(DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES),
@ -628,6 +629,7 @@ void Menu::loadSettings(QSettings* settings) {
} }
_audioJitterBufferFrames = loadSetting(settings, "audioJitterBufferFrames", 0); _audioJitterBufferFrames = loadSetting(settings, "audioJitterBufferFrames", 0);
_maxFramesOverDesired = loadSetting(settings, "maxFramesOverDesired", 0);
_fieldOfView = loadSetting(settings, "fieldOfView", DEFAULT_FIELD_OF_VIEW_DEGREES); _fieldOfView = loadSetting(settings, "fieldOfView", DEFAULT_FIELD_OF_VIEW_DEGREES);
_realWorldFieldOfView = loadSetting(settings, "realWorldFieldOfView", DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES); _realWorldFieldOfView = loadSetting(settings, "realWorldFieldOfView", DEFAULT_REAL_WORLD_FIELD_OF_VIEW_DEGREES);
_faceshiftEyeDeflection = loadSetting(settings, "faceshiftEyeDeflection", DEFAULT_FACESHIFT_EYE_DEFLECTION); _faceshiftEyeDeflection = loadSetting(settings, "faceshiftEyeDeflection", DEFAULT_FACESHIFT_EYE_DEFLECTION);
@ -678,6 +680,7 @@ void Menu::saveSettings(QSettings* settings) {
} }
settings->setValue("audioJitterBufferFrames", _audioJitterBufferFrames); settings->setValue("audioJitterBufferFrames", _audioJitterBufferFrames);
settings->setValue("maxFramesOverDesired", _maxFramesOverDesired);
settings->setValue("fieldOfView", _fieldOfView); settings->setValue("fieldOfView", _fieldOfView);
settings->setValue("faceshiftEyeDeflection", _faceshiftEyeDeflection); settings->setValue("faceshiftEyeDeflection", _faceshiftEyeDeflection);
settings->setValue("maxVoxels", _maxVoxels); settings->setValue("maxVoxels", _maxVoxels);

View file

@ -87,6 +87,8 @@ public:
float getAudioJitterBufferFrames() const { return _audioJitterBufferFrames; } float getAudioJitterBufferFrames() const { return _audioJitterBufferFrames; }
void setAudioJitterBufferFrames(float audioJitterBufferSamples) { _audioJitterBufferFrames = audioJitterBufferSamples; } void setAudioJitterBufferFrames(float audioJitterBufferSamples) { _audioJitterBufferFrames = audioJitterBufferSamples; }
int getMaxFramesOverDesired() const { return _maxFramesOverDesired; }
void setMaxFramesOverDesired(int maxFramesOverDesired) { _maxFramesOverDesired = maxFramesOverDesired; }
float getFieldOfView() const { return _fieldOfView; } float getFieldOfView() const { return _fieldOfView; }
void setFieldOfView(float fieldOfView) { _fieldOfView = fieldOfView; } void setFieldOfView(float fieldOfView) { _fieldOfView = fieldOfView; }
float getRealWorldFieldOfView() const { return _realWorldFieldOfView; } float getRealWorldFieldOfView() const { return _realWorldFieldOfView; }
@ -258,6 +260,7 @@ private:
QHash<QString, QAction*> _actionHash; QHash<QString, QAction*> _actionHash;
int _audioJitterBufferFrames; /// number of extra samples to wait before starting audio playback int _audioJitterBufferFrames; /// number of extra samples to wait before starting audio playback
int _maxFramesOverDesired;
BandwidthDialog* _bandwidthDialog; BandwidthDialog* _bandwidthDialog;
float _fieldOfView; /// in Degrees, doesn't apply to HMD like Oculus float _fieldOfView; /// in Degrees, doesn't apply to HMD like Oculus
float _realWorldFieldOfView; // The actual FOV set by the user's monitor size and view distance float _realWorldFieldOfView; // The actual FOV set by the user's monitor size and view distance

View file

@ -151,6 +151,8 @@ void PreferencesDialog::loadPreferences() {
ui.audioJitterSpin->setValue(menuInstance->getAudioJitterBufferFrames()); ui.audioJitterSpin->setValue(menuInstance->getAudioJitterBufferFrames());
ui.maxFramesOverDesiredSpin->setValue(menuInstance->getMaxFramesOverDesired());
ui.realWorldFieldOfViewSpin->setValue(menuInstance->getRealWorldFieldOfView()); ui.realWorldFieldOfViewSpin->setValue(menuInstance->getRealWorldFieldOfView());
ui.fieldOfViewSpin->setValue(menuInstance->getFieldOfView()); ui.fieldOfViewSpin->setValue(menuInstance->getFieldOfView());
@ -241,11 +243,14 @@ void PreferencesDialog::savePreferences() {
Menu::getInstance()->setAudioJitterBufferFrames(ui.audioJitterSpin->value()); Menu::getInstance()->setAudioJitterBufferFrames(ui.audioJitterSpin->value());
if (Menu::getInstance()->getAudioJitterBufferFrames() != 0) { if (Menu::getInstance()->getAudioJitterBufferFrames() != 0) {
Application::getInstance()->getAudio()->overrideDesiredJitterBufferFramesTo(ui.audioJitterSpin->value()); Application::getInstance()->getAudio()->overrideDesiredJitterBufferFramesTo(Menu::getInstance()->getAudioJitterBufferFrames());
} else { } else {
Application::getInstance()->getAudio()->unoverrideDesiredJitterBufferFrames(); Application::getInstance()->getAudio()->unoverrideDesiredJitterBufferFrames();
} }
Menu::getInstance()->setMaxFramesOverDesired(ui.maxFramesOverDesiredSpin->value());
Application::getInstance()->getAudio()->setMaxFramesOverDesired(Menu::getInstance()->getMaxFramesOverDesired());
Application::getInstance()->resizeGL(Application::getInstance()->getGLWidget()->width(), Application::getInstance()->resizeGL(Application::getInstance()->getGLWidget()->width(),
Application::getInstance()->getGLWidget()->height()); Application::getInstance()->getGLWidget()->height());
} }

View file

@ -1543,7 +1543,7 @@ padding: 10px;margin-top:10px</string>
</font> </font>
</property> </property>
<property name="minimum"> <property name="minimum">
<number>-10000</number> <number>0</number>
</property> </property>
<property name="maximum"> <property name="maximum">
<number>10000</number> <number>10000</number>
@ -1555,6 +1555,99 @@ padding: 10px;margin-top:10px</string>
</item> </item>
</layout> </layout>
</item> </item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_13">
<property name="spacing">
<number>0</number>
</property>
<property name="topMargin">
<number>10</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>10</number>
</property>
<item alignment="Qt::AlignLeft">
<widget class="QLabel" name="label_10">
<property name="font">
<font>
<family>Arial</family>
</font>
</property>
<property name="styleSheet">
<string notr="true">color: rgb(51, 51, 51)</string>
</property>
<property name="text">
<string>Max Frames Over Desired</string>
</property>
<property name="indent">
<number>15</number>
</property>
<property name="buddy">
<cstring>maxFramesOverDesiredSpin</cstring>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_12">
<property name="font">
<font>
<family>Arial</family>
</font>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item>
<widget class="QSpinBox" name="maxFramesOverDesiredSpin">
<property name="sizePolicy">
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="minimumSize">
<size>
<width>95</width>
<height>36</height>
</size>
</property>
<property name="maximumSize">
<size>
<width>70</width>
<height>16777215</height>
</size>
</property>
<property name="font">
<font>
<family>Arial</family>
</font>
</property>
<property name="minimum">
<number>0</number>
</property>
<property name="maximum">
<number>10000</number>
</property>
<property name="value">
<number>1</number>
</property>
</widget>
</item>
</layout>
</item>
<item> <item>
<layout class="QHBoxLayout" name="horizontalLayout_6"> <layout class="QHBoxLayout" name="horizontalLayout_6">
<property name="spacing"> <property name="spacing">

View file

@ -13,7 +13,7 @@
#include "PacketHeaders.h" #include "PacketHeaders.h"
InboundAudioStream::InboundAudioStream(int numFrameSamples, int numFramesCapacity, InboundAudioStream::InboundAudioStream(int numFrameSamples, int numFramesCapacity,
bool dynamicJitterBuffers, /*int maxFramesOverDesired,*/ bool useStDevForJitterCalc) : bool dynamicJitterBuffers, int maxFramesOverDesired, bool useStDevForJitterCalc) :
_ringBuffer(numFrameSamples, false, numFramesCapacity), _ringBuffer(numFrameSamples, false, numFramesCapacity),
_lastPopSucceeded(false), _lastPopSucceeded(false),
_lastPopOutput(), _lastPopOutput(),
@ -23,7 +23,7 @@ InboundAudioStream::InboundAudioStream(int numFrameSamples, int numFramesCapacit
_calculatedJitterBufferFramesUsingMaxGap(0), _calculatedJitterBufferFramesUsingMaxGap(0),
_calculatedJitterBufferFramesUsingStDev(0), _calculatedJitterBufferFramesUsingStDev(0),
_desiredJitterBufferFrames(1), _desiredJitterBufferFrames(1),
_maxFramesOverDesired(20),//maxFramesOverDesired), // PLACEHOLDER!!!!!!!!! _maxFramesOverDesired(maxFramesOverDesired),
_isStarved(true), _isStarved(true),
_hasStarted(false), _hasStarted(false),
_consecutiveNotMixedCount(0), _consecutiveNotMixedCount(0),

View file

@ -50,7 +50,7 @@ class InboundAudioStream : public NodeData {
Q_OBJECT Q_OBJECT
public: public:
InboundAudioStream(int numFrameSamples, int numFramesCapacity, InboundAudioStream(int numFrameSamples, int numFramesCapacity,
bool dynamicJitterBuffers, //int maxFramesOverDesired, bool dynamicJitterBuffers, int maxFramesOverDesired,
bool useStDevForJitterCalc = false); bool useStDevForJitterCalc = false);
void reset(); void reset();
@ -75,6 +75,8 @@ public:
/// this function should be called once per second to ensure the seq num stats history spans ~30 seconds /// this function should be called once per second to ensure the seq num stats history spans ~30 seconds
AudioStreamStats updateSeqHistoryAndGetAudioStreamStats(); AudioStreamStats updateSeqHistoryAndGetAudioStreamStats();
void setMaxFramesOverDesired(int maxFramesOverDesired) { _maxFramesOverDesired = maxFramesOverDesired; }
virtual AudioStreamStats getAudioStreamStats() const; virtual AudioStreamStats getAudioStreamStats() const;
/// returns the desired number of jitter buffer frames under the dyanmic jitter buffers scheme /// returns the desired number of jitter buffer frames under the dyanmic jitter buffers scheme
@ -88,6 +90,7 @@ public:
int getCalculatedJitterBufferFramesUsingMaxGap() const { return _calculatedJitterBufferFramesUsingMaxGap; } int getCalculatedJitterBufferFramesUsingMaxGap() const { return _calculatedJitterBufferFramesUsingMaxGap; }
int getDesiredJitterBufferFrames() const { return _desiredJitterBufferFrames; } int getDesiredJitterBufferFrames() const { return _desiredJitterBufferFrames; }
int getMaxFramesOverDesired() const { return _maxFramesOverDesired; }
int getNumFrameSamples() const { return _ringBuffer.getNumFrameSamples(); } int getNumFrameSamples() const { return _ringBuffer.getNumFrameSamples(); }
int getFrameCapacity() const { return _ringBuffer.getFrameCapacity(); } int getFrameCapacity() const { return _ringBuffer.getFrameCapacity(); }
int getFramesAvailable() const { return _ringBuffer.framesAvailable(); } int getFramesAvailable() const { return _ringBuffer.framesAvailable(); }

View file

@ -19,8 +19,8 @@
#include "InjectedAudioStream.h" #include "InjectedAudioStream.h"
InjectedAudioStream::InjectedAudioStream(const QUuid& streamIdentifier, bool dynamicJitterBuffer) : InjectedAudioStream::InjectedAudioStream(const QUuid& streamIdentifier, bool dynamicJitterBuffer, int maxFramesOverDesired) :
PositionalAudioStream(PositionalAudioStream::Injector, false, dynamicJitterBuffer), PositionalAudioStream(PositionalAudioStream::Injector, false, dynamicJitterBuffer, maxFramesOverDesired),
_streamIdentifier(streamIdentifier), _streamIdentifier(streamIdentifier),
_radius(0.0f), _radius(0.0f),
_attenuationRatio(0) _attenuationRatio(0)

View file

@ -18,7 +18,7 @@
class InjectedAudioStream : public PositionalAudioStream { class InjectedAudioStream : public PositionalAudioStream {
public: public:
InjectedAudioStream(const QUuid& streamIdentifier = QUuid(), bool dynamicJitterBuffer = false); InjectedAudioStream(const QUuid& streamIdentifier, bool dynamicJitterBuffer, int maxFramesOverDesired);
float getRadius() const { return _radius; } float getRadius() const { return _radius; }
float getAttenuationRatio() const { return _attenuationRatio; } float getAttenuationRatio() const { return _attenuationRatio; }

View file

@ -1,8 +1,8 @@
#include "MixedAudioStream.h" #include "MixedAudioStream.h"
MixedAudioStream::MixedAudioStream(int numFrameSamples, int numFramesCapacity, bool dynamicJitterBuffers, bool useStDevForJitterCalc) MixedAudioStream::MixedAudioStream(int numFrameSamples, int numFramesCapacity, bool dynamicJitterBuffers, int maxFramesOverDesired, bool useStDevForJitterCalc)
: InboundAudioStream(numFrameSamples, numFramesCapacity, dynamicJitterBuffers, useStDevForJitterCalc) : InboundAudioStream(numFrameSamples, numFramesCapacity, dynamicJitterBuffers, maxFramesOverDesired, useStDevForJitterCalc)
{ {
} }

View file

@ -17,7 +17,7 @@
class MixedAudioStream : public InboundAudioStream { class MixedAudioStream : public InboundAudioStream {
public: public:
MixedAudioStream(int numFrameSamples, int numFramesCapacity, bool dynamicJitterBuffers, bool useStDevForJitterCalc = false); MixedAudioStream(int numFrameSamples, int numFramesCapacity, bool dynamicJitterBuffers, int maxFramesOverDesired, bool useStDevForJitterCalc = false);
float getNextOutputFrameLoudness() const { return _ringBuffer.getNextOutputFrameLoudness(); } float getNextOutputFrameLoudness() const { return _ringBuffer.getNextOutputFrameLoudness(); }

View file

@ -21,9 +21,9 @@
#include <PacketHeaders.h> #include <PacketHeaders.h>
#include <UUID.h> #include <UUID.h>
PositionalAudioStream::PositionalAudioStream(PositionalAudioStream::Type type, bool isStereo, bool dynamicJitterBuffers) : PositionalAudioStream::PositionalAudioStream(PositionalAudioStream::Type type, bool isStereo, bool dynamicJitterBuffers, int maxFramesOverDesired) :
InboundAudioStream(isStereo ? NETWORK_BUFFER_LENGTH_SAMPLES_STEREO : NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL, InboundAudioStream(isStereo ? NETWORK_BUFFER_LENGTH_SAMPLES_STEREO : NETWORK_BUFFER_LENGTH_SAMPLES_PER_CHANNEL,
AUDIOMIXER_INBOUND_RING_BUFFER_FRAME_CAPACITY, dynamicJitterBuffers), AUDIOMIXER_INBOUND_RING_BUFFER_FRAME_CAPACITY, dynamicJitterBuffers, maxFramesOverDesired),
_type(type), _type(type),
_position(0.0f, 0.0f, 0.0f), _position(0.0f, 0.0f, 0.0f),
_orientation(0.0f, 0.0f, 0.0f, 0.0f), _orientation(0.0f, 0.0f, 0.0f, 0.0f),

View file

@ -27,7 +27,7 @@ public:
Injector Injector
}; };
PositionalAudioStream(PositionalAudioStream::Type type, bool isStereo = false, bool dynamicJitterBuffers = false); PositionalAudioStream(PositionalAudioStream::Type type, bool isStereo, bool dynamicJitterBuffers, int maxFramesOverDesired);
virtual AudioStreamStats getAudioStreamStats() const; virtual AudioStreamStats getAudioStreamStats() const;