<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Amino Acid Tone Generator</title>
</head>
<body>
<h1>Amino Acid Sequence Tone Generator</h1>
<label for="aminoAcidInput">Enter Amino Acid Sequence:</label>
<input type="text" id="aminoAcidInput" placeholder="e.g., ACDEFGHIKL" maxlength="100">
<button id="playButton">Play Tones</button>
<p>Each letter will play a unique tone based on its amino acid mapping.</p>
<script>
// Mapping amino acid letters to specific frequencies (in Hz)
const aminoAcidFrequencies = {
A: 440, // Alanine - A4 (440 Hz)
C: 494, // Cysteine - B4
D: 523, // Aspartic acid - C5
E: 587, // Glutamic acid - D5
F: 659, // Phenylalanine - E5
G: 698, // Glycine - F5
H: 784, // Histidine - G5
I: 880, // Isoleucine - A5
K: 988, // Lysine - B5
L: 1047, // Leucine - C6
M: 1175, // Methionine - D6
N: 1319, // Asparagine - E6
P: 1397, // Proline - F6
Q: 1568, // Glutamine - G6
R: 1760, // Arginine - A6
S: 1976, // Serine - B6
T: 2093, // Threonine - C7
V: 2349, // Valine - D7
W: 2637, // Tryptophan - E7
Y: 2794 // Tyrosine - F7
};
// Function to play a single tone
function playTone(frequency, duration, audioContext) {
return new Promise((resolve) => {
const oscillator = audioContext.createOscillator();
const gainNode = audioContext.createGain();
oscillator.type = 'sine'; // Waveform
oscillator.frequency.value = frequency;
gainNode.gain.setValueAtTime(0.1, audioContext.currentTime); // Volume
oscillator.connect(gainNode);
gainNode.connect(audioContext.destination);
oscillator.start();
setTimeout(() => {
oscillator.stop();
resolve();
}, duration);
});
}
// Function to process the amino acid sequence and play tones
async function playAminoAcidSequence() {
const input = document.getElementById('aminoAcidInput').value.toUpperCase();
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
const toneDuration = 500; // Duration of each tone in milliseconds
for (const letter of input) {
if (aminoAcidFrequencies[letter]) {
await playTone(aminoAcidFrequencies[letter], toneDuration, audioContext);
} else {
console.warn(`No tone mapped for letter: ${letter}`);
}
}
}
// Event listener for the button
document.getElementById('playButton').addEventListener('click', playAminoAcidSequence);
</script>
</body>
</html>