Mercurial > games > semicongine
annotate tests/test_audio.nim @ 176:36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
author | Sam <sam@basx.dev> |
---|---|
date | Tue, 02 May 2023 02:13:46 +0700 |
parents | ceba165f07d8 |
children | 88198b0afacc |
rev | line source |
---|---|
171
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
1 import std/os |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
2 import std/sequtils |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
3 import std/times |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
4 |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
5 import semicongine |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
6 |
171
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
7 |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
8 proc test1() = |
176
36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
Sam <sam@basx.dev>
parents:
171
diff
changeset
|
9 mixer[].addSound("test1", newSound(sineSoundData(1000, 2, 44100))) |
36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
Sam <sam@basx.dev>
parents:
171
diff
changeset
|
10 mixer[].addSound("test2", newSound(sineSoundData(500, 2, 44100))) |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
11 |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
12 |
171
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
13 let s1 = mixer[].play("test1", loop=true) |
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
14 let s2 = mixer[].play("test2", loop=true) |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
15 |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
16 let t0 = now() |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
17 while true: |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
18 let runtime = (now() - t0).inMilliseconds() |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
19 if runtime > 1500: |
171
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
20 mixer[].setLevel(0.1) |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
21 if runtime > 3000: |
171
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
22 mixer[].stop(s2) |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
23 if runtime > 6000: |
171
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
24 mixer[].stop("") |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
25 if runtime > 8000: |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
26 break |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
27 |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
28 proc test2() = |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
29 let |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
30 # notes |
176
36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
Sam <sam@basx.dev>
parents:
171
diff
changeset
|
31 c = sineSoundData(261.6256, 0.5, 44100) |
36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
Sam <sam@basx.dev>
parents:
171
diff
changeset
|
32 d = sineSoundData(293.6648, 0.5, 44100) |
36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
Sam <sam@basx.dev>
parents:
171
diff
changeset
|
33 e = sineSoundData(329.6276, 0.5, 44100) |
36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
Sam <sam@basx.dev>
parents:
171
diff
changeset
|
34 f = sineSoundData(349.2282, 0.5, 44100) |
36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
Sam <sam@basx.dev>
parents:
171
diff
changeset
|
35 g = sineSoundData(391.9954, 0.5, 44100) |
36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
Sam <sam@basx.dev>
parents:
171
diff
changeset
|
36 a = sineSoundData(440.0000, 0.5, 44100) |
36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
Sam <sam@basx.dev>
parents:
171
diff
changeset
|
37 b = sineSoundData(493.8833, 0.5, 44100) |
36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
Sam <sam@basx.dev>
parents:
171
diff
changeset
|
38 bb = sineSoundData(466.1638, 0.5, 44100) |
36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
Sam <sam@basx.dev>
parents:
171
diff
changeset
|
39 c2 = sineSoundData(523.2511, 0.5, 44100) |
36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
Sam <sam@basx.dev>
parents:
171
diff
changeset
|
40 d2 = sineSoundData(587.3295, 0.5, 44100) |
36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
Sam <sam@basx.dev>
parents:
171
diff
changeset
|
41 bbShort = sineSoundData(466.1638, 0.25, 44100) |
36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
Sam <sam@basx.dev>
parents:
171
diff
changeset
|
42 c2Short = sineSoundData(523.2511, 0.25, 44100) |
36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
Sam <sam@basx.dev>
parents:
171
diff
changeset
|
43 d2Short = sineSoundData(587.3295, 0.25, 44100) |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
44 |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
45 # song |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
46 frerejaquesData = concat( |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
47 f, g, a, f, |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
48 f, g, a, f, |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
49 a, bb, c2, c2, |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
50 a, bb, c2, c2, |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
51 c2Short, d2Short, c2Short, bbShort, a, f, |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
52 c2Short, d2Short, c2Short, bbShort, a, f, |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
53 f, c, f, f, |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
54 f, c, f, f, |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
55 ) |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
56 |
171
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
57 mixer[].addSound("frerejaques", newSound(frerejaquesData)) |
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
58 discard mixer[].play("frerejaques") |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
59 |
171
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
60 while mixer[].isPlaying(): |
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
61 sleep(1) |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
62 |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
63 proc test3() = |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
64 var song: SoundData |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
65 var f = open("tests/audiotest.PCM.s16le.48000.2") |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
66 var readLen = 999 |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
67 while readLen > 0: |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
68 var sample: Sample |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
69 readLen = f.readBuffer(addr sample, sizeof(Sample)) |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
70 song.add sample |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
71 |
171
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
72 mixer[].addSound("pianosong", newSound(song)) |
176
36e10cc04a33
fix: bad audio buffer handling, reduce latency (unbearable on windows)
Sam <sam@basx.dev>
parents:
171
diff
changeset
|
73 mixer[].addSound("ping", newSound(sineSoundData(500, 0.05, 44100))) |
171
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
74 mixer[].addTrack("effects") |
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
75 discard mixer[].play("pianosong") |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
76 |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
77 let t0 = now() |
171
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
78 while mixer[].isPlaying(): |
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
79 discard mixer[].play("ping", track="effects", stopOtherSounds=true, level=0.5) |
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
80 var input = stdin.readLine() |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
81 |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
82 when isMainModule: |
171
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
83 startMixerThread() |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
84 test1() |
171
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
85 mixer[].stop() |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
86 test2() |
171
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
87 mixer[].stop() |
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
Sam <sam@basx.dev>
parents:
diff
changeset
|
88 test3() |
171
ceba165f07d8
add: audio subsystem, windows backend still missing
Sam <sam@basx.dev>
parents:
169
diff
changeset
|
89 mixer[].stop() |