26 lines
1.2 KiB
TypeScript
26 lines
1.2 KiB
TypeScript
import assert from 'node:assert/strict'
|
|
import { test } from 'node:test'
|
|
import { soundCheckWav } from './sound-check.js'
|
|
|
|
test('проверочный WAV содержит два коротких тона с паузой и умеренной амплитудой', () => {
|
|
assert.equal(soundCheckWav.toString('ascii', 0, 4), 'RIFF')
|
|
assert.equal(soundCheckWav.toString('ascii', 8, 16), 'WAVEfmt ')
|
|
assert.equal(soundCheckWav.readUInt32LE(4), soundCheckWav.length - 8)
|
|
assert.equal(soundCheckWav.readUInt16LE(20), 1)
|
|
assert.equal(soundCheckWav.readUInt16LE(22), 1)
|
|
assert.equal(soundCheckWav.readUInt16LE(34), 16)
|
|
const rate = soundCheckWav.readUInt32LE(24)
|
|
assert.equal(soundCheckWav.readUInt32LE(40) / (rate * 2), 1)
|
|
let first = 0
|
|
let second = 0
|
|
for (let index = 0; index < rate; index++) {
|
|
const amplitude = Math.abs(soundCheckWav.readInt16LE(44 + index * 2))
|
|
assert.ok(amplitude <= 6553)
|
|
if (index < rate * 0.05 || (index >= rate * 0.45 && index < rate * 0.55) || index >= rate * 0.95)
|
|
assert.equal(amplitude, 0)
|
|
if (index < rate * 0.5) first += amplitude
|
|
else second += amplitude
|
|
}
|
|
assert.ok(first > 0 && second > 0)
|
|
})
|