i
Инструкция
ТРЕНАЖЁР ДЛИТЕЛЬНОСТЕЙ НОТ
Проверь себя и выполни ритмические упражнения
1. Укажи, какие длительности звучат
2. Проиграй правильные длительности
3. Музыкальная математика
Выберите размер
Автоматически
Вручную
2/4
3/4
4/4
5/4
6/8
Выберите звук
Фортепиано
Флейта
Орган
Синтезатор
Укажи, какие длительности сейчас прозвучат
Нажмите "Пуск", чтобы начать упражнение
Новое упражнение
Пуск
Стоп
Выберите длительность
Целые
Половинные
Четверти
Восьмые
Шестнадцатые
Половинные с точкой
Четверти с точкой
?
Показать ответ
Нажимайте До, Ре или Ми в начале каждой длительности.
Компьютер: 1, 2, 3 или Q, W, E.
До
1 / Q
Ре
2 / W
Ми
3 / 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