Estava tudo funcionando, eu atribuia o nome da nota, ela era substituida pelo valor e fazia o cálculo, mas usando a função prompt e no Chrome responder qual é a nota, ele não substitui pelo valor da nota, como eu resolvo isso?
<mata charset = "UTF-8">
<h3> Cálculo Frequência </h3>
<script>
function mostra(texto) {
document.write(texto);
document.write("<br><br>");
}
constante = 1.0594630943592953
// 1.0594630943592953
// 1.05946284
function calculaFrequencia(f1,n) {
//fórmula da escala temperada, f1 é frequencia inicial, f2 é frequencia final, n é a quantidade de semitons entre a nota inicial e a final.
return f1 * (Math.pow(constante, n));
}
function calculaOitava(x) {
//Considerando lá 440, se o registro 4 é 440, o registro 3 é 220 e o registro 2 é 110. Logo a função do registro é: registro(n) = frequencia * 2 ^ (n - 4)
return frequenciaBase * Math.pow(2, (x - 4));
}
//intervalo em semitons em referência ao lá
dó = 0
réb = 1
ré = 2
mib = 3
mi = 4
fá = 5
solb = 6
sol = 7
láb = 8
lá = 9
sib = 10
si = 11
// A referência é o Lá. O registro é qual oitava está a nota, exemplo, no Lá4 o registro é 4. A referência do registro é Lá4 = 440 (ou 442).
//exemplo:
//afinação = 440
//nota = mi
//registro = 3
var afinacao = parseInt(prompt ("Qual afinação do lá? Exemplo (440 ou 442)"));
var nota = prompt ("Qual nota? dó, réb, ré, mib, mi, fá, solb, sol, láb, lá, sib ou si?");
var registro = parseInt(prompt ("Qual registro? (Exemplo, lá4 está no registro 4)"));
// a referência é a relação entre dó e lá, usando o lá como afinação para obter a frequência do dó como base.
referencia = calculaFrequencia(afinacao, -9);
frequenciaBase = calculaFrequencia(referencia, nota);
frequencia = Math.round(calculaOitava(registro));
mostra("Nota: " + nota)
mostra("Frequência base (registro 4): " + frequenciaBase + " Hz.")
mostra("Frequência da nota no registro " + registro + ": " + frequencia + " Hz.")
</script>