HTML
[ HTML | JS ] 음표 만들기
Suil_bear
2023. 9. 30. 00:06
728x90
web audio API를 사용하여 주파수를 통해서 음을 만들어 보려고 한다.
window.AudioContext 또는 window.webkitAudioContext 사용하여 오디오 켄텍스트를 생성을 할 수 있다.
오디오 콘텍스트는 Web Audio API에서 중요한 개념으로, 오디오 신호를 생성, 처리 및 조작하는 데 사용된다.
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Piano</title>
<style>
.piano-key {
width: 40px;
height: 150px;
background-color: white;
border: 1px solid #000;
margin-right: 2px;
cursor: pointer;
}
</style>
</head>
<body>
<div class="piano">
<div class="piano-key" data-note="C"></div>
<div class="piano-key" data-note="D"></div>
<div class="piano-key" data-note="E"></div>
<div class="piano-key" data-note="F"></div>
<div class="piano-key" data-note="G"></div>
<div class="piano-key" data-note="A"></div>
<div class="piano-key" data-note="B"></div>
</div>
</body>
</html>
JS
// Web Audio API 초기화
const audioContext = new (window.AudioContext || window.webkitAudioContext)();
// 피아노 음을 생성하는 함수
function playPianoSound(note) {
const oscillator = audioContext.createOscillator();
oscillator.type = 'sine'; // 사인파 설정
oscillator.frequency.setValueAtTime(getNoteFrequency(note), audioContext.currentTime);
oscillator.connect(audioContext.destination);
oscillator.start();
oscillator.stop(audioContext.currentTime + 0.5); // 0.5초 후에 중지
}
// 음표를 주파수로 변환하는 함수
function getNoteFrequency(note) {
const noteMap = {
'C': 261.63,
'D': 293.66,
'E': 329.63,
'F': 349.23,
'G': 392.00,
'A': 440.00,
'B': 493.88
};
return noteMap[note] || 0;
}
// 피아노 키 클릭 이벤트 처리
const pianoKeys = document.querySelectorAll('.piano-key');
pianoKeys.forEach((key) => {
key.addEventListener('click', () => {
const note = key.getAttribute('data-note');
if (note) {
playPianoSound(note);
}
});
});
클릭을 하면 기계음이 재생되는 것을 들을 수 있다.
더 다양한 음과 기능을 다음에 된다면 추가하려고 한다.