Mercurial > games > semicongine
comparison tests/test_audio.nim @ 171:ceba165f07d8
add: audio subsystem, windows backend still missing
| author | Sam <sam@basx.dev> |
|---|---|
| date | Mon, 01 May 2023 23:55:07 +0700 |
| parents | 2a0c81fa541d |
| children | 36e10cc04a33 |
comparison
equal
deleted
inserted
replaced
| 170:c1a9a988b9e3 | 171:ceba165f07d8 |
|---|---|
| 1 import std/os | |
| 1 import std/sequtils | 2 import std/sequtils |
| 2 import std/times | 3 import std/times |
| 3 | 4 |
| 4 import semicongine | 5 import semicongine |
| 5 | 6 |
| 7 | |
| 6 proc test1() = | 8 proc test1() = |
| 7 var mixer = initMixer() | 9 mixer[].addSound("test1", newSound(sineSoundData(1000, 2))) |
| 8 mixer.addSound("test1", newSound(sineSoundData(1000, 2))) | 10 mixer[].addSound("test2", newSound(sineSoundData(500, 2))) |
| 9 mixer.addSound("test2", newSound(sineSoundData(500, 2))) | |
| 10 | 11 |
| 11 | 12 |
| 12 let s1 = mixer.play("test1", loop=true) | 13 let s1 = mixer[].play("test1", loop=true) |
| 13 let s2 = mixer.play("test2", loop=true) | 14 let s2 = mixer[].play("test2", loop=true) |
| 14 | 15 |
| 15 let t0 = now() | 16 let t0 = now() |
| 16 while true: | 17 while true: |
| 17 mixer.updateSoundBuffer() | |
| 18 let runtime = (now() - t0).inMilliseconds() | 18 let runtime = (now() - t0).inMilliseconds() |
| 19 if runtime > 1500: | 19 if runtime > 1500: |
| 20 mixer.setLevel(0.1) | 20 mixer[].setLevel(0.1) |
| 21 if runtime > 3000: | 21 if runtime > 3000: |
| 22 mixer.stop(s2) | 22 mixer[].stop(s2) |
| 23 if runtime > 6000: | 23 if runtime > 6000: |
| 24 mixer.stop("") | 24 mixer[].stop("") |
| 25 if runtime > 8000: | 25 if runtime > 8000: |
| 26 mixer.stop() | |
| 27 break | 26 break |
| 28 mixer.destroy() | |
| 29 | 27 |
| 30 proc test2() = | 28 proc test2() = |
| 31 let | 29 let |
| 32 # notes | 30 # notes |
| 33 c = sineSoundData(261.6256, 0.5) | 31 c = sineSoundData(261.6256, 0.5) |
| 54 c2Short, d2Short, c2Short, bbShort, a, f, | 52 c2Short, d2Short, c2Short, bbShort, a, f, |
| 55 f, c, f, f, | 53 f, c, f, f, |
| 56 f, c, f, f, | 54 f, c, f, f, |
| 57 ) | 55 ) |
| 58 | 56 |
| 59 var mixer = initMixer() | 57 mixer[].addSound("frerejaques", newSound(frerejaquesData)) |
| 60 mixer.addSound("frerejaques", newSound(frerejaquesData)) | 58 discard mixer[].play("frerejaques") |
| 61 discard mixer.play("frerejaques", loop=true) | |
| 62 | 59 |
| 63 let t0 = now() | 60 while mixer[].isPlaying(): |
| 64 while true: | 61 sleep(1) |
| 65 mixer.updateSoundBuffer() | |
| 66 if (now() - t0).inMilliseconds() > 20000: | |
| 67 break | |
| 68 mixer.destroy() | |
| 69 | 62 |
| 70 proc test3() = | 63 proc test3() = |
| 71 | |
| 72 var song: SoundData | 64 var song: SoundData |
| 73 var f = open("tests/audiotest.PCM.s16le.48000.2") | 65 var f = open("tests/audiotest.PCM.s16le.48000.2") |
| 74 var readLen = 999 | 66 var readLen = 999 |
| 75 while readLen > 0: | 67 while readLen > 0: |
| 76 var sample: Sample | 68 var sample: Sample |
| 77 readLen = f.readBuffer(addr sample, sizeof(Sample)) | 69 readLen = f.readBuffer(addr sample, sizeof(Sample)) |
| 78 song.add sample | 70 song.add sample |
| 79 | 71 |
| 80 var mixer = initMixer() | 72 mixer[].addSound("pianosong", newSound(song)) |
| 81 mixer.addSound("pianosong", newSound(song)) | 73 mixer[].addSound("ping", newSound(sineSoundData(500, 0.05))) |
| 82 discard mixer.play("pianosong", loop=true) | 74 mixer[].addTrack("effects") |
| 75 discard mixer[].play("pianosong") | |
| 83 | 76 |
| 84 let t0 = now() | 77 let t0 = now() |
| 85 while true: | 78 while mixer[].isPlaying(): |
| 86 mixer.updateSoundBuffer() | 79 discard mixer[].play("ping", track="effects", stopOtherSounds=true, level=0.5) |
| 87 if (now() - t0).inMilliseconds() > 190_000: | 80 var input = stdin.readLine() |
| 88 break | |
| 89 mixer.destroy() | |
| 90 | 81 |
| 91 when isMainModule: | 82 when isMainModule: |
| 83 startMixerThread() | |
| 92 test1() | 84 test1() |
| 85 mixer[].stop() | |
| 93 test2() | 86 test2() |
| 87 mixer[].stop() | |
| 94 test3() | 88 test3() |
| 89 mixer[].stop() |
