RPG Maker already contains the mechanism that voice blips need. The message window reveals text one character at a time, and every time a character appears, the engine runs a function that a plugin can hook into. The plugin plays a sound in that function. The developer does not need to write a custom dialogue system, and does not need to replace the message window. The entire integration is a plugin that subscribes to an event the engine already fires.
This is different from the approach in the generic typewriter blip guide, which assumes the developer controls the reveal loop. RPG Maker owns the loop. The plugin is what connects the blip sound to the loop, and the configuration is what determines whether the blips sound like a voice or like a malfunctioning printer.
This article covers four plugins that work for MV and MZ: the built-in MZ plugin that costs nothing, KC_TextSounds (MIT license, face-based configuration), MPP_MessageSE (MIT license, control-code-driven), and the paid options for projects that need more than simple blips. The blip design itself is covered in the square-wave synthesis guide and the RPG frequency guide.
Which RPG Maker version needs which plugin, and what are the tradeoffs?
RPG Maker MZ ships with a plugin called
PlayMsgWndCharSeMZ.js in the
dlc/BasicResources/plugins folder of the
installation. It is described as a “quasi-official”
plugin, authored by Sasuke Kannazuki, and it is released
under the MIT license . It plays a sound
effect on each character of the message window, with
configurable SE files, volume, pitch, and a character
interval.
RPG Maker MV does not ship with an equivalent built-in plugin. MV users need a third-party plugin, and the three that are most commonly recommended are KC_TextSounds, MPP_MessageSE, and Synrec's Text Sounds.
| Plugin | MV | MZ | License | Face-based |
|---|---|---|---|---|
| PlayMsgWndCharSeMZ | No | Built-in | MIT | No |
| KC_TextSounds | Yes | Yes | MIT | Yes |
| MPP_MessageSE | Yes | Yes | MIT | No |
| Synrec Text Sounds | No | Yes | Free | No |
| Hakuen Message Sounds | No | Yes | Paid | Yes |
The built-in MZ plugin is the correct starting point for an MZ project that only needs a single blip set for the whole game. It requires no download, it is already in the installation, and it works with the standard message window. The limitation is that it does not support per-character voices, which means every speaking character plays the same blip. A project that needs each character to have a different voice needs a different plugin.
KC_TextSounds is the correct choice for a project that needs per-character voices, because it is the only free plugin in the list that supports face-based configuration . The plugin reads the face image assigned to the message and plays the blip set associated with that face. A project with eight speaking characters can have eight different blip sets without writing any code, because the face image is already the character identifier that the message system uses.
MPP_MessageSE is the correct choice for a project that
prefers control codes over face binding. It uses the
\SE[n] control code to change the blip set
within a message, and a plugin command to change it for
all subsequent messages . The
typewriter blip guide
covers why control-code-driven blips are harder to
maintain across a large project than face-based ones,
but for a small project the direct control is
convenient.
How do you configure the built-in MZ plugin correctly?
The built-in plugin is enabled the same way as any other
plugin: copy PlayMsgWndCharSeMZ.js from the
DLC folder into the project's js/plugins
folder, open the plugin manager, and enable it. The
plugin has five parameters that matter for voice
blips.
| Parameter | Purpose | Recommended starting value |
|---|---|---|
| Map default SE | SE number used on maps (0 = silent) | 1 |
| Battle default SE | SE number used in battle (0 = silent) | 0 |
| Interval | Characters to skip between blips (0 = every character) | 2 |
| SE1 name / volume / pitch | The first blip sound | Cursor1 / 90 / 100 |
| SE2 name / volume / pitch | The second blip sound | Cursor2 / 75 / 125 |
The Interval parameter is the one that
determines the blip density. A value of 2 means the
plugin plays a blip every two characters, which at the
default text speed of 30 characters per second produces
about 15 blips per second. That is at the upper end of
the range that the ear can distinguish as separate
events; a value of 3 produces about 10 blips per second,
which is more comfortable for long dialogue sessions.
The two SE slots are not a variation system. The plugin uses SE1 and SE2 as different sounds for different contexts, not as random variations of the same sound. A developer who wants variation needs to configure the two slots as slightly different pitches of the same sound, or use a plugin that supports random selection. The randomized blip variation guide covers the distribution question; the built-in plugin does not implement it.
How does KC_TextSounds bind a blip set to a character?
KC_TextSounds uses the face image that the message system already displays. Each face image can have a blip configuration associated with it, which means the character's face is the character's voice. A project that changes a character's face to show different emotions will also change the blip if the emotional faces are configured separately, which is either a feature or a complication depending on the design.
The plugin's help section describes the text codes that change the blip parameters within a message box. The codes that matter for voice blips are:
| Text code | Effect |
|---|---|
\SEN[x] |
Use the SE with the name x for the rest of the text box |
\SEF[x] |
Change the frequency of the text sound to x |
\SEV[x] |
Change the volume of the text sound to x |
\SEPA[x] |
Change the pan of the text sound to x |
\SEPI[x,y] |
Set the minimum pitch to x and the maximum to y |
\SEPRE[x] |
Load the parameters of preset x for the rest of the text box |
\SEPLAY[x] |
Immediately play the text sound with preset x |
The \SEPI[x,y] code is the variation
mechanism. A project that wants the blip to vary
slightly between characters can set a minimum and
maximum pitch, and the plugin will randomize within that
range. A range of 95 to 105 produces a variation that is
noticeable but not disruptive; a range of 80 to 120
produces a variation that is more obviously randomized
and more likely to sound inconsistent. The
randomized variation guide
recommends a ±3 to ±5 percent range for short blips;
\SEPI[95,105] is within that recommendation.
The \SEPRE[x] code is the preset system. A
project can define a preset for each character (a
different SE, volume, and pitch range), and the message
can load the preset with a single code. This is cleaner
than setting the individual parameters in every message,
and it is the approach that scales to a project with
many speaking characters.
The known compatibility issue is with VisuStella's Message Log. The plugin's documentation states that KC_TextSounds text code parameters remain in the message log, and there is no known fix . A project that uses VisuStella Message Log and KC_TextSounds together will see the raw text codes in the log, which breaks the log's readability. The workaround is to use VisuStella's own Message Letter Sounds plugin instead, but that plugin is part of a paid bundle.
How does MPP_MessageSE use control codes to change the blip mid-conversation?
MPP_MessageSE uses the \SE[n] control code
to switch the active blip set. The code is placed at the
start of a message, and it applies to the rest of that
message. The n is the index of a
configured character SE, and the plugin's parameters
define what each index sounds like.
The plugin also provides a plugin command,
SetMesCharSe index, which changes the
active blip set for all subsequent messages. The
difference is that the control code is temporary (it
only affects the current message) while the plugin
command is persistent (it affects every message until it
is changed again) . This is the
reverse of what most developers expect from a control
code, and it is worth reading the plugin's help section
carefully before using it in a project.
The Se Interval parameter is the character
skip count, and it works the same way as the interval
parameter in the built-in MZ plugin. The
Stop Se When Skip parameter is a boolean
that stops the blips when the player is holding the
skip key, which is the correct behavior for a dialogue
system. A player who is skipping text does not want to
hear the blips at the skipped speed, because the blips
merge into a continuous buzz. The
typewriter blip guide
covers the skip-mode problem in more detail.
The plugin's Character Ses parameter is a
struct array, which means each entry has a name, volume,
pitch, and pan. The configuration is less convenient
than KC_TextSounds' face-based binding, because the
developer has to remember which index corresponds to
which character, but it is more flexible for a project
that does not use face images or that wants to change
the blip without changing the face.
Why do the blips sometimes not play at all, and how do you fix it?
The most common failure is that the plugin is installed but not configured. The RPG Maker plugin manager requires the developer to double-click the plugin and confirm the parameters; a plugin that is enabled but whose parameters have never been opened may not initialize correctly. The fix is to open the plugin's settings, review every parameter, and click OK, even if the values are already correct . This is a known behavior of the MZ plugin system, not a bug in the specific plugin.
The second most common failure is that the sound file is too long. The message system restarts the blip on every character, and if the sound is longer than the gap between characters, the previous blip is interrupted by the next one. The result is a stuttering, restarting sound rather than a clean blip. The fix is to use a sound that is 30 to 60 milliseconds long, which is shorter than the gap at any reasonable text speed.
The third failure is a plugin conflict. RPG Maker's message system is the center of a lot of customization, and plugins that rewrite the message window's drawing functions can prevent the blip plugin's hook from being called. The known conflict is between KC_TextSounds and VisuStella's Message Log, but other conflicts exist between any text-sound plugin and any plugin that replaces the message window's core functions. The fix is to check the plugin order in the plugin manager: the text-sound plugin should be below the plugins that change the message window, so that it hooks into the final version of the function.
The fourth failure is that the blip plays on spaces. Some plugins do not filter non-alphanumeric characters, and a blip on every space sounds like a stutter. The fix depends on the plugin: the built-in MZ plugin uses the interval parameter to skip characters, but it does not filter spaces specifically. A plugin that supports character filtering is the better choice for a project where the stutter is noticeable.
The fifth failure is that the blip is too loud relative to the voice acting. A project with both voice acting and blips needs to reduce the blip volume when the voice is present, either by using a plugin that supports voice-aware ducking or by disabling the blips entirely on voiced lines. The ducking guide covers the sidechain approach; RPG Maker's default audio system does not include sidechain compression, so the practical approach is a per-line toggle.
How do you create the blip sounds themselves for an RPG Maker project?
RPG Maker imports WAV, OGG, and M4A files into the
project's audio/se folder. The blip sounds
should be short (30 to 60 milliseconds), normalized to a
consistent peak level, and saved as WAV or OGG. The
file size reduction guide
covers the normalization process; for a blip set, the
goal is consistency across the set rather than maximum
compression.
The frequency range that works for RPG Maker dialogue is the same range that works for any dialogue blip: 800 to 1400 Hz, with the lower end for serious or older characters and the higher end for younger or more energetic characters. The visual novel blip guide covers the per-character frequency separation in more detail; the same logic applies to an RPG with a cast of distinct speaking characters.
A project that needs a different blip for each character
can generate them with the SfxMaker blip generator and
assign them in the plugin's configuration. The
generator produces WAV files that drop directly into the
audio/se folder, and the plugin's SE
selection field points to the file by name. The
blip generation guide
covers the parameter ranges for each character type.
The RPG Maker workflow does not require a custom dialogue system, and it does not require code. It requires a plugin that hooks into the message window's existing character-reveal function, and the configuration that tells the plugin which sound to play. The four plugins in this article cover the range from zero-cost to paid, from single-voice to per-character, and from control-code-driven to face-based. The integration is the same pattern in every case: install the plugin, configure the parameters, and test the result in a message that includes punctuation and spaces, because those are the characters that reveal configuration mistakes.
Generate Blips for Each RPG Maker Character
Open the SfxMaker blip generator and create a
separate blip for each speaking character in the
game, using the frequency ranges from the visual
novel guide. Export each as a WAV file, drop them
into the project's audio/se folder, and
assign them in the plugin's face configuration or
character SE list.