Browse Source

wait a bit more to stop channel (make sure it has no pending data)

ncannasse 10 years ago
parent
commit
cb9b72ecfa
1 changed files with 7 additions and 4 deletions
  1. 7 4
      hxd/snd/Worker.hx

+ 7 - 4
hxd/snd/Worker.hx

@@ -32,7 +32,7 @@ class NativeChannelData {
 	public var tmpBuf : haxe.io.Bytes;
 	public var channel : NativeChannel;
 	public var channels : Array<Channel>;
-	public var busy : Bool;
+	public var busy : Int;
 	public function new(w:Worker) {
 		channels = [];
 		tmpBuf = haxe.io.Bytes.alloc(w.bufferSamples * 4 * 2);
@@ -73,7 +73,7 @@ class Worker extends hxd.Worker<Message> {
 
 	function cleanChannels() {
 		for( c in channels )
-			if( c.channels.length == 0 && c.channel != null && !c.busy ) {
+			if( c.channels.length == 0 && c.channel != null && c.busy <= -2 ) {
 				c.channel.stop();
 				c.channel = null;
 			}
@@ -197,13 +197,16 @@ class Worker extends hxd.Worker<Message> {
 		#end
 	}
 
-	function sampleData( out : haxe.io.Float32Array, chan : NativeChannelData ) {
+	@:noDebug function sampleData( out : haxe.io.Float32Array, chan : NativeChannelData ) {
 		chan.next = haxe.Timer.stamp() + bufferSamples / 44100;
 		var cid = 0;
 		var cmax = chan.channels.length;
 		for( i in 0...bufferSamples*2 )
 			out[i] = 0;
-		chan.busy = cmax != 0;
+		if( cmax == 0 ) {
+			if( chan.busy > 0 ) chan.busy = 0 else chan.busy--;
+		} else
+			chan.busy = cmax;
 		while( cid < cmax ) {
 			var c = chan.channels[cid++];