Mercurial > games > semicongine
comparison tests/test_audio.nim @ 630:a68941309f22
add: audio test, be aware that the file tests/audiotest.PCM.s16le.48000.2 needs to be manually generated and placed in order for the test to play it successfully
| author | Sam <sam@basx.dev> |
|---|---|
| date | Mon, 01 May 2023 01:16:59 +0700 |
| parents | |
| children | ceba165f07d8 |
comparison
equal
deleted
inserted
replaced
| 629:b965f22fc9c3 | 630:a68941309f22 |
|---|---|
| 1 import std/sequtils | |
| 2 import std/times | |
| 3 | |
| 4 import semicongine | |
| 5 | |
| 6 proc test1() = | |
| 7 var mixer = initMixer() | |
| 8 mixer.addSound("test1", newSound(sineSoundData(1000, 2))) | |
| 9 mixer.addSound("test2", newSound(sineSoundData(500, 2))) | |
| 10 | |
| 11 | |
| 12 let s1 = mixer.play("test1", loop=true) | |
| 13 let s2 = mixer.play("test2", loop=true) | |
| 14 | |
| 15 let t0 = now() | |
| 16 while true: | |
| 17 mixer.updateSoundBuffer() | |
| 18 let runtime = (now() - t0).inMilliseconds() | |
| 19 if runtime > 1500: | |
| 20 mixer.setLevel(0.1) | |
| 21 if runtime > 3000: | |
| 22 mixer.stop(s2) | |
| 23 if runtime > 6000: | |
| 24 mixer.stop("") | |
| 25 if runtime > 8000: | |
| 26 mixer.stop() | |
| 27 break | |
| 28 mixer.destroy() | |
| 29 | |
| 30 proc test2() = | |
| 31 let | |
| 32 # notes | |
| 33 c = sineSoundData(261.6256, 0.5) | |
| 34 d = sineSoundData(293.6648, 0.5) | |
| 35 e = sineSoundData(329.6276, 0.5) | |
| 36 f = sineSoundData(349.2282, 0.5) | |
| 37 g = sineSoundData(391.9954, 0.5) | |
| 38 a = sineSoundData(440.0000, 0.5) | |
| 39 b = sineSoundData(493.8833, 0.5) | |
| 40 bb = sineSoundData(466.1638, 0.5) | |
| 41 c2 = sineSoundData(523.2511, 0.5) | |
| 42 d2 = sineSoundData(587.3295, 0.5) | |
| 43 bbShort = sineSoundData(466.1638, 0.25) | |
| 44 c2Short = sineSoundData(523.2511, 0.25) | |
| 45 d2Short = sineSoundData(587.3295, 0.25) | |
| 46 | |
| 47 # song | |
| 48 frerejaquesData = concat( | |
| 49 f, g, a, f, | |
| 50 f, g, a, f, | |
| 51 a, bb, c2, c2, | |
| 52 a, bb, c2, c2, | |
| 53 c2Short, d2Short, c2Short, bbShort, a, f, | |
| 54 c2Short, d2Short, c2Short, bbShort, a, f, | |
| 55 f, c, f, f, | |
| 56 f, c, f, f, | |
| 57 ) | |
| 58 | |
| 59 var mixer = initMixer() | |
| 60 mixer.addSound("frerejaques", newSound(frerejaquesData)) | |
| 61 discard mixer.play("frerejaques", loop=true) | |
| 62 | |
| 63 let t0 = now() | |
| 64 while true: | |
| 65 mixer.updateSoundBuffer() | |
| 66 if (now() - t0).inMilliseconds() > 20000: | |
| 67 break | |
| 68 mixer.destroy() | |
| 69 | |
| 70 proc test3() = | |
| 71 | |
| 72 var song: SoundData | |
| 73 var f = open("tests/audiotest.PCM.s16le.48000.2") | |
| 74 var readLen = 999 | |
| 75 while readLen > 0: | |
| 76 var sample: Sample | |
| 77 readLen = f.readBuffer(addr sample, sizeof(Sample)) | |
| 78 song.add sample | |
| 79 | |
| 80 var mixer = initMixer() | |
| 81 mixer.addSound("pianosong", newSound(song)) | |
| 82 discard mixer.play("pianosong", loop=true) | |
| 83 | |
| 84 let t0 = now() | |
| 85 while true: | |
| 86 mixer.updateSoundBuffer() | |
| 87 if (now() - t0).inMilliseconds() > 190_000: | |
| 88 break | |
| 89 mixer.destroy() | |
| 90 | |
| 91 when isMainModule: | |
| 92 test1() | |
| 93 test2() | |
| 94 test3() |
