瀏覽代碼

fixed 8bit wav upsampling, still produces gliches

ncannasse 10 年之前
父節點
當前提交
58f5ae8adb
共有 1 個文件被更改,包括 11 次插入13 次删除
  1. 11 13
      hxd/snd/WavData.hx

+ 11 - 13
hxd/snd/WavData.hx

@@ -21,17 +21,15 @@ class WavData extends hxd.snd.Data {
 			var rpos = 0.;
 			var max = data.length >> (h.bitsPerSample >> 4);
 			var delta = h.samplingRate / 44100;
-			var scale = (1 << h.bitsPerSample) - 1;
+			var next = h.channels;
 			while( rpos < max ) {
 				var ipos = Std.int(rpos);
-				var npos = ipos + 1;
-				if( npos >= max ) npos = max - 1;
+				var npos = ipos + next;
+				if( npos >= max ) npos = max - next;
 				var v1, v2;
 
-				inline function getI8(p) {
-					var v = data.get(p);
-					if( v & 0x80 != 0 ) v -= 256;
-					return v;
+				inline function getUI8(p) {
+					return data.get(p);
 				}
 				inline function getI16(p) {
 					var v = data.get(p) | (data.get(p + 1) << 8);
@@ -39,15 +37,15 @@ class WavData extends hxd.snd.Data {
 					return v;
 				}
 				if( h.bitsPerSample == 8 ) {
-					v1 = getI8(ipos) / 255;
-					v2 = getI8(npos) / 255;
+					v1 = getUI8(ipos);
+					v2 = getUI8(npos);
 				} else {
-					v1 = getI16(ipos<<1) / 65535;
-					v2 = getI16(npos<<1) / 65535;
+					v1 = getI16(ipos<<1);
+					v2 = getI16(npos<<1);
 				}
-				var v = Std.int(hxd.Math.lerp(v1, v2, rpos - ipos) * scale);
+				var v = Std.int(hxd.Math.lerp(v1, v2, rpos - ipos));
 				if( h.bitsPerSample == 8 )
-					out.writeInt8(v);
+					out.writeByte(v);
 				else
 					out.writeInt16(v);
 				rpos += delta;