AudioStats JSDoc

This commit is contained in:
David Rowe 2019-11-14 15:57:51 +13:00
parent 1f2deed941
commit c44c7dd85e

View file

@ -40,138 +40,181 @@ class AudioStreamStatsInterface : public QObject {
Q_OBJECT Q_OBJECT
/**jsdoc /**jsdoc
* Statistics for an audio stream.
*
* <p>Provided in the {@link AudioStats} API.</p>
*
* @class AudioStats.AudioStreamStats * @class AudioStats.AudioStreamStats
* *
* @hifi-interface * @hifi-interface
* @hifi-client-entity * @hifi-client-entity
* @hifi-avatar * @hifi-avatar
* *
* @property {number} lossRate <em>Read-only.</em> * @property {number} dropCount - The number of silent or old audio frames dropped.
* @property {number} lossCount <em>Read-only.</em> * <em>Read-only.</em>
* @property {number} lossRateWindow <em>Read-only.</em> * @property {number} framesAvailable - The number of audio frames containing data available.
* @property {number} lossCountWindow <em>Read-only.</em> * <em>Read-only.</em>
* @property {number} framesDesired <em>Read-only.</em> * @property {number} framesAvailableAvg - The time-weighted average of audio frames containing data available.
* @property {number} framesAvailable <em>Read-only.</em> * <em>Read-only.</em>
* @property {number} framesAvailableAvg <em>Read-only.</em> * @property {number} framesDesired - The desired number of audio frames for the jitter buffer.
* @property {number} unplayedMsMax <em>Read-only.</em> * <em>Read-only.</em>
* @property {number} starveCount <em>Read-only.</em> * @property {number} lastStarveDurationCount - The most recent number of consecutive times that audio frames have not been
* @property {number} lastStarveDurationCount <em>Read-only.</em> * available for processing.
* @property {number} dropCount <em>Read-only.</em> * <em>Read-only.</em>
* @property {number} overflowCount <em>Read-only.</em> * @property {number} lossCount - The total number of audio packets lost.
* @property {number} timegapMsMax <em>Read-only.</em> * <em>Read-only.</em>
* @property {number} timegapMsAvg <em>Read-only.</em> * @property {number} lossCountWindow - The number of audio packets lost since the previous statistic.
* @property {number} timegapMsMaxWindow <em>Read-only.</em> * <em>Read-only.</em>
* @property {number} timegapMsAvgWindow <em>Read-only.</em> * @property {number} lossRate - The total number of audio packets lost divided by the total number of audio packets
* expected.
* <em>Read-only.</em>
* @property {number} lossRateWindow - The number of audio packets lost divided by the total number of audio packets
* expected since the previous statistic.
* <em>Read-only.</em>
* @property {number} overflowCount - The number of times that the audio ring buffer has overflowed.
* <em>Read-only.</em>
* @property {number} starveCount - The total number of times that audio frames have not been available for processing.
* <em>Read-only.</em>
* @property {number} timegapMsAvg - The overall average time between data packets, in ms.
* <em>Read-only.</em>
* @property {number} timegapMsAvgWindow - The recent average time between data packets, in ms.
* <em>Read-only.</em>
* @property {number} timegapMsMax - The overall maximum time between data packets, in ms.
* <em>Read-only.</em>
* @property {number} timegapMsMaxWindow - The recent maximum time between data packets, in ms.
* <em>Read-only.</em>
* @property {number} unplayedMsMax - The duration of audio waiting to be played, in ms.
* <em>Read-only.</em>
*/ */
/**jsdoc /**jsdoc
* Triggered when the total number of audio packets lost divided by the total number of audio packets expected changes.
* @function AudioStats.AudioStreamStats.lossRateChanged * @function AudioStats.AudioStreamStats.lossRateChanged
* @param {number} lossRate * @param {number} lossRate - The total number of audio packets lost divided by the total number of audio packets expected.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(float, lossRate) AUDIO_PROPERTY(float, lossRate)
/**jsdoc /**jsdoc
* Triggered when the total number of audio packets lost changes.
* @function AudioStats.AudioStreamStats.lossCountChanged * @function AudioStats.AudioStreamStats.lossCountChanged
* @param {number} lossCount * @param {number} lossCount - The total number of audio packets lost.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(float, lossCount) AUDIO_PROPERTY(float, lossCount)
/**jsdoc /**jsdoc
* Triggered when the number of audio packets lost divided by the total number of audio packets expected since the previous
* statistic changes.
* @function AudioStats.AudioStreamStats.lossRateWindowChanged * @function AudioStats.AudioStreamStats.lossRateWindowChanged
* @param {number} lossRateWindow * @param {number} lossRateWindow - The number of audio packets lost divided by the total number of audio packets expected
* since the previous statistic.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(float, lossRateWindow) AUDIO_PROPERTY(float, lossRateWindow)
/**jsdoc /**jsdoc
* Triggered when the number of audio packets lost since the previous statistic changes.
* @function AudioStats.AudioStreamStats.lossCountWindowChanged * @function AudioStats.AudioStreamStats.lossCountWindowChanged
* @param {number} lossCountWindow * @param {number} lossCountWindow - The number of audio packets lost since the previous statistic.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(float, lossCountWindow) AUDIO_PROPERTY(float, lossCountWindow)
/**jsdoc /**jsdoc
* Triggered when the desired number of audio frames for the jitter buffer changes.
* @function AudioStats.AudioStreamStats.framesDesiredChanged * @function AudioStats.AudioStreamStats.framesDesiredChanged
* @param {number} framesDesired * @param {number} framesDesired - The desired number of audio frames for the jitter buffer.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(int, framesDesired) AUDIO_PROPERTY(int, framesDesired)
/**jsdoc /**jsdoc
* Triggered when the number of audio frames containing data available changes.
* @function AudioStats.AudioStreamStats.framesAvailableChanged * @function AudioStats.AudioStreamStats.framesAvailableChanged
* @param {number} framesAvailable * @param {number} framesAvailable - The number of audio frames containing data available.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(int, framesAvailable) AUDIO_PROPERTY(int, framesAvailable)
/**jsdoc /**jsdoc
* Triggered when the time-weighted average of audio frames containing data available changes.
* @function AudioStats.AudioStreamStats.framesAvailableAvgChanged * @function AudioStats.AudioStreamStats.framesAvailableAvgChanged
* @param {number} framesAvailableAvg * @param {number} framesAvailableAvg - The time-weighted average of audio frames containing data available.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(int, framesAvailableAvg) AUDIO_PROPERTY(int, framesAvailableAvg)
/**jsdoc /**jsdoc
* Triggered when the duration of audio waiting to be played changes.
* @function AudioStats.AudioStreamStats.unplayedMsMaxChanged * @function AudioStats.AudioStreamStats.unplayedMsMaxChanged
* @param {number} unplayedMsMax * @param {number} unplayedMsMax - The duration of audio waiting to be played, in ms.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(float, unplayedMsMax) AUDIO_PROPERTY(float, unplayedMsMax)
/**jsdoc /**jsdoc
* Triggered when the total number of times that audio frames have not been available for processing changes.
* @function AudioStats.AudioStreamStats.starveCountChanged * @function AudioStats.AudioStreamStats.starveCountChanged
* @param {number} starveCount * @param {number} starveCount - The total number of times that audio frames have not been available for processing.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(int, starveCount) AUDIO_PROPERTY(int, starveCount)
/**jsdoc /**jsdoc
* Triggered when the most recenbernumber of consecutive times that audio frames have not been available for processing
* changes.
* @function AudioStats.AudioStreamStats.lastStarveDurationCountChanged * @function AudioStats.AudioStreamStats.lastStarveDurationCountChanged
* @param {number} lastStarveDurationCount * @param {number} lastStarveDurationCount - The most recent number of consecutive times that audio frames have not been
* available for processing.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(int, lastStarveDurationCount) AUDIO_PROPERTY(int, lastStarveDurationCount)
/**jsdoc /**jsdoc
* Triggered when the number of silent or old audio frames dropped changes.
* @function AudioStats.AudioStreamStats.dropCountChanged * @function AudioStats.AudioStreamStats.dropCountChanged
* @param {number} dropCount * @param {number} dropCount - The number of silent or old audio frames dropped.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(int, dropCount) AUDIO_PROPERTY(int, dropCount)
/**jsdoc /**jsdoc
* Triggered when the number of times that the audio ring buffer has overflowed changes.
* @function AudioStats.AudioStreamStats.overflowCountChanged * @function AudioStats.AudioStreamStats.overflowCountChanged
* @param {number} overflowCount * @param {number} overflowCount - The number of times that the audio ring buffer has overflowed.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(int, overflowCount) AUDIO_PROPERTY(int, overflowCount)
/**jsdoc /**jsdoc
* Triggered when the overall maximum time between data packets changes.
* @function AudioStats.AudioStreamStats.timegapMsMaxChanged * @function AudioStats.AudioStreamStats.timegapMsMaxChanged
* @param {number} timegapMsMax * @param {number} timegapMsMax - The overall maximum time between data packets, in ms.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(quint64, timegapMsMax) AUDIO_PROPERTY(quint64, timegapMsMax)
/**jsdoc /**jsdoc
* Triggered when the overall average time between data packets changes.
* @function AudioStats.AudioStreamStats.timegapMsAvgChanged * @function AudioStats.AudioStreamStats.timegapMsAvgChanged
* @param {number} timegapMsAvg * @param {number} timegapMsAvg - The overall average time between data packets, in ms.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(quint64, timegapMsAvg) AUDIO_PROPERTY(quint64, timegapMsAvg)
/**jsdoc /**jsdoc
* Triggered when the recent maximum time between data packets changes.
* @function AudioStats.AudioStreamStats.timegapMsMaxWindowChanged * @function AudioStats.AudioStreamStats.timegapMsMaxWindowChanged
* @param {number} timegapMsMaxWindow * @param {number} timegapMsMaxWindow - The recent maximum time between data packets, in ms.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(quint64, timegapMsMaxWindow) AUDIO_PROPERTY(quint64, timegapMsMaxWindow)
/**jsdoc /**jsdoc
* Triggered when the recent average time between data packets changes.
* @function AudioStats.AudioStreamStats.timegapMsAvgWindowChanged * @function AudioStats.AudioStreamStats.timegapMsAvgWindowChanged
* @param {number} timegapMsAvgWindow * @param {number} timegapMsAvgWindow - The recent average time between data packets, in ms.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(quint64, timegapMsAvgWindow) AUDIO_PROPERTY(quint64, timegapMsAvgWindow)
@ -188,79 +231,106 @@ class AudioStatsInterface : public QObject {
Q_OBJECT Q_OBJECT
/**jsdoc /**jsdoc
* Audio stats from the client. * The <code>AudioStats</code> API provides statistics of the client and mixer audio.
*
* @namespace AudioStats * @namespace AudioStats
* *
* @hifi-interface * @hifi-interface
* @hifi-client-entity * @hifi-client-entity
* @hifi-avatar * @hifi-avatar
* *
* @property {number} pingMs <em>Read-only.</em> * @property {AudioStats.AudioStreamStats} clientStream - Statistics of the client's audio stream.
* @property {number} inputReadMsMax <em>Read-only.</em> * <em>Read-only.</em>
* @property {number} inputUnplayedMsMax <em>Read-only.</em> * @property {number} inputReadMsMax - The maximum duration of a block of audio data recently read from the microphone, in
* @property {number} outputUnplayedMsMax <em>Read-only.</em> * ms.
* @property {number} sentTimegapMsMax <em>Read-only.</em> * <em>Read-only.</em>
* @property {number} sentTimegapMsAvg <em>Read-only.</em> * @property {number} inputUnplayedMsMax - The maximum duration of microphone audio recently in the input buffer waiting to
* @property {number} sentTimegapMsMaxWindow <em>Read-only.</em> * be played, in ms.
* @property {number} sentTimegapMsAvgWindow <em>Read-only.</em> * <em>Read-only.</em>
* @property {AudioStats.AudioStreamStats} clientStream <em>Read-only.</em> * @property {AudioStats.AudioStreamStats} mixerStream - Statistics of the audio mixer's stream.
* @property {AudioStats.AudioStreamStats} mixerStream <em>Read-only.</em> * <em>Read-only.</em>
* @property {number} outputUnplayedMsMax - The maximum duration of output audio recently in the output buffer waiting to
* be played, in ms.
* <em>Read-only.</em>
* @property {number} pingMs - The current ping time to the audio mixer, in ms.
* <em>Read-only.</em>
* @property {number} sentTimegapMsAvg - The overall average time between sending data packets to the audio mixer, in ms.
* <em>Read-only.</em>
* @property {number} sentTimegapMsAvgWindow - The recent average time between sending data packets to the audio mixer, in
* ms.
* <em>Read-only.</em>
* @property {number} sentTimegapMsMax - The overall maximum time between sending data packets to the audio mixer, in ms.
* <em>Read-only.</em>
* @property {number} sentTimegapMsMaxWindow - The recent maximum time between sending data packets to the audio mixer, in
* ms.
* <em>Read-only.</em>
*/ */
/**jsdoc /**jsdoc
* Triggered when the ping time to the audio mixer changes.
* @function AudioStats.pingMsChanged * @function AudioStats.pingMsChanged
* @param {number} pingMs * @param {number} pingMs - The ping time to the audio mixer, in ms.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(float, pingMs); AUDIO_PROPERTY(float, pingMs);
/**jsdoc /**jsdoc
* Triggered when the maximum duration of a block of audio data recently read from the microphone changes.
* @function AudioStats.inputReadMsMaxChanged * @function AudioStats.inputReadMsMaxChanged
* @param {number} inputReadMsMax * @param {number} inputReadMsMax - The maximum duration of a block of audio data recently read from the microphone, in ms.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(float, inputReadMsMax); AUDIO_PROPERTY(float, inputReadMsMax);
/**jsdoc /**jsdoc
* Triggered when the maximum duration of microphone audio recently in the input buffer waiting to be played changes.
* @function AudioStats.inputUnplayedMsMaxChanged * @function AudioStats.inputUnplayedMsMaxChanged
* @param {number} inputUnplayedMsMax * @param {number} inputUnplayedMsMax - The maximum duration of microphone audio recently in the input buffer waiting to be
* played, in ms.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(float, inputUnplayedMsMax); AUDIO_PROPERTY(float, inputUnplayedMsMax);
/**jsdoc /**jsdoc
* Triggered when the maximum duration of output audio recently in the output buffer waiting to be played changes.
* @function AudioStats.outputUnplayedMsMaxChanged * @function AudioStats.outputUnplayedMsMaxChanged
* @param {number} outputUnplayedMsMax * @param {number} outputUnplayedMsMax - The maximum duration of output audio recently in the output buffer waiting to be
* played, in ms.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(float, outputUnplayedMsMax); AUDIO_PROPERTY(float, outputUnplayedMsMax);
/**jsdoc /**jsdoc
* Triggered when the overall maximum time between sending data packets to the audio mixer changes.
* @function AudioStats.sentTimegapMsMaxChanged * @function AudioStats.sentTimegapMsMaxChanged
* @param {number} sentTimegapMsMax * @param {number} sentTimegapMsMax - The overall maximum time between sending data packets to the audio mixer, in ms.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(quint64, sentTimegapMsMax); AUDIO_PROPERTY(quint64, sentTimegapMsMax);
/**jsdoc /**jsdoc
* Triggered when the overall average time between sending data packets to the audio mixer changes.
* @function AudioStats.sentTimegapMsAvgChanged * @function AudioStats.sentTimegapMsAvgChanged
* @param {number} sentTimegapMsAvg * @param {number} sentTimegapMsAvg - The overall average time between sending data packets to the audio mixer, in ms.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(quint64, sentTimegapMsAvg); AUDIO_PROPERTY(quint64, sentTimegapMsAvg);
/**jsdoc /**jsdoc
* Triggered when the recent maximum time between sending data packets to the audio mixer changes.
* @function AudioStats.sentTimegapMsMaxWindowChanged * @function AudioStats.sentTimegapMsMaxWindowChanged
* @param {number} sentTimegapMsMaxWindow * @param {number} sentTimegapMsMaxWindow - The recent maximum time between sending data packets to the audio mixer, in ms.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(quint64, sentTimegapMsMaxWindow); AUDIO_PROPERTY(quint64, sentTimegapMsMaxWindow);
/**jsdoc /**jsdoc
* Triggered when the recent average time between sending data packets to the audio mixer changes.
* @function AudioStats.sentTimegapMsAvgWindowChanged * @function AudioStats.sentTimegapMsAvgWindowChanged
* @param {number} sentTimegapMsAvgWindow * @param {number} sentTimegapMsAvgWindow - The recent average time between sending data packets to the audio mixer, in
* ms.
* @returns {Signal} * @returns {Signal}
*/ */
AUDIO_PROPERTY(quint64, sentTimegapMsAvgWindow); AUDIO_PROPERTY(quint64, sentTimegapMsAvgWindow);
@ -287,18 +357,22 @@ public:
signals: signals:
/**jsdoc /**jsdoc
* Triggered when the mixer's stream statistics have been updated.
* @function AudioStats.mixerStreamChanged * @function AudioStats.mixerStreamChanged
* @returns {Signal} * @returns {Signal}
*/ */
void mixerStreamChanged(); void mixerStreamChanged();
/**jsdoc /**jsdoc
* Triggered when the client's stream statisticss have been updated.
* @function AudioStats.clientStreamChanged * @function AudioStats.clientStreamChanged
* @returns {Signal} * @returns {Signal}
*/ */
void clientStreamChanged(); void clientStreamChanged();
/**jsdoc /**jsdoc
* Triggered when the injector streams' statistics have been updated.
* <p><strong>Note:</strong> The injector streams' statistics are currently not provided.</p>
* @function AudioStats.injectorStreamsChanged * @function AudioStats.injectorStreamsChanged
* @returns {Signal} * @returns {Signal}
*/ */