forked from LeenkxTeam/LNXSDK
		
	
		
			
	
	
		
			103 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
		
		
			
		
	
	
			103 lines
		
	
	
		
			3.2 KiB
		
	
	
	
		
			Haxe
		
	
	
	
	
	
|  | package auratests.dsp; | ||
|  | 
 | ||
|  | import utest.Assert; | ||
|  | 
 | ||
|  | import kha.arrays.Float32Array; | ||
|  | 
 | ||
|  | import aura.Aura; | ||
|  | import aura.dsp.SparseConvolver; | ||
|  | import aura.types.AudioBuffer; | ||
|  | import aura.utils.TestSignals; | ||
|  | 
 | ||
|  | @:access(aura.dsp.SparseConvolver) | ||
|  | class TestSparseConvolver extends utest.Test { | ||
|  | 	var audioBuffer: AudioBuffer; | ||
|  | 	var sparseConvolver: SparseConvolver; | ||
|  | 
 | ||
|  | 	function setup() { | ||
|  | 		audioBuffer = new AudioBuffer(2, 512); | ||
|  | 		sparseConvolver = new SparseConvolver(1, 4); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function test_simpleDelay() { | ||
|  | 		for (i in 0...audioBuffer.channelLength) { | ||
|  | 			audioBuffer.getChannelView(0)[i] = Math.sin(i * 2 * Math.PI / audioBuffer.channelLength); | ||
|  | 			audioBuffer.getChannelView(1)[i] = Math.cos(i * 2 * Math.PI / audioBuffer.channelLength); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		final impulse = sparseConvolver.impulseBuffer; | ||
|  | 		impulse.setImpulsePos(0, 3); | ||
|  | 		impulse.setImpulseMagnitude(0, 1.0); | ||
|  | 
 | ||
|  | 		sparseConvolver.process(audioBuffer); | ||
|  | 
 | ||
|  | 		final wanted = new AudioBuffer(2, audioBuffer.channelLength); | ||
|  | 		for (i in 0...wanted.channelLength) { | ||
|  | 			wanted.getChannelView(0)[i] = Math.sin((i - 3) * 2 * Math.PI / wanted.channelLength); | ||
|  | 			wanted.getChannelView(1)[i] = Math.cos((i - 3) * 2 * Math.PI / wanted.channelLength); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		for (i in 0...3) { | ||
|  | 			Assert.floatEquals(0, audioBuffer.getChannelView(0)[i]); | ||
|  | 			Assert.floatEquals(0, audioBuffer.getChannelView(1)[i]); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		for (i in 3...wanted.channelLength) { | ||
|  | 			Assert.floatEquals(wanted.getChannelView(0)[i], audioBuffer.getChannelView(0)[i]); | ||
|  | 			Assert.floatEquals(wanted.getChannelView(1)[i], audioBuffer.getChannelView(1)[i]); | ||
|  | 		} | ||
|  | 
 | ||
|  | 		// Overlap | ||
|  | 		audioBuffer.clear(); | ||
|  | 		sparseConvolver.process(audioBuffer); | ||
|  | 		for (i in 0...3) { | ||
|  | 			Assert.floatEquals(wanted.getChannelView(0)[i], audioBuffer.getChannelView(0)[i]); | ||
|  | 			Assert.floatEquals(wanted.getChannelView(1)[i], audioBuffer.getChannelView(1)[i]); | ||
|  | 		} | ||
|  | 		for (i in 3...wanted.channelLength) { | ||
|  | 			Assert.floatEquals(0, audioBuffer.getChannelView(0)[i]); | ||
|  | 			Assert.floatEquals(0, audioBuffer.getChannelView(1)[i]); | ||
|  | 		} | ||
|  | 	} | ||
|  | } | ||
|  | 
 | ||
|  | @:access(aura.dsp.SparseConvolver.SparseImpulseBuffer) | ||
|  | class TestSparseImpulseBuffer extends utest.Test { | ||
|  | 	var buffer: SparseImpulseBuffer; | ||
|  | 
 | ||
|  | 	function setup() { | ||
|  | 		buffer = new SparseImpulseBuffer(4); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function test_length() { | ||
|  | 		Assert.equals(1, new SparseImpulseBuffer(1).length); | ||
|  | 		Assert.equals(2, new SparseImpulseBuffer(2).length); | ||
|  | 		Assert.equals(3, new SparseImpulseBuffer(3).length); | ||
|  | 		Assert.equals(1024, new SparseImpulseBuffer(1024).length); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function test_impulsePos_notOverwrittenByOtherImpulses() { | ||
|  | 		buffer.setImpulsePos(0, 3); | ||
|  | 		buffer.setImpulsePos(1, 9); | ||
|  | 		buffer.setImpulsePos(2, 17); | ||
|  | 		buffer.setImpulsePos(3, 42); | ||
|  | 
 | ||
|  | 		Assert.equals(3, buffer.getImpulsePos(0)); | ||
|  | 		Assert.equals(9, buffer.getImpulsePos(1)); | ||
|  | 		Assert.equals(17, buffer.getImpulsePos(2)); | ||
|  | 		Assert.equals(42, buffer.getImpulsePos(3)); | ||
|  | 	} | ||
|  | 
 | ||
|  | 	function test_impulseMagnitude_notOverwrittenByOtherImpulses() { | ||
|  | 		buffer.setImpulseMagnitude(0, 0.3); | ||
|  | 		buffer.setImpulseMagnitude(1, 0.9); | ||
|  | 		buffer.setImpulseMagnitude(2, 0.17); | ||
|  | 		buffer.setImpulseMagnitude(3, 0.42); | ||
|  | 
 | ||
|  | 		Assert.floatEquals(0.3, buffer.getImpulseMagnitude(0)); | ||
|  | 		Assert.floatEquals(0.9, buffer.getImpulseMagnitude(1)); | ||
|  | 		Assert.floatEquals(0.17, buffer.getImpulseMagnitude(2)); | ||
|  | 		Assert.floatEquals(0.42, buffer.getImpulseMagnitude(3)); | ||
|  | 	} | ||
|  | } |