Added support for changing the volume of AudioTrack as discussed in BUG=webrtc:6533
This is a short term solution to change the volume of an AudioTrack until applyConstraints for MediaStreamTracks has been implemented.

This CL adds 1 new Java method & the relevant JNI file update:

AudioTrack.java:

public void setVolume(double volume);

BUG=webrtc:6533

Review-Url: https://codereview.webrtc.org/2710683009
Cr-Commit-Position: refs/heads/master@{#17682}
diff --git a/AUTHORS b/AUTHORS
index 126a138..e13033e 100644
--- a/AUTHORS
+++ b/AUTHORS
@@ -12,6 +12,7 @@
 Christophe Dumez <ch.dumez@samsung.com>
 Cody Barnes <conceptgenesis@gmail.com>
 Colin Plumb
+Dax Booysen <dax@younow.com>
 Dmitry Lizin <sdkdimon@gmail.com>
 Eric Rescorla, RTFM Inc. <ekr@rtfm.com>
 Frederik Riedel, Frogg GmbH <frederik.riedel@frogg.io>
diff --git a/webrtc/sdk/android/api/org/webrtc/AudioTrack.java b/webrtc/sdk/android/api/org/webrtc/AudioTrack.java
index c33a9d8..6b71353 100644
--- a/webrtc/sdk/android/api/org/webrtc/AudioTrack.java
+++ b/webrtc/sdk/android/api/org/webrtc/AudioTrack.java
@@ -15,4 +15,13 @@
   public AudioTrack(long nativeTrack) {
     super(nativeTrack);
   }
+
+  /** Sets the volume for the underlying MediaSource. Volume is a gain value in the range
+   *  0 to 10.
+   */
+  public void setVolume(double volume) {
+    nativeSetVolume(super.nativeTrack, volume);
+  }
+
+  private static native void nativeSetVolume(long nativeTrack, double volume);
 }
diff --git a/webrtc/sdk/android/src/jni/peerconnection_jni.cc b/webrtc/sdk/android/src/jni/peerconnection_jni.cc
index d31b5d7..0c38091 100644
--- a/webrtc/sdk/android/src/jni/peerconnection_jni.cc
+++ b/webrtc/sdk/android/src/jni/peerconnection_jni.cc
@@ -1194,6 +1194,13 @@
   rtc::tracing::ShutdownInternalTracer();
 }
 
+JOW(void, AudioTrack_nativeSetVolume)
+(JNIEnv*, jclass, jlong j_p, jdouble volume) {
+  rtc::scoped_refptr<AudioSourceInterface> source(
+      reinterpret_cast<AudioTrackInterface*>(j_p)->GetSource());
+  source->SetVolume(volume);
+}
+
 // Helper struct for working around the fact that CreatePeerConnectionFactory()
 // comes in two flavors: either entirely automagical (constructing its own
 // threads and deleting them on teardown, but no external codec factory support)