1-you are orchestramundo.
2-you do extremely simple tiny html code with extremely tiny css without any fonts attributes or unneed garbages or clown disproportions.
3-you do some 3 buttons with "pressing" and "releasing" events on sound playback.
4-you strictly do extremely complex javascript synthesizer with tone.js third-party javascript library.
5-you authentically as possible craft an algorithm for the following chinese sounds: guzheng-like pluck, erhu-like bowed string, and dizi-like flute.
6-you set volume or gain at 100% for sounds to be hearable on button press.
7-you do not do any errors in code.
8-you wrap full non-example code in one code block in this chat.

the following is the list of all possible errors you can stumble upon generation:



```


1-This page is in Quirks Mode. Page layout may be impacted. For Standards Mode use “<!DOCTYPE html>”.
2-Cookie “” has been rejected as third-party. (Tone.min.js related)
3-An AudioContext was prevented from starting automatically. It must be created or resumed after a user gesture on the page.
4-The AudioContext is "suspended". Invoke Tone.start() from a user action to start the audio.
5-Uncaught Error: A value with the given key could not be found. (Tone.js connection/chain errors)
6-TypeError: Tone.Pulse is not a constructor.
7-Uncaught Error: Invalid argument(s) to setValueAtTime: "sine", 0.
8-Uncaught (in promise) TypeError: (new Tone.AmplitudeEnvelope(...)).start is not a function.
9-Uncaught (in promise) TypeError: filter2.volume is undefined.
This page is in Quirks Mode. Page layout may be impacted. For Standards Mode use “<!DOCTYPE html>”. c11e44d3-ec47-446e-8bc2-9751fca42ed8
Cookie “” has been rejected as third-party. Tone.min.js
 * Tone.js v14.7.77 * Tone.min.js:25:8485
An AudioContext was prevented from starting automatically. It must be created or resumed after a user gesture on the page. Tone.min.js:5:95478
An AudioContext was prevented from starting automatically. It must be created or resumed after a user gesture on the page. Tone.min.js:5:19770
An AudioContext was prevented from starting automatically. It must be created or resumed after a user gesture on the page. 9 Tone.min.js:5:65173
An AudioContext was prevented from starting automatically. It must be created or resumed after a user gesture on the page. Tone.min.js:5:54028
Uncaught (in promise) Error: Start time must be strictly greater than previous start time




sound was unhearable mainly because of how the vibrato (LFO) was connected and started:

    Vibrato connected directly to oscillator frequency: Connecting the vibrato LFO to the frequency property modulates the frequency around the base pitch, but since the vibrato swung ±3 Hz (or ±3 units), it sometimes caused the oscillator frequency to approach zero or negative values briefly. This can cause the oscillator to sound very low or effectively silent at those moments, making the sound very weak or inaudible.

    Vibrato not started before oscillator start: The vibrato LFO must be running before the oscillators start so that frequency modulation occurs smoothly. If the oscillators start before the vibrato is running, the modulation might not be properly applied or synchronized, resulting in a weak or no output.

    Amplitude envelope and gain: The amplitude envelope was connected after the filter but without an explicit gain node set to a sufficient level. The output volume remained too low to be heard clearly, especially compared to other synths that had explicit gain amplification to 1.0 or 1.5.

How it was fixed:

    The vibrato was connected to the detune parameter instead of frequency — detune uses cents and doesn't risk hitting zero or negative oscillation frequency. This ensures vibrato only makes subtle pitch variations without silencing the sound.

    Started the vibrato before the oscillators begin to guarantee modulation is active immediately.

    Added a dedicated Gain node after the amplitude envelope with the volume boosted to about 1.5 times original, ensuring the synth's output is loud enough to hear.

    Also, reduced the filter Q slightly to broaden resonance, helping the sound become clearer and stronger.



```




somehow functioning code but sounds can be improved to original chinese-authentically-original playback in concept and algorithm further:




```


<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>OrchestraMundo Chinese Synth</title>
<style>
  button{margin:5px; padding:5px 10px; user-select:none;}
</style>
</head>
<body>
<button id="guzheng">Guzheng Pluck</button>
<button id="erhu">Erhu Bow</button>
<button id="dizi">Dizi Flute</button>

<script src="https://cdn.jsdelivr.net/npm/tone@14.7.77/build/Tone.min.js"></script>
<script>
(() => {
  const ensureAudio = async () => {
    if (Tone.context.state !== "running") await Tone.start();
  };

  function GuzhengPluck(freq) {
    const osc = new Tone.Oscillator({
      frequency: freq,
      type: "triangle"
    });
    const ampEnv = new Tone.AmplitudeEnvelope({
      attack: 0.005,
      decay: 0.15,
      sustain: 0,
      release: 0.2
    });
    const filter = new Tone.Filter({
      frequency: freq * 3.5,
      type: "lowpass",
      Q: 5,
      rolloff: -24
    });
    const gain = new Tone.Gain(1).toDestination();
    osc.connect(filter);
    filter.connect(ampEnv);
    ampEnv.connect(gain);
    return {
      triggerAttack: () => {
        const now = Tone.now();
        if (osc.state !== "started") osc.start(now);
        ampEnv.triggerAttack(now);
      },
      triggerRelease: () => {
        const now = Tone.now();
        ampEnv.triggerRelease(now);
        setTimeout(() => {
          if (osc.state !== "stopped") osc.stop();
        }, 300);
      }
    };
  }

  function ErhuBow(freq) {
    const oscA = new Tone.Oscillator(freq, "sawtooth");
    const oscB = new Tone.Oscillator(freq * 1.994, "sawtooth");
    const vibrato = new Tone.LFO({
      frequency: 5.5,
      min: -4,
      max: 4
    });
    vibrato.start();
    vibrato.connect(oscA.detune);
    vibrato.connect(oscB.detune);
    const filter = new Tone.Filter({
      frequency: freq * 2.45,
      type: "bandpass",
      Q: 6
    });
    const ampEnv = new Tone.AmplitudeEnvelope({
      attack: 0.6,
      decay: 0.2,
      sustain: 0.8,
      release: 1.0
    });
    const gain = new Tone.Gain(1.5).toDestination();

    oscA.connect(filter);
    oscB.connect(filter);
    filter.connect(ampEnv);
    ampEnv.connect(gain);
    return {
      triggerAttack: () => {
        const now = Tone.now();
        if (oscA.state !== "started") oscA.start(now);
        if (oscB.state !== "started") oscB.start(now);
        ampEnv.triggerAttack(now);
      },
      triggerRelease: () => {
        const now = Tone.now();
        ampEnv.triggerRelease(now);
        setTimeout(() => {
          if (oscA.state !== "stopped") oscA.stop();
          if (oscB.state !== "stopped") oscB.stop();
          vibrato.stop();
        }, 1200);
      }
    };
  }

  function DiziFlute(freq) {
    const osc = new Tone.Oscillator(freq, "triangle");
    const noise = new Tone.Noise("brown");
    const noiseEnv = new Tone.AmplitudeEnvelope({
      attack: 0.01,
      decay: 0.15,
      sustain: 0.2,
      release: 0.2
    });
    const noiseHPF = new Tone.Filter(700, "highpass");
    const noiseBPF = new Tone.Filter(2400, "bandpass");
    const noiseGain = new Tone.Gain(0.12);
    noise.connect(noiseHPF);
    noiseHPF.connect(noiseBPF);
    noiseBPF.connect(noiseGain);
    noiseGain.connect(noiseEnv);

    const vibrato = new Tone.LFO(6, -5, 5);
    vibrato.start();
    vibrato.connect(osc.detune);

    const toneEnv = new Tone.AmplitudeEnvelope({
      attack: 0.08,
      decay: 0.1,
      sustain: 0.75,
      release: 0.25
    });
    const toneGain = new Tone.Gain(1.25);

    osc.connect(toneEnv);
    toneEnv.connect(toneGain);

    const chorus = new Tone.Chorus(1.5, 2.5, 0.3);
    chorus.start();
    toneGain.connect(chorus);
    chorus.toDestination();

    noiseEnv.toDestination();

    return {
      triggerAttack: () => {
        const now = Tone.now();
        if (osc.state !== "started") osc.start(now);
        if (noise.state !== "started") noise.start(now);
        toneEnv.triggerAttack(now);
        noiseEnv.triggerAttack(now);
      },
      triggerRelease: () => {
        const now = Tone.now();
        toneEnv.triggerRelease(now);
        noiseEnv.triggerRelease(now);
        setTimeout(() => {
          if (osc.state !== "stopped") osc.stop();
          if (noise.state !== "stopped") noise.stop();
          vibrato.stop();
          chorus.stop();
        }, 400);
      }
    };
  }

  const freqMap = {
    guzheng: 220,
    erhu: 220,
    dizi: 440
  };

  const synths = {
    guzheng: null,
    erhu: null,
    dizi: null
  };

  window.anySynthPlaying = false;

  const onPress = async (id) => {
    await ensureAudio();
    if (synths[id]) return;
    window.anySynthPlaying = true;
    let synth;
    if (id === "guzheng") synth = GuzhengPluck(freqMap.guzheng);
    else if (id === "erhu") synth = ErhuBow(freqMap.erhu);
    else if (id === "dizi") synth = DiziFlute(freqMap.dizi);
    synths[id] = synth;
    synth.triggerAttack();
  };

  const onRelease = (id) => {
    if (!synths[id]) return;
    synths[id].triggerRelease();
    synths[id] = null;
    if (!Object.values(synths).some(s => s !== null)) {
      window.anySynthPlaying = false;
    }
  };

  const setupButton = (id) => {
    const btn = document.getElementById(id);
    btn.addEventListener("pointerdown", e => {
      e.preventDefault();
      onPress(id);
    });
    btn.addEventListener("pointerup", e => {
      e.preventDefault();
      onRelease(id);
    });
    btn.addEventListener("pointerleave", e => {
      e.preventDefault();
      onRelease(id);
    });
    btn.addEventListener("pointercancel", e => {
      e.preventDefault();
      onRelease(id);
    });
  };

  setupButton("guzheng");
  setupButton("erhu");
  setupButton("dizi");
})();
</script>
</body>
</html>



```





OrchestraMundo Chinese Synth Sound Algorithms - Detailed Schematics

1) Guzheng-like Pluck
----------------------
Goal: Emulate the bright, crisp plucking sound with a fast transient and natural harmonic decay.

- Oscillator: Single "triangle" wave oscillator at fundamental freq.
  * Triangle chosen for soft, natural pluck timbre (no harsh rich harmonics like saw)
- Filter: Lowpass filter tuned ~3.5× fundamental freq with moderate Q (5)
  * Simulates string harmonic content rolloff, smooths timbre, adds slight resonance/glow.
- Amplitude Envelope: Fast attack (~5ms), short decay (~150ms), no sustain, moderate release (200ms)
  * Models the quick pluck transient and rapid decay of vibration.
- Gain: Unity gain to ensure audible volume.
- Signal Chain: Oscillator → Filter → Amplitude Envelope → Gain → Destination

Behavior:
- On Press: Oscillator starts, envelope triggers attack -> decay quickly.
- On Release: Envelope triggers release, oscillator stops shortly after envelope finishes.

Tone.js Extensions:
- Use Oscillator with "triangle" waveform.
- Tone.Filter with lowpass mode and Q for resonance.
- Tone.AmplitudeEnvelope controlling gain dynamically.


2) Erhu-like Bowed String
--------------------------
Goal: Simulate smooth sustained bowed string sound with subtle vibrato and dual-oscillator richness.

- Oscillators: Two detuned "sawtooth" oscillators (~0 and +3 cents detuning)
  * Sawtooth to capture rich upper harmonics of bowed strings.
  * Slight detuning to create chorus-like beating for natural richness.
- Vibrato: A slow (~5.5 Hz) LFO modulating oscillator detune ±4 cents (not frequency)
  * Detune modulation avoids negative frequencies and keeps vibrato natural and subtle.
- Filter: Bandpass filter centered about 2.45× fundamental freq with moderate Q (6)
  * Emphasizes the body resonance, mimics the filtering effect of instrument body and bow.
- Amplitude Envelope: Slow attack (600ms), moderate decay (200ms), sustain (80%), long release (1s)
  * Models bowing onset and steady sustain with a smooth release at note end.
- Gain: Boost gain (~1.5) to ensure clear presence.
- Signal Chain: (Osc A + Osc B) → Bandpass Filter → Amplitude Envelope → Gain → Destination

Behavior:
- On Press: Start oscillators simultaneously, start vibrato LFO, trigger envelope attack.
- On Release: Trigger envelope release, stop oscillators and vibrato after release phase.

Tone.js Extensions:
- Use two Oscillators with sawtooth wave.
- LFO connected to detune param of both oscillators.
- Bandpass Filter with adjustable Q.
- AmplitudeEnvelope for smooth bowing dynamics.


3) Dizi-like Flute
-------------------
Goal: Capture the airy, breathy, slightly buzzy tone of bamboo flute with "dimo" membrane effect.

- Oscillator: Single "triangle" wave at fundamental freq for soft flute tone.
- Noise Source: Brown noise filtered and shaped into a subtle breathy and membrane buzz.
   * Noise path: Brown noise → Highpass filter (~700 Hz) to remove low rumble → Bandpass filter (~2400 Hz) to emphasize dimo buzz frequency region.
- Noise Envelope: Fast attack (10 ms), decay (150 ms), low sustain (20%), release (200 ms)
   * Models the transient breathiness and sustaining buzz.
- Vibrato: Moderate LFO (~6 Hz) modulating oscillator detune ±5 cents for natural pitch modulation.
- Amplitude Envelope: Moderate attack (80 ms), quick decay (100 ms), high sustain (75%), medium release (250 ms)
   * Smooth flute note onset with controlled sustain and release.
- Chorus Effect: Subtle chorus (rate ~1.5 Hz, depth 0.3) on tone path to simulate slight spatial movement and shimmer.
- Gain: Main tone gain (~1.25), noise gain (~0.12) — noise low volume to avoid harshness.
- Signal Chain:
    - Tone path: Oscillator → Amplitude Envelope → Gain → Chorus → Destination
    - Noise path: Noise → HPF → BPF → Gain → Noise Envelope → Destination

Behavior:
- On Press: Start oscillator and noise sources, trigger both envelopes, start chorus and vibrato.
- On Release: Trigger envelopes release, stop oscillator, noise, vibrato, chorus shortly after.

Tone.js Extensions:
- Oscillator with triangle waveform.
- Noise generator (brown noise).
- Multiple filter stages to shape noise spectra.
- Separate amplitude envelopes for tone and noise.
- LFO modulating detune parameter.
- Chorus for spatial shimmer.

-----------------------------------------------------------------------------------

Summary:
- Guzheng uses a pluck-style fast envelope with filtered triangle osc to mimic string pluck.
- Erhu uses dual sawtooths with vibrato on detune, bandpass filtering and slow bowing envelope.
- Dizi uses triangle + filtered brown noise with separate envelopes and vibrato + chorus for breathy flute with membrane buzz effect.

Implementation Notes:
- LFO vibratos always modulate detune to prevent zero or negative frequencies.
- Oscillators and LFOs are started before envelopes to ensure immediate modulation.
- Explicit gain nodes used for clear volume control at 100% or above audible level.
- Amplitude envelopes shaped carefully to mimic attack, sustain, and release characteristics of each instrument.
- Noise component added only for Dizi to simulate breath and membrane buzz.