Browse Source

Sound: make it possible to customize or disable virtualization.
Useful for synchronized music tracks which volume can temporarily be set to 0

trethaller 6 years ago
parent
commit
9642d0c6d5
2 changed files with 26 additions and 25 deletions
  1. 24 24
      hxd/snd/Channel.hx
  2. 2 1
      hxd/snd/Manager.hx

+ 24 - 24
hxd/snd/Channel.hx

@@ -6,33 +6,29 @@ class Channel extends ChannelBase {
 
 	@:noCompletion public var next : Channel;
 	var manager : Manager;
-	var source  : Manager.Source;
-	var id      : Int;
-
-	public var sound     	(default, null) : hxd.res.Sound;
-	public var duration     (default, null) : Float;
-	public var soundGroup   (default, null) : SoundGroup;
-	public var channelGroup (default, null) : ChannelGroup;
-	public var position     (default, set)  : Float;
-	public var pause        (default, set)  : Bool;
-	public var loop : Bool;
-
-	var audibleGain     : Float;
-	var lastStamp       : Float;
-	var isVirtual       : Bool;
-	var isLoading		: Bool;
-	var positionChanged : Bool;
-	var queue           : Array<hxd.res.Sound>;
+	var source : Manager.Source;
+	var id : Int;
+
+	public var sound(default, null) : hxd.res.Sound;
+	public var duration(default, null) : Float;
+	public var soundGroup(default, null) : SoundGroup;
+	public var channelGroup(default, null) : ChannelGroup;
+
+	public var position(default, set) = 0.0;
+	public var pause(default, set) = false;
+	public var loop = false;
+	public var allowVirtual = true;
+
+	var audibleGain = 1.0;
+	var lastStamp = 0.0;
+	var isVirtual = false;
+	var isLoading = false;
+	var positionChanged = false;
+	var queue : Array<hxd.res.Sound> = [];
 
 	function new() {
 		super();
-		id          = ID++;
-		pause       = false;
-		isVirtual   = false;
-		loop        = false;
-		queue       = [];
-		position    = 0.0;
-		audibleGain = 1.0;
+		id = ID++;
 	}
 
 	/**
@@ -94,4 +90,8 @@ class Channel extends ChannelBase {
 	public function stop() {
 		if (manager != null) @:privateAccess manager.releaseChannel(this);
 	}
+
+	public function isReleased() {
+		return manager == null;
+	}
 }

+ 2 - 1
hxd/snd/Manager.hx

@@ -63,6 +63,7 @@ class Manager {
 	public static var BUFFER_QUEUE_LENGTH        = 2;
 	public static var MAX_SOURCES                = 16;
 	public static var SOUND_BUFFER_CACHE_SIZE    = 256;
+	public static var VIRTUAL_VOLUME_THRESHOLD   = 1e-5;
 
 	/**
 		Allows to decode big streaming buffers over X split frames. 0 to disable
@@ -345,7 +346,7 @@ class Manager {
 			c.calcAudibleGain(now);
 			if( c.isLoading && !c.sound.getData().isLoading() )
 				c.isLoading = false;
-			c.isVirtual = c.pause || c.mute || c.channelGroup.mute || c.audibleGain < 1e-5 || c.isLoading;
+			c.isVirtual = c.pause || c.mute || c.channelGroup.mute || (c.allowVirtual && c.audibleGain < VIRTUAL_VOLUME_THRESHOLD) || c.isLoading;
 			c = c.next;
 		}