浏览代码

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

ncannasse 10 年之前
父节点
当前提交
cb9b72ecfa
共有 1 个文件被更改,包括 7 次插入4 次删除
  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++];