ТРЕНАЖЁР ДЛИТЕЛЬНОСТЕЙ НОТ

Музыкальная грамота
Проверь себя и выполни ритмические упражнения
Укажи, какие длительности сейчас прозвучат
Нажмите "Пуск", чтобы начать упражнение
Выберите длительность
Нажимайте До, Ре или Ми в начале каждой длительности.
Компьютер: 1, 2, 3 или Q, W, E.
Музыкальная математика
Введите число в поле и нажмите Enter или кнопку "Проверить".
Нажмите "Новое задание".
Инструкция

Тренажёр содержит упражнения для запоминания ритмических длительностей. Выберите нужное упражнение в верхней части окна.

В первом упражнении вам нужно правильно указать, какие ритмические длительности звучат в выбранном музыкальном размере – четверти, половинные, восьмые или шестнадцатые.

Выберите музыкальный размер вручную или автоматически.

Нажмите "Пуск". Метроном начнёт отсчитывать доли музыкального метра, и со второго такта вы услышите звуки. Прослушайте их ритм и выберите кнопками внизу ритмические длительности тех звуков, которые вы услышали.

Во втором упражнении вам нужно в определённом музыкальном метре и темпе сыграть длительности нужной длины. Для этого сначала задайте музыкальный размер вручную или оставьте автоматический выбор. Затем нажмите "Новое упражнение". Тренажёр покажет размер и длительности, которые нужно будет сыграть в этом размере. После этого нажмите "Пуск".

Добивайтесь точного совпадения со звуками метронома. На клавиатуре компьютера для нажатий используйте клавиши 1, 2, 3 или Q, W, E.

Старайтесь удерживать клавишу столько времени, сколько должна длиться заданная нота.

Если вы не успеваете нажимать на клавиши во время упражнения, особенно при игре шестнадцатыми и восьмыми длительностями, снизьте скорость темпа.

Если вы ошибаетесь при выполнении упражнения, тренажёр проиграет вам правильный пример. Его можно остановить кнопкой "Стоп".

В упражнении "Музыкальная математика" введите ответ цифрами. После правильного или неправильного ответа нажмите "Новое задание", чтобы получить следующий вопрос.

Ползунками ниже можно изменить темп, громкость метронома и громкость звука клавиш.

"; calculatorDisplay = document.createElement("div"); calculatorDisplay.className = "nt7-calculator-display"; calculatorDisplay.textContent = "0"; calculatorGrid = document.createElement("div"); calculatorGrid.className = "nt7-calculator-grid"; calculatorGrid.appendChild( createCalculatorButton( "7", "", function () { appendCalculatorValue("7"); } ) ); calculatorGrid.appendChild( createCalculatorButton( "8", "", function () { appendCalculatorValue("8"); } ) ); calculatorGrid.appendChild( createCalculatorButton( "9", "", function () { appendCalculatorValue("9"); } ) ); calculatorGrid.appendChild( createCalculatorButton( "÷", "nt7-calculator-button-operator", function () { appendCalculatorValue("÷"); } ) ); calculatorGrid.appendChild( createCalculatorButton( "4", "", function () { appendCalculatorValue("4"); } ) ); calculatorGrid.appendChild( createCalculatorButton( "5", "", function () { appendCalculatorValue("5"); } ) ); calculatorGrid.appendChild( createCalculatorButton( "6", "", function () { appendCalculatorValue("6"); } ) ); calculatorGrid.appendChild( createCalculatorButton( "×", "nt7-calculator-button-operator", function () { appendCalculatorValue("×"); } ) ); calculatorGrid.appendChild( createCalculatorButton( "1", "", function () { appendCalculatorValue("1"); } ) ); calculatorGrid.appendChild( createCalculatorButton( "2", "", function () { appendCalculatorValue("2"); } ) ); calculatorGrid.appendChild( createCalculatorButton( "3", "", function () { appendCalculatorValue("3"); } ) ); calculatorGrid.appendChild( createCalculatorButton( "−", "nt7-calculator-button-operator", function () { appendCalculatorValue("-"); } ) ); calculatorGrid.appendChild( createCalculatorButton( "C", "nt7-calculator-button-clear", clearCalculator ) ); calculatorGrid.appendChild( createCalculatorButton( "0", "", function () { appendCalculatorValue("0"); } ) ); calculatorGrid.appendChild( createCalculatorButton( "=", "nt7-calculator-button-equals", calculateCalculatorValue ) ); calculatorGrid.appendChild( createCalculatorButton( "+", "nt7-calculator-button-operator", function () { appendCalculatorValue("+"); } ) ); calculatorTransfer = document.createElement("div"); calculatorTransfer.className = "nt7-calculator-transfer"; calculatorTransfer.appendChild( createCalculatorButton( "В верхнее поле", "", function () { transferCalculatorValue("numerator"); } ) ); calculatorTransfer.appendChild( createCalculatorButton( "В нижнее поле", "", function () { transferCalculatorValue("denominator"); } ) ); calculator.appendChild(calculatorDisplay); calculator.appendChild(calculatorGrid); calculator.appendChild(calculatorTransfer); mathActions.parentNode.insertBefore( calculator, mathActions.nextSibling ); mathInput.addEventListener("input", function () { mathInput.value = mathInput.value.replace(/[^\d]/g, ""); }); mathInput.addEventListener("keydown", function (event) { if (event.key === "Enter") { event.preventDefault(); checkMathAnswer(); } }); mathNumeratorInput.addEventListener("input", function () { mathNumeratorInput.value = mathNumeratorInput.value.replace(/[^\d]/g, ""); if (mathNumeratorInput.value.length === 2) { mathDenominatorInput.focus(); } }); mathDenominatorInput.addEventListener("input", function () { mathDenominatorInput.value = mathDenominatorInput.value.replace(/[^\d]/g, ""); }); mathNumeratorInput.addEventListener( "keydown", function (event) { if (event.key === "Enter") { event.preventDefault(); checkMathAnswer(); return; } if ( event.key === "ArrowDown" || event.key === "ArrowRight" ) { event.preventDefault(); mathDenominatorInput.focus(); } } ); mathDenominatorInput.addEventListener( "keydown", function (event) { if (event.key === "Enter") { event.preventDefault(); checkMathAnswer(); return; } if ( event.key === "ArrowUp" || ( event.key === "Backspace" && !mathDenominatorInput.value ) ) { event.preventDefault(); mathNumeratorInput.focus(); } } ); mathInput.calculator = calculator; mathInput.calculatorTransfer = calculatorTransfer; mathInputIsPrepared = true; } function createMathTask() { var durationValues = { whole: 16, half: 8, quarter: 4, eighth: 2, sixteenth: 1 }; var durationData = { whole: { one: "одной целой", many: "целых" }, half: { one: "одной половинной", many: "половинных" }, quarter: { one: "одной четверти", many: "четвертей" }, eighth: { one: "одной восьмой", many: "восьмых" }, sixteenth: { one: "одной шестнадцатой", many: "шестнадцатых" } }; var durationOrder = [ "whole", "half", "quarter", "eighth", "sixteenth" ]; var meterList = [ { value: "3/8", units: 3 }, { value: "5/8", units: 5 }, { value: "6/8", units: 6 }, { value: "9/8", units: 9 }, { value: "12/8", units: 12 }, { value: "2/4", units: 8 }, { value: "3/4", units: 12 }, { value: "4/4", units: 16 }, { value: "5/4", units: 20 }, { value: "6/4", units: 24 }, { value: "7/4", units: 28 }, { value: "8/4", units: 32 }, { value: "9/4", units: 36 }, { value: "10/4", units: 40 }, { value: "1/2", units: 8 }, { value: "2/2", units: 16 }, { value: "3/2", units: 24 }, { value: "4/2", units: 32 } ]; var meterParts = [ { key: "half", units: 8 }, { key: "quarter", units: 4 }, { key: "eighth", units: 2 }, { key: "sixteenth", units: 1 } ]; var isMeterQuestion; var firstIndex; var secondIndex; var first; var second; var count; var answer; var question; var correction; var selectedMeter; var parts; var partText; var answers; var i; function randomItem(items) { return items[ Math.floor(Math.random() * items.length) ]; } function joinText(items) { if (items.length === 1) { return items[0]; } if (items.length === 2) { return items[0] + " и " + items[1]; } return ( items.slice(0, -1).join(", ") + " и " + items[items.length - 1] ); } function getMeterPartText(number, key) { var names = { half: { 1: "одну половинную", 2: "две половинные", 3: "три половинные", 4: "четыре половинные" }, quarter: { 1: "одну четверть", 2: "две четверти", 3: "три четверти", 4: "четыре четверти" }, eighth: { 1: "одну восьмую", 2: "две восьмые", 3: "три восьмые", 4: "четыре восьмые", 5: "пять восьмых", 6: "шесть восьмых", 7: "семь восьмых", 8: "восемь восьмых" }, sixteenth: { 1: "одну шестнадцатую", 2: "две шестнадцатые", 3: "три шестнадцатые", 4: "четыре шестнадцатые", 5: "пять шестнадцатых", 6: "шесть шестнадцатых", 7: "семь шестнадцатых", 8: "восемь шестнадцатых", 9: "девять шестнадцатых", 10: "десять шестнадцатых", 11: "одиннадцать шестнадцатых", 12: "двенадцать шестнадцатых" } }; return names[key][number] || number + " " + durationData[key].many; } function getQuestionContainerText(number, key) { var names = { whole: { 1: "одной целой", 2: "двух целых", 3: "трёх целых" }, half: { 1: "одной половинной", 2: "двух половинных", 3: "трёх половинных" }, quarter: { 1: "одной четверти", 2: "двух четвертях", 3: "трёх четвертях" }, eighth: { 1: "одной восьмой", 2: "двух восьмых", 3: "трёх восьмых" }, sixteenth: { 1: "одной шестнадцатой", 2: "двух шестнадцатых", 3: "трёх шестнадцатых" } }; return names[key][number] || number + " " + durationData[key].many; } function getMeterAnswers(units) { var result = []; var index; for (index = 0; index 0) { result++; } } return result; } function createMeterParts(totalUnits) { var result; var remaining; var available; var selected; var index; var steps; var attempts; for (attempts = 0; attempts 0 && steps = 2 ) { return result; } } return { half: 1, quarter: 1, eighth: 1, sixteenth: 2 }; } if ( typeof createMathTask.nextIsMeterQuestion === "undefined" ) { createMathTask.nextIsMeterQuestion = false; } isMeterQuestion = createMathTask.nextIsMeterQuestion; createMathTask.nextIsMeterQuestion = !createMathTask.nextIsMeterQuestion; if (!isMeterQuestion) { firstIndex = Math.floor( Math.random() * (durationOrder.length - 1) ); secondIndex = firstIndex + 1 + Math.floor( Math.random() * (durationOrder.length - firstIndex - 1) ); first = durationOrder[firstIndex]; second = durationOrder[secondIndex]; count = Math.random() 0) { partText.push( getMeterPartText( parts[meterParts[i].key], meterParts[i].key ) ); } } answers = getMeterAnswers(selectedMeter.units); question = "Какой музыкальный размер может быть в такте, который содержит " + joinText(partText) + "?"; correction = "Правильный ответ: " + answers.join(" или ") + "."; return { question: question, answers: answers, correction: correction, isMeterQuestion: true }; } function createNewMathTask() { prepareMathInput(); currentMathTask = createMathTask(); mathAnswered = false; mathQuestion.textContent = currentMathTask.question; mathInput.value = ""; mathNumeratorInput.value = ""; mathDenominatorInput.value = ""; mathInput.disabled = false; mathNumeratorInput.disabled = false; mathDenominatorInput.disabled = false; mathCheckButton.disabled = false; if (currentMathTask.isMeterQuestion) { mathInput.style.display = "none"; mathMeterAnswerBox.style.display = "flex"; mathInput.calculator.style.display = "block"; mathInput.calculatorTransfer.style.display = "grid"; mathStatus.textContent = "Введите числитель и знаменатель музыкального размера."; window.setTimeout(function () { mathNumeratorInput.focus(); }, 0); return; } mathInput.style.display = "block"; mathMeterAnswerBox.style.display = "none"; mathInput.calculator.style.display = "block"; mathInput.calculatorTransfer.style.display = "none"; mathStatus.textContent = "Введите ответ цифрами и нажмите Enter."; window.setTimeout(function () { mathInput.focus(); }, 0); } function checkMathAnswer() { var value; var isCorrect = false; var i; if (!currentMathTask || mathAnswered) { return; } if (currentMathTask.isMeterQuestion) { if ( !mathNumeratorInput.value || !mathDenominatorInput.value ) { mathStatus.textContent = "Введите числитель и знаменатель размера."; mathNumeratorInput.focus(); return; } value = mathNumeratorInput.value + "/" + mathDenominatorInput.value; } else { value = mathInput.value.replace(/\s/g, ""); if (!/^\d+$/.test(value)) { mathStatus.textContent = "Введите ответ цифрами."; mathInput.focus(); return; } } for ( i = 0; i