🎵 Web Audio API - createOscillator Examples

1. พื้นฐาน - Oscillator Types (รูปคลื่น)

มี 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);
}

2. เสียงเกม (Game Sounds)

เสียงเกมตัวอย่าง:

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;
    }
}

3. Custom Sound Builder

สร้างเสียงแบบกำหนดเอง:

Wave Type:

4. เสียงดนตรี (Musical Notes)

โน้ตเพลงมาตรฐาน:

5. เอฟเฟกต์พิเศษ (Special Effects)

💡 ข้อมูลเพิ่มเติม

จำนวนเสียงที่สร้างได้:

ตัวอย่างโค้ดครบถ้วน:

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 วินาที