White Noise Generator
A white noise generator with frequency filtering and delay effect controls.
0.300
01
12000
2020000
0.500
0.012
0.400
00.8
This white noise generator uses the Web Audio API to create real-time audio processing. Adjust the volume, cutoff frequency, and delay parameters using the sliders. The filter removes high frequencies to create a softer sound, and the delay effect adds repeats with configurable time and feedback.
Using Web Audio API with delay and filtering.
"use client"
import { useState, useRef, useEffect } from "react"
export function WhiteNoiseGenerator() {
const [isPlaying, setIsPlaying] = useState(false)
const [controls, setControls] = useState({
volume: 0.3,
frequency: 12000,
delayTime: 0.5,
delayFeedback: 0.4,
})
const audioContextRef = useRef<AudioContext | null>(null)
const bufferSourceRef = useRef<AudioBufferSource | null>(null)
const gainNodeRef = useRef<GainNode | null>(null)
const filterNodeRef = useRef<BiquadFilterNode | null>(null)
const delayNodeRef = useRef<DelayNode | null>(null)
const delayFeedbackRef = useRef<GainNode | null>(null)
const createWhiteNoise = (context: AudioContext) => {
const sampleRate = context.sampleRate
const length = sampleRate * 2
const noiseBuffer = context.createBuffer(1, length, sampleRate)
const data = noiseBuffer.getChannelData(0)
for (let i = 0; i < length; i++) {
data[i] = Math.random() * 2 - 1
}
return noiseBuffer
}
const startNoise = async () => {
const context = new window.AudioContext()
await context.resume()
const filter = context.createBiquadFilter()
filter.type = "lowpass"
filter.frequency.value = controls.frequency
const delay = context.createDelay(5)
delay.delayTime.value = controls.delayTime
const delayFeedback = context.createGain()
delayFeedback.gain.value = controls.delayFeedback
const gainNode = context.createGain()
gainNode.gain.value = controls.volume
filter.connect(gainNode)
delay.connect(delayFeedback)
delayFeedback.connect(delay)
delay.connect(gainNode)
gainNode.connect(context.destination)
const noiseBuffer = createWhiteNoise(context)
const source = context.createBufferSource()
source.buffer = noiseBuffer
source.loop = true
source.connect(filter)
source.start(0)
audioContextRef.current = context
bufferSourceRef.current = source
gainNodeRef.current = gainNode
filterNodeRef.current = filter
delayNodeRef.current = delay
delayFeedbackRef.current = delayFeedback
setIsPlaying(true)
}
const stopNoise = () => {
if (bufferSourceRef.current) {
bufferSourceRef.current.stop()
}
if (audioContextRef.current) {
audioContextRef.current.close()
}
setIsPlaying(false)
}
// ... rest of implementation
}