HTML5音频通过OscillatorNode产生基础波形测试
OscillatorNode 专用于实时生成基础波形正弦/方波等不能播放MP3/WAV它无输入接口只输出周期信号需配合AudioBufferSourceNode实现音频文件播放。HTML5音频中OscillatorNode 并不用于“播放”已有音频文件而是专门用来**实时生成基础波形**如正弦波、方波、锯齿波、三角波是 Web Audio API 中实现声音合成的核心节点之一。它本身不加载任何音频资源而是从零开始振荡输出信号。为什么不能直接用 OscillatorNode 播放 MP3/WAVOscillatorNode 是一个**声源节点AudioNode**但它没有输入接口只产生固定频率/波形的周期性信号。它和 AudioBufferSourceNode用于播放预加载的音频缓冲区职责不同OscillatorNode适合做音效生成、调制、教学演示、简单蜂鸣器、音高测试等 AudioBufferSourceNode适合播放录制好的音频文件需先解码为 AudioBuffer 试图把 MP3 数据喂给 OscillatorNode 会报错——它根本无法接收外部音频数据。用 OscillatorNode 生成并播放正弦波最简示例以下代码在用户手势触发后启动一个 440Hz 的纯正弦波标准 A4 音const audioContext new (window.AudioContext || window.webkitAudioContext)();const oscillator audioContext.createOscillator();const gainNode audioContext.createGain();oscillator.type sine; // 可选sine | square | sawtooth | triangleoscillator.frequency.value 440;gainNode.gain.value 0.3; // 控制音量避免爆音oscillator.connect(gainNode);gainNode.connect(audioContext.destination);// 必须在用户交互如点击中启动防止自动播放策略拦截document.querySelector(#startBtn).addEventListener(click, () { if (audioContext.state suspended) { audioContext.resume(); // iOS/Safari 等需要显式 resume } oscillator.start();});常见波形特点与听感差异同一频率下不同 type 产生的谐波成分不同直接影响音色 RedClaw 百度推出的手机端万能AI Agent助手