comparison tests/test_audio.nim @ 1423:3b8a736c45a7

did: put almost all global state into a single struct
author sam <sam@basx.dev>
date Thu, 09 Jan 2025 23:03:47 +0700
parents df3c075e5dea
children 676fc13685a9
comparison
equal deleted inserted replaced
1422:6f0c1b347403 1423:3b8a736c45a7
3 import std/times 3 import std/times
4 4
5 import ../semicongine 5 import ../semicongine
6 6
7 proc test1() = 7 proc test1() =
8 mixer[].addSound("test1", sineSoundData(1000, 2, 44100)) 8 addSound("test1", sineSoundData(1000, 2, 44100))
9 mixer[].addSound("test2", sineSoundData(500, 2, 44100)) 9 addSound("test2", sineSoundData(500, 2, 44100))
10 10
11 let s1 = mixer[].play("test1", loop = true) 11 let s1 = play("test1", loop = true)
12 let s2 = mixer[].play("test2", loop = true) 12 let s2 = play("test2", loop = true)
13 13
14 let t0 = now() 14 let t0 = now()
15 mixer[].setLevel(0.5) 15 setLevel(0.5)
16 while true: 16 while true:
17 let runtime = (now() - t0).inMilliseconds() 17 let runtime = (now() - t0).inMilliseconds()
18 if runtime > 1500: 18 if runtime > 1500:
19 mixer[].setLevel(0.2) 19 setLevel(0.2)
20 if runtime > 3000: 20 if runtime > 3000:
21 mixer[].stop(s2) 21 stop(s2)
22 if runtime > 6000: 22 if runtime > 6000:
23 mixer[].stop("") 23 stop("")
24 if runtime > 8000: 24 if runtime > 8000:
25 break 25 break
26 26
27 proc test2() = 27 proc test2() =
28 let 28 let
45 frerejaquesData = concat( 45 frerejaquesData = concat(
46 f, g, a, f, f, g, a, f, a, bb, c2, c2, a, bb, c2, c2, c2Short, d2Short, c2Short, 46 f, g, a, f, f, g, a, f, a, bb, c2, c2, a, bb, c2, c2, c2Short, d2Short, c2Short,
47 bbShort, a, f, c2Short, d2Short, c2Short, bbShort, a, f, f, c, f, f, f, c, f, f, 47 bbShort, a, f, c2Short, d2Short, c2Short, bbShort, a, f, f, c, f, f, f, c, f, f,
48 ) 48 )
49 49
50 mixer[].addSound("frerejaques", frerejaquesData) 50 addSound("frerejaques", frerejaquesData)
51 discard mixer[].play("frerejaques") 51 discard play("frerejaques")
52 52
53 while mixer[].isPlaying(): 53 while isPlaying():
54 sleep(1) 54 sleep(1)
55 55
56 proc test3() = 56 proc test3() =
57 mixer[].addSound("toccata et fugue", loadAudio("toccata_et_fugue.ogg")) 57 addSound("toccata et fugue", loadAudio("toccata_et_fugue.ogg"))
58 mixer[].addSound("ping", sineSoundData(500, 0.05, 44100)) 58 addSound("ping", sineSoundData(500, 0.05, 44100))
59 mixer[].addTrack("effects") 59 addTrack("effects")
60 discard mixer[].play("toccata et fugue") 60 discard play("toccata et fugue")
61 61
62 when isMainModule: 62 when isMainModule:
63 initEngine("Test audio")
63 test1() 64 test1()
64 mixer[].stop() 65 stop()
65 test2() 66 test2()
66 mixer[].stop() 67 stop()
67 test3() 68 test3()
68 69
69 while mixer[].isPlaying(): 70 while isPlaying():
70 # on windows we re-open stdin and this will not work 71 # on windows we re-open stdin and this will not work
71 when defined(linux): 72 when defined(linux):
72 discard 73 discard play("ping", track = "effects", stopOtherSounds = true, level = 0.5)
73 mixer[].play("ping", track = "effects", stopOtherSounds = true, level = 0.5)
74 echo "Press q and enter to exit" 74 echo "Press q and enter to exit"
75 if stdin.readLine() == "q": 75 if stdin.readLine() == "q":
76 mixer[].stop() 76 stop()
77 elif defined(windows): 77 elif defined(windows):
78 sleep(1000) 78 sleep(1000)