PageSourceSearch

https://audiosluh.ru/test_sluha//js/script.js?170885291617345

js audiosluh.ru collected 2026-09-28 10:07:33 UTC 17,345 bytes, 525 lines download raw bytes

1"use strict";
2
3var audioStop = function audioStop(select = "") {
4  // select ? select : select = ".audiotest__item:not(.active_step) audio";
5  // var audioList = document.querySelectorAll(select);
6  // if(audioList && audioList.length) {
7  //   for (var i = 0; i < audioList.length; i++) {
8  //     audioList[i].pause();
9  //     // audioList[i].currentTime = 0;
10  //     audioList[i].seek(0);
11  //   }
12  // }
13
14  if(audio_noise) {
15    audio_noise.pause();
16    audio_noise.seek(0);
17  }
18
19  if(audio_volume) {
20    audio_volume.pause();
21    audio_volume.seek(0);
22  }
23}
24
25var audioPlay = function audioPlay(audioID, type = '') {
26  // var audio = document.getElementById(audioID);
27  var audio = new Howl({
28    src: [
29        './sounds/'+audioID+'.webm',
30        './sounds/'+audioID+'.mp3'
31    ],
32    volume: volume,
33    loop: true
34  });
35
36  switch (type) {
37    case "speech":
38      audio_noise = audio;
39      repeatSpeechTest(true);
40      break;
41    case "volume":
42      // var tone_volume = +document.querySelector('.audiotest__item.active_step [data-role="tone-volume"]').textContent;
43      // audio.volume = volume / 100 * tone_volume;
44        audio_volume = audio;
45      break;
46    default:
47      // audio.volume = volume;
48      // audio.volume(volume);
49      break;
50  }
51  audio.play();
52}
53
54// Ïåðåêëþ÷åíèå ñëàéäîâ
55var nextTest = function nextTest() {
56  var stepLength = audiotestItemList[0].clientWidth;
57  position += stepLength;
58  audiotestItemList[step].classList.remove('active_step');
59  audiotestItemList[++step].classList.add('active_step');
60  audioStop();
61  $audiotest.style.transform = "translateX(-".concat(position, "px)");
62};
63
64// Íà÷àëî òåñòà
65var testStart = function testStart() {
66  nextTest();
67  $audiotestExitButton.classList.remove("fade");
68};
69
70// Çàáûë ïåðåèìåíîâàòü, ìåíÿåò êîíòåíò âíóòðè ñëàéäåðà
71var questionNext = function questionNext(btn) {
72  var $parent = btn.closest(".audiotest__content");
73  $parent.classList.add("fade");
74  setTimeout(function () {
75    $parent.classList.remove("active");
76    $parent.nextElementSibling.classList.add("active");
77    $parent.nextElementSibling.classList.remove("fade");
78  }, 300);
79};
80
81var volumeMinus = function volumeMinus(btn) {
82  var plusBtn = btn
83    .closest(".audiotest__volume")
84    .querySelector('[data-role="volume-plus"]');
85  var volumeActiveList = document.querySelectorAll(".volume__level.active");
86  plusBtn.disabled = plusBtn.disabled && false;
87  volumeActiveList[volumeActiveList.length - 1].classList.remove("active");
88  btn.disabled = volumeActiveList.length < 2 && true;
89
90  volume = volumeStep * (volumeActiveList.length - 1);
91  // audio_volume.volume = volume;
92  audio_volume.volume(volume);
93  btn.closest(".audiotest__content")
94      .querySelector('[data-role="test-next"]')
95      .disabled = btn.disabled;
96};
97
98var volumePlus = function volumePlus(btn) {
99  var minusBtn = btn
100    .closest(".audiotest__volume")
101    .querySelector('[data-role="volume-minus"]');
102  var volumeList = document.querySelectorAll(".volume__level");
103  var volumeActiveList = document.querySelectorAll(".volume__level.active");
104  volumeList[volumeActiveList.length].classList.add("active");
105  minusBtn.disabled = minusBtn.disabled && false;
106  btn.disabled = volumeActiveList.length + 1 === volumeList.length && true;
107
108  volume = volumeStep * (volumeActiveList.length + 1);
109  // audio_volume.volume = volume;
110  audio_volume.volume(volume);
111  btn.closest(".audiotest__content")
112      .querySelector('[data-role="test-next"]')
113      .disabled = false;
114};
115
116// ãåíåðèðóåò òðè ñëó÷àéíûõ îòâåòà
117var generateNum = function generateNum() {
118  var num1, num2, num3;
119
120  // 1. Ñáðîñèòü ìàññèâ
121  speechNumKey = [];
122
123  // 2. Âû÷èñëèòü 3 ñëó÷àéíûõ ÷èñëà
124  num1 = Math.round(Math.random() * (speechMaxNum - speechMinNum) + speechMinNum);
125  num2 = Math.round(Math.random() * (speechMaxNum - speechMinNum) + speechMinNum);
126  num3 = Math.round(Math.random() * (speechMaxNum - speechMinNum) + speechMinNum);
127
128  // 2. Óñòðàíåíèå / óäàëåíèå äóáëèêàòîâ â òðåõ ÷èñëàõ
129  while(num1 === num2 || num2 === num3 || num1 === num3) {
130    num2 = Math.round(Math.random() * (speechMaxNum - speechMinNum) + speechMinNum);
131    num3 = Math.round(Math.random() * (speechMaxNum - speechMinNum) + speechMinNum);
132  }
133
134  // 3. Îòïðàâêà îòâåòîâ â ìàññèâ answerStrings
135  // Èñïîëüçóåò ñëó÷àéíûå ÷èñëà, óêàçàííûå âûøå, äëÿ ïîëó÷åíèÿ ñëó÷àéíûõ îòâåòîâ èç answerKey
136  speechNumKey.push(num1);
137  speechNumKey.push(num2);
138  speechNumKey.push(num3);
139}
140// Ñðàâíèâàåì ââåäåííûå îòâåòû ñ êëþ÷îì îòâåòà
141var evalNum = function evalNum() {
142  var input_nums = document.querySelectorAll('.speech-test-output span');
143  if(input_nums.length == speechTestInput) {
144    for (var i = 0; i < speechTestInput; i++) {
145      if (parseInt(input_nums[i].innerHTML) !== speechNumKey[i]) {
146        console.log(input_nums[i].innerHTML + " vs " + speechNumKey[i]);
147        testResultNegative();
148      }
149    }
150  }
151}
152// Âîñïðîèçâåäåíèå àóäèîôàéëîâ, ñîîòâåòñòâóþùèõ ñãåíåðèðîâàííûì îòâåòàì
153var playNumAudio = function playNumAudio() {
154
155  // èíèöèàëèçèðóåì ïóñòîé ìàññèâ
156  tempAudio = [];
157
158  for(var i=0; i < speechTestInput; i++){
159
160    // Îòïðàâëÿåì ïóòè ê àóäèîôàéëó, êîòîðûé ñîîòâåòñòâóåò öèêëó îòâåòîâ
161    // tempAudio.push(new Audio('./sounds/speech/Speech_' +  speechNumKey[i] + '.mp3'));
162    tempAudio.push(new Howl({
163      src: [
164          './sounds/speech/Speech_' +  speechNumKey[i] + '.webm',
165          './sounds/speech/Speech_' +  speechNumKey[i] + '.mp3'
166      ],
167      volume: volume
168    }));
169  }
170
171  // ïðîèãðûâàåì ïåðâîå àóäèî
172  // tempAudio[0].volume = volume;
173  // tempAudio[0].volume(volume);
174  tempAudio[0].play();
175
176  // âîñïðîèçâåäåíèå ñëåäóþùåãî çâóêà èç setTimeout äëÿ çàäåðæêè
177  timeout_id = setTimeout(function(){
178
179    // tempAudio[1].volume = volume;
180    // tempAudio[1].volume(volume);
181    tempAudio[1].play();
182
183    // âîñïðîèçâåäåíèå òðåòüåãî çâóêà èç setTimeout
184    timeout_id = setTimeout(function(){
185      // tempAudio[2].volume = volume;
186      // tempAudio[2].volume(volume);
187      tempAudio[2].play();
188
189      // ïîñëå çàäåðæêè âêëþ÷èòü ââîä êíîïêè îòâåòà
190      //setTimeout(function(){
191
192        // âêëþ÷èòü ââîä êíîïêè îòâåòà
193        // document.querySelectorAll('.speech__btn').forEach(function (item) {
194        //   return (item.disabled = false);
195        // });
196        // var buttonNextList = document.querySelectorAll(
197        //     '[data-role="speech-test-next"]'
198        // );
199        // buttonNextList.forEach(function (item) {
200        //   return (item.disabled = item.textContent === "Äàëåå" && true);
201        // });
202        // document.querySelector('.speech-test-numbers').classList.remove('disabled');
203      //}, speechDelayTime);
204    }, speechDelayTime)
205  }, speechDelayTime);
206
207}
208
209var setSpeechNumber = function setSpeechNumber(btn, role) {
210  $speechTestOutput.innerHTML = "\n    "
211    .concat($speechTestOutput.innerHTML, "\n    <span>")
212    .concat(btn.textContent, "</span>\n  ");
213
214  if ($speechTestOutput.querySelectorAll("span").length === speechTestInput) {
215    var numberButtonList = document.querySelectorAll(
216      '[data-role="'.concat(role, '"]')
217    );
218    var buttonNextList = document.querySelectorAll(
219      '[data-role="speech-test-next"]'
220    );
221    numberButtonList.forEach(function (item) {
222      return (item.disabled = true);
223    });
224    buttonNextList.forEach(function (item) {
225      return (item.disabled = false);
226    });
227  }
228};
229
230var repeatSpeechTest = function repeatSpeechTest(first = false, repeat = false) {
231  $speechTestOutput.innerHTML = "";
232
233  var numberButtonList = document.querySelectorAll('.speech-test-numbers [data-role="speech-test-number"]');
234  numberButtonList.forEach(function (item) {
235    return (item.disabled = false);
236  });
237
238  var buttonNextList = document.querySelectorAll('.speech-test-numbers [data-role="speech-test-next"]');
239  buttonNextList.forEach(function (item) {
240    return (item.disabled = item.textContent === "Äàëåå" && true);
241  });
242
243  audio_noise_volume = volume / speechStepMax / 2;
244  audio_noise_step_volume = (audio_noise_volume / 4) * (speechStep + 1);
245
246  if (first === true) {
247    // audio_noise.volume = audio_noise_volume;
248    audio_noise.volume(audio_noise_volume);
249  }
250  else if(repeat === false) {
251    // audio_noise.volume += audio_noise_step_volume;
252    audio_noise.volume(audio_noise.volume() + audio_noise_step_volume);
253  }
254
255  // document.querySelectorAll('.speech__btn').forEach(function (item) {
256  //   return (item.disabled = true);
257  // });
258
259  repeat === false && generateNum();
260  playNumAudio();
261};
262
263var nextSpeechNext = function nextSpeechNext() {
264  evalNum();
265  speechStep++;
266  if(tempAudio && tempAudio.length) {
267    clearTimeout(timeout_id);
268    for (var i = 0; i < tempAudio.length; i++) {
269      tempAudio[i].pause();
270      // tempAudio[i].currentTime = 0;
271      tempAudio[i].seek(0);
272    }
273  }
274  speechStep < speechStepMax ? repeatSpeechTest() : nextTest();
275};
276
277// update
278var nextTone = function nextTone(btn) {
279  //audioStop('.audiotest__item.active_step audio');
280  toneAudio[toneStep].pause();
281  // toneAudio[toneStep].currentTime = 0;
282  toneAudio[toneStep].seek(0);
283
284  // var toneAudioList = document.querySelectorAll(".audiotest__item.active_step audio");
285
286  var repeatToneTest = function repeatToneTest() {
287    var toneStepList = document.querySelectorAll('.audiotest__item.active_step .audiotest__content');
288    for(var i=1; i < toneStepList.length; i++) {
289      toneStepList[i].querySelector('[data-role="tone-volume"]').textContent = toneAudioVolumeDefault;
290    }
291
292    var toneEarTextList = document.querySelectorAll('.tone_headphones_ear');
293
294    var $parent = btn.closest(".audiotest__content");
295    var $first_tone = document.querySelectorAll('.audiotest__item.active_step .audiotest__content')[1];
296    $parent.classList.add("fade");
297    setTimeout(function () {
298      $parent.classList.remove("active");
299      $first_tone.classList.add("active");
300      $first_tone.classList.remove("fade");
301
302      for(var i = 0; i < toneEarTextList.length; i++) {
303        toneEarTextList[i].querySelector('.tone_headphones_ear__left').hidden = true;
304        toneEarTextList[i].querySelector('.tone_headphones_ear__right').hidden = false;
305      }
306    }, 300);
307
308    toneContentNext(true);
309  };
310
311  var toneContentNext = function toneContentNext(repeat = false) {
312    var tone_volume = toneAudioVolumeDefault;
313    !repeat && questionNext(btn);
314    toneStep++;
315    // toneAudio[toneStep].volume = volume / 100 * tone_volume;
316    toneAudio[toneStep].volume(volume / 100 * tone_volume);
317    toneAudio[toneStep].play();
318    toneClickPositiveStep = 0;
319    toneClickNegativeStep = 0;
320  };
321
322  var $currentToneVolume = btn
323      .closest(".audiotest__content")
324      .querySelector('[data-role="tone-volume"]');
325  var btnValue = +btn.dataset.value;
326  var tone_volume = +$currentToneVolume.textContent;
327
328  if (btnValue === 1) {
329    if (tone_volume <= 10 || (toneClickPositiveStep > 0 && toneClickNegativeStep > 0)) {
330      if(headphones && toneStep == (toneStepMax/2 - 1)) {
331        repeatToneTest();
332        return false;
333      }
334      toneStep < (toneStepMax - 1) ? toneContentNext() : nextTest();
335      return false;
336    }
337
338    tone_volume -= 10;
339    $currentToneVolume.textContent = tone_volume;
340    toneClickPositiveStep++;
341
342    // toneAudio[toneStep].volume = volume / 100 * tone_volume;
343    toneAudio[toneStep].volume(volume / 100 * tone_volume);
344    toneAudio[toneStep].play();
345  }
346
347  if (btnValue === 0) {
348    if (tone_volume >= 70 || (toneClickPositiveStep > 0 && toneClickNegativeStep > 0)) {
349      if(headphones && toneStep == (toneStepMax/2 - 1)) {
350        repeatToneTest();
351        return false;
352      }
353      toneStep < (toneStepMax - 1) ? toneContentNext() : nextTest();
354      return false;
355    }
356
357    tone_volume += 5;
358    $currentToneVolume.textContent = tone_volume;
359    toneClickNegativeStep++;
360
361    // toneAudio[toneStep].volume = volume / 100 * tone_volume;
362    toneAudio[toneStep].volume(volume / 100 * tone_volume);
363    toneAudio[toneStep].play();
364  }
365};
366// end update
367
368var testHeadphones = function testHeadphones() {
369  headphones = true;
370  toneStepMax *= 2;
371
372  var toneEarTextList = document.querySelectorAll('.tone_headphones_ear');
373  for(var i = 0; i < toneEarTextList.length; i++) {
374    toneEarTextList[i].hidden = false;
375  }
376}
377
378var toneTestStart = function toneTestStart() {
379  var tone_volume = +document.querySelector('.audiotest__item.active_step [data-role="tone-volume"]').textContent;
380
381  for(var i=0; i < toneAudioValue.length; i++){
382    if(headphones) {
383      // toneAudio[i] = new Audio('./sounds/tone/' + toneAudioValue[i] + '_l.mp3');
384      // toneAudio[i].loop = true;
385      toneAudio[i] = new Howl({
386        src: [
387            './sounds/tone/' + toneAudioValue[i] + '_l.webm',
388            './sounds/tone/' + toneAudioValue[i] + '_l.mp3'
389        ],
390        volume: volume / 100 * tone_volume,
391        loop: true
392      });
393
394      // toneAudio[toneAudioValue.length+i] = new Audio('./sounds/tone/' + toneAudioValue[i] + '_r.mp3');
395      // toneAudio[toneAudioValue.length+i].loop = true;
396      toneAudio[toneAudioValue.length+i] = new Howl({
397        src: [
398            './sounds/tone/' + toneAudioValue[i] + '_r.webm',
399            './sounds/tone/' + toneAudioValue[i] + '_r.mp3'
400        ],
401        volume: volume / 100 * tone_volume,
402        loop: true
403      });
404    }
405    else {
406
407      // toneAudio[i] = new Audio('./sounds/tone/' + toneAudioValue[i] + '.mp3');
408      // toneAudio[i].loop = true;
409      toneAudio[i] = new Howl({
410        src: [
411            './sounds/tone/' + toneAudioValue[i] + '.webm',
412            './sounds/tone/' + toneAudioValue[i] + '.mp3'
413        ],
414        volume: volume / 100 * tone_volume,
415        loop: true
416      });
417    }
418  }
419
420  // var tone_volume = +document.querySelector('.audiotest__item.active_step [data-role="tone-volume"]').textContent;
421  // toneAudio[0].volume = volume / 100 * tone_volume;
422  // toneAudio[0].volume(volume / 100 * tone_volume);
423  toneAudio[0].play();
424}
425
426var audiotestTrigger = function audiotestTrigger(event) {
427  var result = event.target.dataset.result;
428  test_result && result && result === "negative" && testResultNegative();
429
430  var role = event.target.dataset.role;
431  role === "test-start" && testStart();
432  role === "next-question" && questionNext(event.target);
433  role === "test-next" && nextTest();
434  role === "volume-minus" && volumeMinus(event.target);
435  role === "volume-plus" && volumePlus(event.target);
436  role === "speech-test-number" && setSpeechNumber(event.target, role);
437  role === "speech-test-repeat" && repeatSpeechTest(false, true);
438  role === "speech-test-next" && nextSpeechNext();
439  role === "tone-next" && nextTone(event.target); // update
440
441  var audio_input = event.target.dataset.input;
442  audio_input === "headphones" && testHeadphones();
443
444  var test = event.target.dataset.test;
445  test === "tone" && toneTestStart();
446
447  var audio = event.target.dataset.audio;
448  if(audio) {
449    switch (audio) {
450      case "BackgroundNoise":
451        audioPlay(audio, 'speech');
452        break;
453      case "noise":
454        audioPlay(audio, 'volume');
455        break;
456      default:
457        audioPlay(audio);
458        break;
459    }
460  }
461};
462
463var testResultNegative = function testResultNegative() {
464  test_result = false;
465  result_positive.hidden = true;
466  result_negative.hidden = false;
467};
468
469var exitTest = function exitTest() {
470  location.reload();
471};
472
473var $audiotest = document.querySelector(".audiotest");
474var $audiotestExitButton = document.querySelector(".audiotest__exit");
475var $audiotestReloadButton = document.querySelector(".audiotest__reload");
476var $speechTestOutput = document.querySelector(".speech-test-output");
477var audiotestItemList = document.querySelectorAll(".audiotest__item");
478var audiotestToneList = document.querySelectorAll(".tone__item");
479
480// new
481var $volumeValue = document.querySelectorAll('[data-role="tone-value"]');
482var volumeValueDefault = +$volumeValue[0].textContent;
483// end new
484
485var tempAudio;
486var timeout_id;
487
488var headphones = false;
489var toneAudioVolumeDefault = 40;
490var toneAudioValue = ['500', '1000', '2000', '4000'];
491var toneAudio = [];
492
493var position = 0;
494var step = 0;
495var speechTestInput = 3;
496var speechStep = 0;
497var speechStepMax = 5;
498var speechMinNum = 1;
499var speechMaxNum = 8;
500var speechNumKey = [];
501var speechDelayTime = 1200;
502var toneStep = 0;
503var toneStepMax = 4;
504var toneClickPositiveStep = 0; // new
505var toneClickNegativeStep = 0; // new
506var volumeLength = document.querySelectorAll(".volume__level").length;
507var volumeActiveLength = document.querySelectorAll(".volume__level.active").length;
508var volumeStep = Math.round(100 / volumeLength) / 100;
509var volume = volumeStep*volumeActiveLength;
510// var audio_volume = document.getElementById('noise');
511// var audio_noise = document.getElementById('BackgroundNoise');
512var audio_volume;
513var audio_noise;
514var audio_noise_volume = 0;
515var audio_noise_step_volume = 0;
516var test_result = true;
517var result_negative = document.querySelector(".result__negative");
518var result_positive = document.querySelector(".result__positive");
519$audiotestExitButton &&
520  $audiotestExitButton.addEventListener("click", exitTest);
521$audiotestReloadButton &&
522  $audiotestReloadButton.addEventListener("click", exitTest);
523$audiotest
524  ? $audiotest.addEventListener("click", audiotestTrigger)
525  : (position = speechStep = toneStep = toneClickPositiveStep = toneClickNegativeStep = null); //update

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.