comparison tests/test_audio.nim @ 169:2a0c81fa541d

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
168:061054515d28 169:2a0c81fa541d
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()