Merge pull request #1051 from rafaelrpinto/feature/audio-panning
Added stereoPan property to allow audio panning
This commit is contained in:
commit
8534ec0fd1
@ -231,6 +231,7 @@ var styles = StyleSheet.create({
|
|||||||
* [repeat](#repeat)
|
* [repeat](#repeat)
|
||||||
* [resizeMode](#resizemode)
|
* [resizeMode](#resizemode)
|
||||||
* [selectedTextTrack](#selectedtexttrack)
|
* [selectedTextTrack](#selectedtexttrack)
|
||||||
|
* [stereoPan](#stereopan)
|
||||||
* [volume](#volume)
|
* [volume](#volume)
|
||||||
|
|
||||||
#### ignoreSilentSwitch
|
#### ignoreSilentSwitch
|
||||||
@ -337,6 +338,14 @@ If a track matching the specified Type (and Value if appropriate) is unavailable
|
|||||||
|
|
||||||
Platforms: Android ExoPlayer, iOS
|
Platforms: Android ExoPlayer, iOS
|
||||||
|
|
||||||
|
#### stereoPan
|
||||||
|
Adjust the balance of the left and right audio channels. Any value between –1.0 and 1.0 is accepted.
|
||||||
|
* **-1.0** - Full left
|
||||||
|
* **0.0 (default)** - Center
|
||||||
|
* **1.0** - Full right
|
||||||
|
|
||||||
|
Platforms: Android MediaPlayer
|
||||||
|
|
||||||
#### volume
|
#### volume
|
||||||
Adjust the volume.
|
Adjust the volume.
|
||||||
* **1.0 (default)** - Play at full volume
|
* **1.0 (default)** - Play at full volume
|
||||||
|
1
Video.js
1
Video.js
@ -284,6 +284,7 @@ Video.propTypes = {
|
|||||||
paused: PropTypes.bool,
|
paused: PropTypes.bool,
|
||||||
muted: PropTypes.bool,
|
muted: PropTypes.bool,
|
||||||
volume: PropTypes.number,
|
volume: PropTypes.number,
|
||||||
|
stereoPan: PropTypes.number,
|
||||||
rate: PropTypes.number,
|
rate: PropTypes.number,
|
||||||
playInBackground: PropTypes.bool,
|
playInBackground: PropTypes.bool,
|
||||||
playWhenInactive: PropTypes.bool,
|
playWhenInactive: PropTypes.bool,
|
||||||
|
@ -28,6 +28,7 @@ import java.io.IOException;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.lang.Math;
|
import java.lang.Math;
|
||||||
|
import java.math.BigDecimal;
|
||||||
|
|
||||||
@SuppressLint("ViewConstructor")
|
@SuppressLint("ViewConstructor")
|
||||||
public class ReactVideoView extends ScalableVideoView implements MediaPlayer.OnPreparedListener, MediaPlayer
|
public class ReactVideoView extends ScalableVideoView implements MediaPlayer.OnPreparedListener, MediaPlayer
|
||||||
@ -95,6 +96,7 @@ public class ReactVideoView extends ScalableVideoView implements MediaPlayer.OnP
|
|||||||
private boolean mPaused = false;
|
private boolean mPaused = false;
|
||||||
private boolean mMuted = false;
|
private boolean mMuted = false;
|
||||||
private float mVolume = 1.0f;
|
private float mVolume = 1.0f;
|
||||||
|
private float mStereoPan = 0.0f;
|
||||||
private float mProgressUpdateInterval = 250.0f;
|
private float mProgressUpdateInterval = 250.0f;
|
||||||
private float mRate = 1.0f;
|
private float mRate = 1.0f;
|
||||||
private float mActiveRate = 1.0f;
|
private float mActiveRate = 1.0f;
|
||||||
@ -359,6 +361,14 @@ public class ReactVideoView extends ScalableVideoView implements MediaPlayer.OnP
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// reduces the volume based on stereoPan
|
||||||
|
private float calulateRelativeVolume() {
|
||||||
|
float relativeVolume = (mVolume * (1 - Math.abs(mStereoPan)));
|
||||||
|
// only one decimal allowed
|
||||||
|
BigDecimal roundRelativeVolume = new BigDecimal(relativeVolume).setScale(1, BigDecimal.ROUND_HALF_UP);
|
||||||
|
return roundRelativeVolume.floatValue();
|
||||||
|
}
|
||||||
|
|
||||||
public void setMutedModifier(final boolean muted) {
|
public void setMutedModifier(final boolean muted) {
|
||||||
mMuted = muted;
|
mMuted = muted;
|
||||||
|
|
||||||
@ -368,7 +378,14 @@ public class ReactVideoView extends ScalableVideoView implements MediaPlayer.OnP
|
|||||||
|
|
||||||
if (mMuted) {
|
if (mMuted) {
|
||||||
setVolume(0, 0);
|
setVolume(0, 0);
|
||||||
|
} else if (mStereoPan < 0) {
|
||||||
|
// louder on the left channel
|
||||||
|
setVolume(mVolume, calulateRelativeVolume());
|
||||||
|
} else if (mStereoPan > 0) {
|
||||||
|
// louder on the right channel
|
||||||
|
setVolume(calulateRelativeVolume(), mVolume);
|
||||||
} else {
|
} else {
|
||||||
|
// same volume on both channels
|
||||||
setVolume(mVolume, mVolume);
|
setVolume(mVolume, mVolume);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -378,6 +395,11 @@ public class ReactVideoView extends ScalableVideoView implements MediaPlayer.OnP
|
|||||||
setMutedModifier(mMuted);
|
setMutedModifier(mMuted);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void setStereoPan(final float stereoPan) {
|
||||||
|
mStereoPan = stereoPan;
|
||||||
|
setMutedModifier(mMuted);
|
||||||
|
}
|
||||||
|
|
||||||
public void setProgressUpdateInterval(final float progressUpdateInterval) {
|
public void setProgressUpdateInterval(final float progressUpdateInterval) {
|
||||||
mProgressUpdateInterval = progressUpdateInterval;
|
mProgressUpdateInterval = progressUpdateInterval;
|
||||||
}
|
}
|
||||||
|
@ -30,6 +30,7 @@ public class ReactVideoViewManager extends SimpleViewManager<ReactVideoView> {
|
|||||||
public static final String PROP_PAUSED = "paused";
|
public static final String PROP_PAUSED = "paused";
|
||||||
public static final String PROP_MUTED = "muted";
|
public static final String PROP_MUTED = "muted";
|
||||||
public static final String PROP_VOLUME = "volume";
|
public static final String PROP_VOLUME = "volume";
|
||||||
|
public static final String PROP_STEREO_PAN = "stereoPan";
|
||||||
public static final String PROP_PROGRESS_UPDATE_INTERVAL = "progressUpdateInterval";
|
public static final String PROP_PROGRESS_UPDATE_INTERVAL = "progressUpdateInterval";
|
||||||
public static final String PROP_SEEK = "seek";
|
public static final String PROP_SEEK = "seek";
|
||||||
public static final String PROP_RATE = "rate";
|
public static final String PROP_RATE = "rate";
|
||||||
@ -124,6 +125,11 @@ public class ReactVideoViewManager extends SimpleViewManager<ReactVideoView> {
|
|||||||
videoView.setVolumeModifier(volume);
|
videoView.setVolumeModifier(volume);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ReactProp(name = PROP_STEREO_PAN)
|
||||||
|
public void setStereoPan(final ReactVideoView videoView, final float stereoPan) {
|
||||||
|
videoView.setStereoPan(stereoPan);
|
||||||
|
}
|
||||||
|
|
||||||
@ReactProp(name = PROP_PROGRESS_UPDATE_INTERVAL, defaultFloat = 250.0f)
|
@ReactProp(name = PROP_PROGRESS_UPDATE_INTERVAL, defaultFloat = 250.0f)
|
||||||
public void setProgressUpdateInterval(final ReactVideoView videoView, final float progressUpdateInterval) {
|
public void setProgressUpdateInterval(final ReactVideoView videoView, final float progressUpdateInterval) {
|
||||||
videoView.setProgressUpdateInterval(progressUpdateInterval);
|
videoView.setProgressUpdateInterval(progressUpdateInterval);
|
||||||
|
Loading…
Reference in New Issue
Block a user