A voice blip with no pitch movement sounds like a test tone. A voice blip with random pitch movement sounds like a bug. The difference between a blip that feels like a character speaking and one that feels like a sound system malfunctioning is not the amount of pitch movement. It is whether the movement has a shape the listener can read as intentional.
The ear is extremely good at detecting the difference between structured variation and unstructured variation. A structured variation has a direction, a rate, and a target. An unstructured variation has none of those, and the ear reads it as instability rather than as expression. This is the same principle that the randomized blip variation guide covers at the level of the whole set; this article is about the pitch envelope within a single blip.
The pitch envelope is the curve that the pitch follows over the duration of the blip. A 40-millisecond blip has time for a single shape, not a melody. The shape is either an upward movement, a downward movement, a stable pitch with no movement, or a curve that bends in a specific direction. Each shape signals a different intent, and the specific curve type within each shape determines whether the intent reads clearly or gets muddied.
Why does random pitch movement read as a bug?
The perceptual system treats pitch movement as a meaningful signal only when the movement follows a predictable path. A pitch that rises smoothly from 1000 Hz to 1200 Hz over 40 milliseconds is read as "the voice is going up," which the listener interprets as a rise in energy, a question, or a reward. A pitch that moves randomly within a range has no path, and the listener cannot extract any meaning from it.
This is why the standard advice to "add ±3 percent pitch variation" produces a worse result than it should. The advice is correct for variation between playbacks, where the listener is comparing one blip to the next and the variation prevents repetition. It is wrong within a single blip, where the listener is trying to read the blip's intent and the random movement obscures it.
| Pitch behavior | Listener reads as | When it works |
|---|---|---|
| Stable pitch | Neutral, calm | Narration, system messages |
| Linear rise | Increasing energy, question | Excitement, pickup, reward |
| Linear fall | Decreasing energy, statement | Conclusion, dismissal, calm |
| Random movement | Malfunction, instability | Intentional glitch effects only |
The random movement is not always wrong. A corrupted AI character, a glitching system, or a horror effect can use random pitch as a deliberate signal. The problem is that most blips are not trying to sound like a malfunction, and the random movement reads as a malfunction even when the designer did not intend it.
The fix is not to remove variation from the blip. It is to move the variation to the right parameter. Pitch variation between playbacks is good. Pitch variation within a playback should follow a shape, and the shape should be chosen deliberately.
What are the four pitch envelope shapes, and what does each one signal?
A pitch envelope is defined by four parameters: the starting pitch, the ending pitch, the duration, and the curve type. The first three are the ones most designers work with. The curve type — linear, exponential, or logarithmic — is the one that determines whether the movement reads as natural or as mechanical.
| Shape | Curve type | Signal | Typical use |
|---|---|---|---|
| Rising | Exponential (fast start) | Excitement, reward | Pickups, confirmations |
| Rising | Linear | Neutral increase | Questions, transitions |
| Falling | Exponential (fast start) | Urgency, energy discharge | Attacks, warnings |
| Falling | Linear | Calm conclusion | Dismissals, endings |
| Arched | Rise then fall | Expressive, playful | Comedic dialogue, surprise |
The curve type is the parameter that most designers ignore, and it is the one that makes the difference between a blip that sounds like a robot and a blip that sounds like a character. A rising pitch with an exponential curve moves quickly at the start and slows at the end, which mirrors the way a voice rises when the speaker is excited. A rising pitch with a linear curve moves at a constant rate, which reads as mechanical.
The arched shape is the one that produces the most character, and the one that is easiest to overdo. A pitch that rises for the first half of the blip and falls for the second half reads as expressive, playful, or surprised. A pitch that rises and falls too slowly reads as a musical slide rather than as a voice blip. The arch needs to complete within the blip's duration, which for a 40 to 60 millisecond blip means the rise and the fall are each 20 to 30 milliseconds.
The square-wave blip synthesis guide covers the basic pitch envelope implementation; the shapes described here are the specific ones that produce intentional-sounding character voices.
How do you choose the pitch range for a voice blip's envelope?
The pitch range is the difference between the starting frequency and the ending frequency. A range that is too small produces a blip that sounds static. A range that is too large produces a blip that sounds like a slide effect rather than a voice.
| Range (semitones) | Character | Use |
|---|---|---|
| 0–1 | Nearly static | Narration, calm characters |
| 2–4 | Subtle movement | Neutral dialogue, system messages |
| 5–8 | Clear movement | Expressive characters, pickups |
| 9–12 | Strong movement | Excited characters, rewards |
| 13+ | Slide effect | Lasers, sirens, not voice blips |
For most voice blips, the range that works is 2 to 5 semitones. A 3-semitone rise on a 1000 Hz blip moves the pitch from 1000 to about 1189 Hz, which is a noticeable but not dramatic movement. A 6-semitone rise moves from 1000 to about 1414 Hz, which starts to sound like a slide rather than a spoken syllable.
The absolute pitch of the blip also matters. A 3-semitone rise on a 600 Hz blip moves from 600 to about 713 Hz, which is a small absolute change but a large relative change. A 3-semitone rise on a 1200 Hz blip moves from 1200 to about 1427 Hz, which is a larger absolute change. The relative change is what the ear perceives, which is why the range is specified in semitones rather than in Hz.
The direction of the pitch envelope should match the character's intent. A character who is excited should rise. A character who is calm should fall or stay stable. A character who is questioning should rise. A character who is concluding should fall. The friendly/hostile tone design guide covers the emotional mapping of the pitch direction; the envelope shapes in this article are the specific curves that make each direction read as intentional.
How do you implement a shaped pitch envelope in the Web Audio API?
The Web Audio API provides three methods for shaping an
AudioParam: setValueAtTime,
linearRampToValueAtTime, and
exponentialRampToValueAtTime. The linear and
exponential ramps correspond to the linear and
exponential curve types described earlier. The arched
shape requires two ramps in sequence.
function playShapedBlip({
startFreq = 1000,
endFreq = 1189,
duration = 0.05,
curve = 'exponential', // 'linear' | 'exponential' | 'arch'
volume = 0.6
} = {}) {
const ctx = getAudioContext();
const now = ctx.currentTime;
const osc = ctx.createOscillator();
const gain = ctx.createGain();
osc.type = 'triangle';
if (curve === 'arch') {
// Rise for the first half, fall for the second
const midFreq = endFreq;
const midTime = now + duration * 0.5;
osc.frequency.setValueAtTime(startFreq, now);
osc.frequency.exponentialRampToValueAtTime(midFreq, midTime);
osc.frequency.exponentialRampToValueAtTime(
startFreq, now + duration
);
} else if (curve === 'exponential') {
osc.frequency.setValueAtTime(startFreq, now);
osc.frequency.exponentialRampToValueAtTime(
endFreq, now + duration
);
} else {
osc.frequency.setValueAtTime(startFreq, now);
osc.frequency.linearRampToValueAtTime(
endFreq, now + duration
);
}
gain.gain.setValueAtTime(0, now);
gain.gain.linearRampToValueAtTime(volume, now + 0.002);
gain.gain.exponentialRampToValueAtTime(0.001, now + duration);
osc.connect(gain);
gain.connect(ctx.destination);
osc.start(now);
osc.stop(now + duration + 0.01);
}
The exponential ramp is the curve type that produces the most natural-sounding movement, because it mirrors the way physical systems change pitch. A linear ramp is mechanical by comparison, and it works for system messages and neutral feedback but not for expressive character voices.
The exponential ramp cannot target 0 Hz, which is why the starting and ending frequencies must both be positive. A ramp from 1000 Hz to 1189 Hz works; a ramp from 1000 Hz to 0 Hz does not. The Web Audio blip tutorial covers the constraint in the context of the basic blip; the same constraint applies to the pitch envelope.
The arched shape is the one that requires the most care. The two ramps must be scheduled at the correct times, and the mid-frequency must be the peak of the arch. A common mistake is to use the ending frequency as the start of the second ramp, which produces a shape that rises and then falls back to the starting point rather than an arch. The correct pattern is to ramp up to the peak at the midpoint, then ramp back down to the starting frequency.
How do you match the pitch envelope to the character's personality?
A character's personality is communicated through the consistency of their pitch envelopes across the dialogue. An energetic character has envelopes that rise more often than they fall, with faster curves. A calm character has envelopes that are stable or fall slowly. A nervous character has envelopes that change direction frequently, which the listener reads as instability.
| Personality | Envelope pattern | Range | Curve |
|---|---|---|---|
| Energetic | Mostly rising | 4–6 semitones | Exponential (fast) |
| Calm | Mostly stable or falling | 1–3 semitones | Linear or gentle exponential |
| Nervous | Mixed direction | 3–5 semitones | Exponential with irregular timing |
| Authoritative | Falling, slow | 2–4 semitones | Linear, deliberate |
| Playful | Arched | 5–8 semitones | Exponential arch |
The key to matching the envelope to the personality is consistency. A character who sometimes rises and sometimes falls without a pattern reads as unstable rather than as expressive. A character who rises on excited lines, falls on calm lines, and stays stable on neutral lines reads as a coherent personality, because the pattern itself is the signal.
The visual novel blip guide covers the per-character separation in more detail. The pitch envelope is one of the dimensions that separates characters, and it is the one that is most closely tied to personality rather than to pitch range or waveform.
The amount of variation within a character's envelopes should be small. A character who uses a 4-semitone rise on every excited line but a 3-semitone rise on some lines and a 5-semitone rise on others is still recognizably the same character. A character who varies from 1 semitone to 10 semitones across different lines is not recognizably the same character, because the variation is larger than the personality signal.
What does an intentional pitch envelope sound like in context?
The test for an intentional pitch envelope is not whether it is technically well-formed. It is whether the listener reads the blip as expressive rather than as mechanical, and whether the specific expression matches the scene.
The first test is the isolation test. Play the blip by itself and ask whether it sounds like a single expressive event or like a test tone. A blip with a well-shaped envelope sounds like it is doing something; a blip with a flat or random envelope sounds like it is just existing.
The second test is the context test. Play the blip in a dialogue line and ask whether the movement matches the line's meaning. A rise on a line that is supposed to be sad is a mismatch. A fall on a line that is supposed to be excited is a mismatch. The envelope has to agree with the text, and the text has to agree with the character.
The third test is the sequence test. Play a sequence of several blips from the same character and ask whether the envelopes form a recognizable pattern. A character whose envelopes always rise is a character whose voice has a consistent upward energy. A character whose envelopes alternate randomly is a character whose voice has no consistent direction, which the listener reads as a bug rather than as a personality.
The fourth test is the fatigue test. Play a character's dialogue for thirty seconds and ask whether the pitch movement becomes tiring. A strong envelope on every blip is fatiguing, because the listener is being asked to read a new movement on every character. The strongest envelopes should be reserved for the lines that matter; the rest should use subtle movement.
The pitch envelope is the parameter that determines whether a voice blip sounds like a character or like a sound effect. The specific shapes and curve types in this article are the ones that produce intentional-sounding movement, and the range and pattern that a character uses are the ones that communicate their personality. The FM synthesis guide covers the spectral side of the same problem; the pitch envelope is the temporal side.
Generate Reference Blips for Each Envelope Shape
Open the SfxMaker blip generator and create four blips that demonstrate the four envelope shapes: a stable pitch, a rising pitch, a falling pitch, and an arched pitch. Use the same base frequency for all four, and adjust only the pitch movement. The four blips are the reference for the curves described in this article.
Open Blip Sound Generator →