diff --git a/gst/dtmf/gstdtmfsrc.c b/gst/dtmf/gstdtmfsrc.c index 6a3e6e6519..f04119c167 100644 --- a/gst/dtmf/gstdtmfsrc.c +++ b/gst/dtmf/gstdtmfsrc.c @@ -621,6 +621,7 @@ gst_dtmf_src_generate_tone(GstDTMFSrcEvent *event, DTMF_KEY key, float duration, gint tone_size; double i = 0; double amplitude, f1, f2; + double volume_factor; /* Create a buffer for the tone */ tone_size = ((duration/1000)*SAMPLE_RATE*SAMPLE_SIZE*CHANNELS)/8; @@ -630,6 +631,8 @@ gst_dtmf_src_generate_tone(GstDTMFSrcEvent *event, DTMF_KEY key, float duration, p = (gint16 *) GST_BUFFER_MALLOCDATA (buffer); + volume_factor = pow (10, (-event->volume) / 20); + /* * For each sample point we calculate 'x' as the * the amplitude value. @@ -643,6 +646,9 @@ gst_dtmf_src_generate_tone(GstDTMFSrcEvent *event, DTMF_KEY key, float duration, amplitude = (f1 + f2) / 2; + /* Adjust the volume */ + amplitude *= volume_factor; + /* Make the [-1:1] interval into a [-32767:32767] interval */ amplitude *= 32767;