]> git.ipfire.org Git - thirdparty/asterisk.git/commitdiff
app_confbridge: Update dsp_silence_threshold and dsp_talking_threshold docs.
authorRichard Mudgett <rmudgett@digium.com>
Tue, 30 Jan 2018 21:00:32 +0000 (15:00 -0600)
committerRichard Mudgett <rmudgett@digium.com>
Wed, 31 Jan 2018 19:11:55 +0000 (13:11 -0600)
The dsp_talking_threshold does not represent time in milliseconds.  It
represents the average magnitude per sample in the audio packets.  This is
what the DSP uses to determine if a packet is silence or talking/noise.

Change-Id: If6f939c100eb92a5ac6c21236559018eeaf58443

apps/confbridge/conf_config_parser.c
apps/confbridge/include/confbridge.h
bridges/bridge_softmix.c
configs/samples/confbridge.conf.sample
include/asterisk/bridge_technology.h
include/asterisk/dsp.h
main/dsp.c

index 16d39352666b88c7af67977bd4d099e72e924a5e..d1406c14bd1916901c3df4a483c8459dd758fb0e 100644 (file)
@@ -145,72 +145,66 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
                                        </para></description>
                                </configOption>
                                <configOption name="dsp_silence_threshold">
-                                       <synopsis>The number of milliseconds of detected silence necessary to trigger silence detection</synopsis>
-                                       <description><para>
-                                       The time in milliseconds of sound falling within the what
-                                       the dsp has established as baseline silence before a user
-                                       is considered be silent.  This value affects several
-                                       operations and should not be changed unless the impact
-                                       on call quality is fully understood.</para>
-                                       <para>What this value affects internally:</para>
-                                       <para>
-                                               1. When talk detection AMI events are enabled, this value
+                                       <synopsis>The number of milliseconds of silence necessary to declare talking stopped.</synopsis>
+                                       <description>
+                                               <para>The time in milliseconds of sound falling below the
+                                               <replaceable>dsp_talking_threshold</replaceable> option when
+                                               a user is considered to stop talking.  This value affects several
+                                               operations and should not be changed unless the impact on call
+                                               quality is fully understood.
+                                               </para>
+                                               <para>What this value affects internally:
+                                               </para>
+                                               <para>1. When talk detection AMI events are enabled, this value
                                                determines when the user has stopped talking after a
                                                period of talking.  If this value is set too low
                                                AMI events indicating the user has stopped talking
                                                may get falsely sent out when the user briefly pauses
                                                during mid sentence.
-                                       </para>
-                                       <para>
-                                               2. The <replaceable>drop_silence</replaceable> option depends on this value to
-                                               determine when the user's audio should begin to be
-                                               dropped from the conference bridge after the user
+                                               </para>
+                                               <para>2. The <replaceable>drop_silence</replaceable> option
+                                               depends on this value to determine when the user's audio should
+                                               begin to be dropped from the conference bridge after the user
                                                stops talking.  If this value is set too low the user's
-                                               audio stream may sound choppy to the other participants.
-                                               This is caused by the user transitioning constantly from
-                                               silence to talking during mid sentence.
-                                       </para>
-                                       <para>
-                                               The best way to approach this option is to set it slightly above
-                                               the maximum amount of ms of silence a user may generate during
-                                               natural speech.
-                                       </para>
-                                       <para>By default this value is 2500ms. Valid values are 1 through 2^31.</para>
+                                               audio stream may sound choppy to the other participants.  This
+                                               is caused by the user transitioning constantly from silence to
+                                               talking during mid sentence.
+                                               </para>
+                                               <para>The best way to approach this option is to set it slightly
+                                               above the maximum amount of milliseconds of silence a user may
+                                               generate during natural speech.
+                                               </para>
+                                               <para>Valid values are 1 through 2^31.</para>
                                        </description>
                                </configOption>
                                <configOption name="dsp_talking_threshold">
-                                       <synopsis>The number of milliseconds of detected non-silence necessary to triger talk detection</synopsis>
-                                       <description><para>
-                                               The time in milliseconds of sound above what the dsp has
-                                               established as base line silence for a user before a user
-                                               is considered to be talking.  This value affects several
-                                               operations and should not be changed unless the impact on
-                                               call quality is fully understood.</para>
-                                               <para>
-                                               What this value affects internally:
+                                       <synopsis>Average magnitude threshold to determine talking.</synopsis>
+                                       <description>
+                                               <para>The minimum average magnitude per sample in a frame
+                                               for the DSP to consider talking/noise present.  A value below
+                                               this level is considered silence.  This value affects several
+                                               operations and should not be changed unless the impact on call
+                                               quality is fully understood.
+                                               </para>
+                                               <para>What this value affects internally:
                                                </para>
-                                               <para>
-                                               1. Audio is only mixed out of a user's incoming audio stream
-                                               if talking is detected.  If this value is set too
-                                               loose the user will hear themselves briefly each
-                                               time they begin talking until the dsp has time to
-                                               establish that they are in fact talking.
+                                               <para>1. Audio is only mixed out of a user's incoming audio
+                                               stream if talking is detected.  If this value is set too
+                                               high the user will hear himself talking.
                                                </para>
-                                               <para>
-                                               2. When talk detection AMI events are enabled, this value
+                                               <para>2. When talk detection AMI events are enabled, this value
                                                determines when talking has begun which results in
-                                               an AMI event to fire.  If this value is set too tight
+                                               an AMI event to fire.  If this value is set too low
                                                AMI events may be falsely triggered by variants in
                                                room noise.
                                                </para>
-                                               <para>
-                                               3. The <replaceable>drop_silence</replaceable> option depends on this value to determine
-                                               when the user's audio should be mixed into the bridge
-                                               after periods of silence.  If this value is too loose
-                                               the beginning of a user's speech will get cut off as they
-                                               transition from silence to talking.
+                                               <para>3. The <replaceable>drop_silence</replaceable> option
+                                               depends on this value to determine when the user's audio should
+                                               be mixed into the bridge after periods of silence.  If this value
+                                               is too high the user's speech will get discarded as they will
+                                               be considered silent.
                                                </para>
-                                               <para>By default this value is 160 ms. Valid values are 1 through 2^31</para>
+                                               <para>Valid values are 1 through 2^15.</para>
                                        </description>
                                </configOption>
                                <configOption name="jitterbuffer">
@@ -1425,7 +1419,7 @@ static char *handle_cli_confbridge_show_user_profile(struct ast_cli_entry *e, in
                "enabled" : "disabled");
        ast_cli(a->fd,"Silence Threshold:       %ums\n",
                u_profile.silence_threshold);
-       ast_cli(a->fd,"Talking Threshold:       %ums\n",
+       ast_cli(a->fd,"Talking Threshold:       %u\n",
                u_profile.talking_threshold);
        ast_cli(a->fd,"Denoise:                 %s\n",
                u_profile.flags & USER_OPT_DENOISE ?
index 5ea3b452701704cff3dec1effd4259b4b5499038..e59400c3ec8b2f1ed2e71caf3243576e9a4abd9b 100644 (file)
 #define DEFAULT_BRIDGE_PROFILE "default_bridge"
 #define DEFAULT_MENU_PROFILE "default_menu"
 
+/*! Default minimum average magnitude threshold to determine talking by the DSP. */
 #define DEFAULT_TALKING_THRESHOLD 160
+
+/*! Default time in ms of silence necessary to declare talking stopped by the bridge. */
 #define DEFAULT_SILENCE_THRESHOLD 2500
 
 enum user_profile_flags {
@@ -136,9 +139,9 @@ struct user_profile {
        char announcement[PATH_MAX];
        unsigned int flags;
        unsigned int announce_user_count_all_after;
-       /*! The time in ms of talking before a user is considered to be talking by the dsp. */
+       /*! Minimum average magnitude threshold to determine talking by the DSP. */
        unsigned int talking_threshold;
-       /*! The time in ms of silence before a user is considered to be silent by the dsp. */
+       /*! Time in ms of silence necessary to declare talking stopped by the bridge. */
        unsigned int silence_threshold;
        /*! The time in ms the user may stay in the confbridge */
        unsigned int timeout;
index f82f35018544d1245da4f0318017f244e11ccb96..e6c7b36977b976dd3aefce89744799d401aa8e91 100644 (file)
@@ -72,9 +72,16 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 /*! \brief Number of mixing iterations to perform between gathering statistics. */
 #define SOFTMIX_STAT_INTERVAL 100
 
-/* This is the threshold in ms at which a channel's own audio will stop getting
- * mixed out its own write audio stream because it is not talking. */
+/*!
+ * \brief Default time in ms of silence necessary to declare talking stopped by the bridge.
+ *
+ * \details
+ * This is the time at which a channel's own audio will stop getting
+ * mixed out of its own write audio stream because it is no longer talking.
+ */
 #define DEFAULT_SOFTMIX_SILENCE_THRESHOLD 2500
+
+/*! Default minimum average magnitude threshold to determine talking by the DSP. */
 #define DEFAULT_SOFTMIX_TALKING_THRESHOLD 160
 
 #define DEFAULT_ENERGY_HISTORY_LEN 150
index 8c06cd9b1b6bd230cfe50cc95c8cc972f7840f8d..4918fefbe28352f7258fb2a2669a03d65c046a53 100644 (file)
@@ -49,59 +49,67 @@ type=user
                        ; noise from the conference. Highly recommended for large conferences
                        ; due to its performance enhancements.
 
-;dsp_talking_threshold=128  ; The time in milliseconds of sound above what the dsp has
-                            ; established as base line silence for a user before a user
-                            ; is considered to be talking.  This value affects several
+;dsp_talking_threshold=128  ; Average magnitude threshold to determine talking.
+                            ;
+                            ; The minimum average magnitude per sample in a frame for the
+                            ; DSP to consider talking/noise present.  A value below this
+                            ; level is considered silence.  This value affects several
                             ; operations and should not be changed unless the impact on
                             ; call quality is fully understood.
                             ;
                             ; What this value affects internally:
                             ;
-                            ; 1. Audio is only mixed out of a user's incoming audio stream
-                            ;    if talking is detected.  If this value is set too
-                            ;    loose the user will hear themselves briefly each
-                            ;    time they begin talking until the dsp has time to
-                            ;    establish that they are in fact talking.
+                            ; 1. Audio is only mixed out of a user's incoming audio
+                            ;    stream if talking is detected.  If this value is set too
+                            ;    high the user will hear himself talking.
+                            ;
                             ; 2. When talk detection AMI events are enabled, this value
-                            ;    determines when talking has begun which results in
-                            ;    an AMI event to fire.  If this value is set too tight
-                            ;    AMI events may be falsely triggered by variants in
-                            ;    room noise.
-                            ; 3. The drop_silence option depends on this value to determine
-                            ;    when the user's audio should be mixed into the bridge
-                            ;    after periods of silence.  If this value is too loose
-                            ;    the beginning of a user's speech will get cut off as they
-                            ;    transition from silence to talking.
+                            ;    determines when talking has begun which results in an
+                            ;    AMI event to fire.  If this value is set too low AMI
+                            ;    events may be falsely triggered by variants in room
+                            ;    noise.
+                            ;
+                            ; 3. The 'drop_silence' option depends on this value to
+                            ;    determine when the user's audio should be mixed into the
+                            ;    bridge after periods of silence.  If this value is too
+                            ;    high the user's speech will get discarded as they will
+                            ;    be considered silent.
                             ;
-                            ; By default this value is 160 ms. Valid values are 1 through 2^31
+                            ; Valid values are 1 through 2^15.
+                            ; By default this value is 160.
 
-;dsp_silence_threshold=2000 ; The time in milliseconds of sound falling within the what
-                            ; the dsp has established as baseline silence before a user
-                            ; is considered be silent.  This value affects several
-                            ; operations and should not be changed unless the impact
-                            ; on call quality is fully understood.
+;dsp_silence_threshold=2000 ; The number of milliseconds of silence necessary to declare
+                            ; talking stopped.
+                            ;
+                            ; The time in milliseconds of sound falling below the
+                            ; 'dsp_talking_threshold' option when a user is considered to
+                            ; stop talking.  This value affects several operations and
+                            ; should not be changed unless the impact on call quality is
+                            ; fully understood.
                             ;
                             ; What this value affects internally:
                             ;
                             ; 1. When talk detection AMI events are enabled, this value
                             ;    determines when the user has stopped talking after a
-                            ;    period of talking.  If this value is set too low
-                            ;    AMI events indicating the user has stopped talking
-                            ;    may get falsely sent out when the user briefly pauses
-                            ;    during mid sentence.
-                            ; 2. The drop_silence option depends on this value to
+                            ;    period of talking.  If this value is set too low AMI
+                            ;    events indicating the user has stopped talking may get
+                            ;    falsely sent out when the user briefly pauses during mid
+                            ;    sentence.
+                            ;
+                            ; 2. The 'drop_silence' option depends on this value to
                             ;    determine when the user's audio should begin to be
-                            ;    dropped from the conference bridge after the user
-                            ;    stops talking.  If this value is set too low the user's
-                            ;    audio stream may sound choppy to the other participants.
-                            ;    This is caused by the user transitioning constantly from
+                            ;    dropped from the conference bridge after the user stops
+                            ;    talking.  If this value is set too low the user's audio
+                            ;    stream may sound choppy to the other participants.  This
+                            ;    is caused by the user transitioning constantly from
                             ;    silence to talking during mid sentence.
                             ;
-                            ; The best way to approach this option is to set it slightly above
-                            ; the maximum amount of ms of silence a user may generate during
-                            ; natural speech.
+                            ; The best way to approach this option is to set it slightly
+                            ; above the maximum amount of milliseconds of silence a user
+                            ; may generate during natural speech.
                             ;
-                            ; By default this value is 2500ms. Valid values are 1 through 2^31
+                            ; Valid values are 1 through 2^31.
+                            ; By default this value is 2500ms.
 
 ;talk_detection_events=yes ; This option sets whether or not notifications of when a user
                            ; begins and ends talking should be sent out as events over AMI.
index e4091e055341864a3e78a14c4d5965a8d5ada746..ca4079269bea0cb8a161fae8221956821c4aaa80 100644 (file)
@@ -46,11 +46,9 @@ enum ast_bridge_preference {
  * performing talking optimizations.
  */
 struct ast_bridge_tech_optimizations {
-       /*! The amount of time in ms that talking must be detected before
-        *  the dsp determines that talking has occurred */
+       /*! Minimum average magnitude threshold to determine talking by the DSP. */
        unsigned int talking_threshold;
-       /*! The amount of time in ms that silence must be detected before
-        *  the dsp determines that talking has stopped */
+       /*! Time in ms of silence necessary to declare talking stopped by the bridge. */
        unsigned int silence_threshold;
        /*! Whether or not the bridging technology should drop audio
         *  detected as silence from the mix. */
index 7e84ebe9caa11bc41a0e8b43836fae11f6e408c6..d092e6b4c35f849660a23104ab6c08dbbcb34ee0 100644 (file)
@@ -87,7 +87,7 @@ void ast_dsp_free(struct ast_dsp *dsp);
  * created with */
 unsigned int ast_dsp_get_sample_rate(const struct ast_dsp *dsp);
 
-/*! \brief Set threshold value for silence */
+/*! \brief Set the minimum average magnitude threshold to determine talking by the DSP. */
 void ast_dsp_set_threshold(struct ast_dsp *dsp, int threshold);
 
 /*! \brief Set number of required cadences for busy */
@@ -106,19 +106,41 @@ int ast_dsp_set_call_progress_zone(struct ast_dsp *dsp, char *zone);
    busies, and call progress, all dependent upon which features are enabled */
 struct ast_frame *ast_dsp_process(struct ast_channel *chan, struct ast_dsp *dsp, struct ast_frame *inf);
 
-/*! \brief Return non-zero if this is silence.  Updates "totalsilence" with the total
-   number of seconds of silence  */
+/*!
+ * \brief Process the audio frame for silence.
+ *
+ * \param dsp DSP processing audio media.
+ * \param f Audio frame to process.
+ * \param totalsilence Variable to set to the total accumulated silence in ms
+ * seen by the DSP since the last noise.
+ *
+ * \return Non-zero if the frame is silence.
+ */
 int ast_dsp_silence(struct ast_dsp *dsp, struct ast_frame *f, int *totalsilence);
 
-/*! \brief Return non-zero if this is silence.  Updates "totalsilence" with the total
-   number of seconds of silence. Returns the average energy of the samples in the frame
-   in frames_energy variable. */
+/*!
+ * \brief Process the audio frame for silence.
+ *
+ * \param dsp DSP processing audio media.
+ * \param f Audio frame to process.
+ * \param totalsilence Variable to set to the total accumulated silence in ms
+ * seen by the DSP since the last noise.
+ * \param frames_energy Variable to set to the average energy of the samples in the frame.
+ *
+ * \return Non-zero if the frame is silence.
+ */
 int ast_dsp_silence_with_energy(struct ast_dsp *dsp, struct ast_frame *f, int *totalsilence, int *frames_energy);
 
 /*!
- * \brief Return non-zero if this is noise.  Updates "totalnoise" with the total
- * number of seconds of noise
+ * \brief Process the audio frame for noise.
  * \since 1.6.1
+ *
+ * \param dsp DSP processing audio media.
+ * \param f Audio frame to process.
+ * \param totalnoise Variable to set to the total accumulated noise in ms
+ * seen by the DSP since the last silence.
+ *
+ * \return Non-zero if the frame is silence.
  */
 int ast_dsp_noise(struct ast_dsp *dsp, struct ast_frame *f, int *totalnoise);
 
index 840a839bd98996752de169a109a8687d38baf02e..0609256d47ed0a39e0bac7ba6dc2d023b9b1c107 100644 (file)
@@ -124,12 +124,19 @@ static struct progress {
        { GSAMP_SIZE_UK, { 350, 400, 440 } },                           /*!< UK */
 };
 
-/*!\brief This value is the minimum threshold, calculated by averaging all
- * of the samples within a frame, for which a frame is determined to either
- * be silence (below the threshold) or noise (above the threshold).  Please
- * note that while the default threshold is an even exponent of 2, there is
- * no requirement that it be so.  The threshold will accept any value between
- * 0 and 32767.
+/*!
+ * \brief Default minimum average magnitude threshold to determine talking/noise by the DSP.
+ *
+ * \details
+ * The magnitude calculated for this threshold is determined by
+ * averaging the absolute value of all samples within a frame.
+ *
+ * This value is the threshold for which a frame's average magnitude
+ * is determined to either be silence (below the threshold) or
+ * noise/talking (at or above the threshold).  Please note that while
+ * the default threshold is an even exponent of 2, there is no
+ * requirement that it be so.  The threshold will work for any value
+ * between 1 and 2^15.
  */
 #define DEFAULT_THRESHOLD      512
 
@@ -399,7 +406,9 @@ typedef struct {
 struct ast_dsp {
        struct ast_frame f;
        int threshold;
+       /*! Accumulated total silence in ms since last talking/noise. */
        int totalsilence;
+       /*! Accumulated total talking/noise in ms since last silence. */
        int totalnoise;
        int features;
        int ringtimeout;