มี 4 ประเภทหลัก:
function playBasicSound(type, frequency, duration) {
const audioContext = new AudioContext();
const oscillator = audioContext.createOscillator();
const gainNode = audioContext.createGain();
// เชื่อมต่อ nodes
oscillator.connect(gainNode);
gainNode.connect(audioContext.destination);
// กำหนดค่า
oscillator.type = type; // 'sine', 'square', 'sawtooth', 'triangle'
oscillator.frequency.value = frequency; // ความถี่ (Hz)
gainNode.gain.value = 0.1; // ความดัง
// เล่นเสียง
oscillator.start();
oscillator.stop(audioContext.currentTime + duration);
}
function playGameSound(type) {
const audioContext = new AudioContext();
switch(type) {
case 'coin':
// เสียงเก็บเหรียญ - โน้ตขึ้น
playSequence([523, 659], [0.1, 0.1], 'triangle');
break;
case 'jump':
// เสียงกระโดด - ความถี่ขึ้นเร็ว
const osc = audioContext.createOscillator();
const gain = audioContext.createGain();
osc.connect(gain);
gain.connect(audioContext.destination);
osc.type = 'square';
osc.frequency.setValueAtTime(200, audioContext.currentTime);
osc.frequency.exponentialRampToValueAtTime(600, audioContext.currentTime + 0.2);
gain.gain.setValueAtTime(0.1, audioContext.currentTime);
gain.gain.exponentialRampToValueAtTime(0.01, audioContext.currentTime + 0.2);
osc.start();
osc.stop(audioContext.currentTime + 0.2);
break;
case 'powerup':
// เสียง power-up - melody ขึ้น
playSequence([262, 330, 392, 523], [0.1, 0.1, 0.1, 0.3], 'triangle');
break;
}
}
สร้างเสียงแบบกำหนดเอง:
โน้ตเพลงมาตรฐาน:
class SoundGenerator {
constructor() {
this.audioContext = new (window.AudioContext || window.webkitAudioContext)();
}
// เสียงพื้นฐาน
playTone(frequency, duration, type = 'sine', volume = 0.1) {
const oscillator = this.audioContext.createOscillator();
const gainNode = this.audioContext.createGain();
oscillator.connect(gainNode);
gainNode.connect(this.audioContext.destination);
oscillator.frequency.value = frequency;
oscillator.type = type;
gainNode.gain.setValueAtTime(volume, this.audioContext.currentTime);
gainNode.gain.exponentialRampToValueAtTime(0.01, this.audioContext.currentTime + duration);
oscillator.start();
oscillator.stop(this.audioContext.currentTime + duration);
}
// เสียงที่เปลี่ยนความถี่
sweep(startFreq, endFreq, duration, type = 'sine') {
const oscillator = this.audioContext.createOscillator();
const gainNode = this.audioContext.createGain();
oscillator.connect(gainNode);
gainNode.connect(this.audioContext.destination);
oscillator.type = type;
oscillator.frequency.setValueAtTime(startFreq, this.audioContext.currentTime);
oscillator.frequency.exponentialRampToValueAtTime(endFreq, this.audioContext.currentTime + duration);
gainNode.gain.setValueAtTime(0.1, this.audioContext.currentTime);
gainNode.gain.exponentialRampToValueAtTime(0.01, this.audioContext.currentTime + duration);
oscillator.start();
oscillator.stop(this.audioContext.currentTime + duration);
}
}
// การใช้งาน
const sound = new SoundGenerator();
sound.playTone(440, 1.0, 'sine'); // เล่น A4 นาน 1 วินาที