Advertisement
UI & Interface Sounds

How to Create Dialogue Blip Sounds for TyranoBuilder Games

A practical guide to dialogue blips in TyranoBuilder, comparing the macro workaround, the popopo plugin, and the mtext typewriter approach, with the specific tag syntax, plugin parameters, and audio format rules that determine whether the blips sound right or break on export.

TyranoBuilder does not ship with a dialogue blip feature that works the way most visual novel developers expect. The engine plays sound effects through the play_se tag, and that tag plays a file once. A blip needs to play repeatedly, at the rhythm of the text reveal, and the engine does not have a built-in mechanism for “play this sound every time a character appears.”

The workaround that the community has used for years is a macro that combines playse with loop=true, inserted before the dialogue line and stopped after it. The problem with the macro is that it does not stop at punctuation, it does not vary between characters without manual configuration, and it can break the text speed if the macro introduces a wait. The popopo plugin solves those problems by synthesizing the blip internally rather than playing a file, and the [mtext] tag with in_delay provides a third path for projects that want the typewriter effect without a plugin.

This article compares the three approaches, with the specific tag syntax, plugin parameters, and audio format rules that determine whether the blips sound right or break on export. The generic typewriter blip guide covers the design principles; this article is about making them work in TyranoBuilder.

What does the macro-based approach actually do, and why does it need a silent file?

The macro approach uses two macros: one that starts a looping sound effect, and one that replaces it with a silent file. The reason for the silent file is that playse has no “stop” parameter that works without a target. The only way to stop a looping SE in TyranoBuilder is to play another SE that replaces it, and the replacement has to be a file that produces no audible output.

[macro name="type"]
[playse storage="triangle.ogg" loop=true]
[endmacro]

[macro name="stop"]
[playse storage="silence.ogg" clear=true]
[endmacro]

The clear=true parameter is the part that stops the previous sound before playing the silence. Without it, the looping blip continues underneath the silent file, and the stop macro does nothing. The silence.ogg file is a requirement, not a convenience; a project that does not create one will find that the stop macro either does nothing or produces an error.

The macro is inserted before the dialogue line, and the stop macro is inserted after the line. The RPG Maker plugin workflow covers a similar pattern for a different engine; the TyranoBuilder version is more manual because the engine does not provide an event that fires per character.

The macro approach has three specific failure modes.

The text speed halves. A macro that contains a [wait] tag, which is required if the macro is inserted between every letter, adds the wait time to the text reveal. A 200-millisecond wait between letters makes the text reveal twice as slow as the configured speed, and the player notices immediately.

The blip continues through punctuation. A looping SE does not know when the text pauses. A comma, a period, or an ellipsis does not stop the loop, which means the blip plays during a moment when no text is being revealed. The player hears a continuous tone rather than a voice rhythm.

The blip does not vary between characters. The macro plays one file. A project with multiple speaking characters needs a different macro for each character, and the macros have to be inserted manually in every dialogue line. The visual novel blip guide covers why per-character variation matters; the macro approach makes it tedious to implement.

What does the popopo plugin do differently, and what are its parameters?

The popopo plugin is an external plugin for TyranoScript that synthesizes the blip internally rather than playing a file. It was created by Ogihara and is released under the MIT license. The plugin generates a short popping sound using a built-in oscillator, which means it does not need a triangle.ogg or a silence.ogg, and it does not have the stop-file problem that the macro approach has.

The plugin is installed by unzipping the popopo folder into data/others/plugin/ and adding [plugin name="popopo"] to first.ks. Once installed, the [popopo] tag configures the blip for the rest of the message. The tag accepts a small set of parameters that cover the sound design decisions.

Parameter Values Effect
type sine / square / sawtooth / triangle / noise / file / none The waveform, or a file to play
volume 0 to 100, or “default” Loudness of the blip
time milliseconds, default 20 Length of the generated sound
tailtime milliseconds, default 30 Fade-out time
frequency A, A+, B, C, D, E, F, G (with + for sharp) The pitch of the blip
chara character name Restricts the blip to that character’s lines

The chara parameter is the feature that makes the plugin worth using over the macro. It binds the blip configuration to a character name, which means the character’s dialogue automatically uses that character’s blip without any manual insertion. A project with five speaking characters can have five different blip pitches by calling [popopo] with a different frequency and chara value at the start of each character’s first line.

The time parameter is the one that determines the blip rate. The default of 20 milliseconds is short enough that the blips do not overlap even at a fast text speed, but it is also short enough that the pitch is barely resolved. A time of 30 to 40 milliseconds produces a blip that is more audible as a pitch, which is usually the right choice for a character voice. The blip synthesis guide covers the relationship between duration and perceived pitch; the time parameter is the TyranoBuilder implementation of that relationship.

The tailtime parameter is the fade-out. A tail time of 30 milliseconds means the blip decays over 30 milliseconds after the time has elapsed, which produces a smoother sound than a hard cutoff. A tailtime of 0 produces a click at the end of every blip, which the player hears as a stutter.

The plugin’s known behavior is that [popopo type="none"] stops the blip, but it does not stop a blip that was bound to a character via chara. The documentation states that the character-bound blips need a separate [popopo type="none" chara="name"] to stop. This is the same class of problem as the macro’s punctuation issue; the engine does not have a single “stop all blips” command that covers every binding.

TyranoBuilder V3.00 added a ポポポ音 component to the message system, which means the plugin’s functionality is now partly built into the engine. The component is added by dragging it onto the timeline, and it uses the same synthesis parameters as the plugin. A project that is already on V3.00 may not need the external plugin, but a project on an earlier version does.

How does the mtext approach compare to the other two?

The [mtext] tag is a TyranoScript tag that displays text with a typewriter effect and supports an in_delay parameter. The in_delay controls the delay between characters, which means the tag can produce a typewriter reveal without a separate [delay] tag or a plugin. A developer who is already using [mtext] for the reveal can add the blip logic on top of it by inserting a [playse] or a [popopo] call at the same point in the script.

The comparison is not about which tag is better. It is about which tag the project is already using. A project that uses the standard message window needs the macro or the plugin. A project that uses [mtext] for the reveal has a third option: insert the blip trigger between the [mtext] lines, using the same macro pattern that the standard approach uses.

Approach Per-character variation Stop behavior Plugin required
Macro + loop Manual, per-macro Silent file replacement No
popopo plugin Built-in via chara type="none", per character Yes
mtext + insert Manual, same as macro Same as macro No

The popopo plugin is the only approach that has a built-in per-character binding, and it is the only approach that does not require a silent file. The macro and mtext approaches are viable for a project with a single speaking character, but they do not scale to a cast without manual work per character.

Why do the blips break on export, and how do you prevent it?

The most common export failure is an audio format mismatch. TyranoBuilder’s desktop and browser exports support OGG for sound effects, but the Android and iOS exports require M4A or MP3. An OGG file that plays in the editor and in a Windows build will be silent on Android, because the Android export does not support OGG.

Target Supported audio Unsupported
Desktop / Browser OGG (default), MP3 (V2.0+) —
Android M4A, MP3 OGG
iOS M4A, MP3 OGG

The fix is to prepare two sets of audio files: OGG for the desktop build and M4A or MP3 for the mobile builds. TyranoBuilder does not convert the files automatically, so the developer has to either maintain two asset folders or use a build script that swaps the files before each export.

The second export failure is a filename issue. The Android export documentation states explicitly that filenames must not contain Japanese characters. A blip file named ポポポ.ogg will play in the editor and fail on Android. The fix is to use ASCII filenames for every audio asset, even when the rest of the project is in Japanese.

The third export failure is a missing file. The macro approach depends on a silence.ogg file that the developer has to create manually. A project that copies the macro from a tutorial but does not copy the silent file will produce an error when the stop macro runs. The popopo plugin does not have this problem because it does not need a stop file.

How should the blip itself be designed for TyranoBuilder?

The blip design is the same as for any visual novel: short duration, mid-range frequency, and a waveform that does not fatigue over long sessions. The Web Audio blip tutorial and the visual novel blip guide cover the perceptual ranges; the TyranoBuilder-specific part is the loop behavior.

A looping blip is not the same as a per-character blip. The loop plays continuously for the duration of the dialogue line, which means the effective blip rate is determined by the file’s length, not by the character rate. A 50-millisecond blip file loops 20 times per second; a 100-millisecond file loops 10 times per second. The popopo plugin uses the time parameter to control the loop length, which means the developer can tune the rate without changing the text speed.

The frequency range that works for TyranoBuilder dialogue is the same as for Ren’Py or RPG Maker: 800 to 1400 Hz, with the lower end for serious characters and the higher end for energetic ones. The Ren’Py blip guide covers the per-character frequency separation in more detail; the same logic applies to a TyranoBuilder cast.

The blip generator produces WAV files that can be converted to OGG or MP3 for the TyranoBuilder project. The generated files are free to use, which removes the licensing question that comes with a downloaded blip pack. A project that needs a different blip for each character can generate them from the same tool with different frequency and duration settings, then convert the set to the formats the export targets require.

Dialogue blips in TyranoBuilder are not a built-in feature, and the three approaches each solve a different part of the problem. The macro is free but manual. The popopo plugin is the cleanest option for a project on an older version, and the V3.00 message component is the cleanest option for a project that has updated. The export format rules are the part that most projects discover too late, and the OGG-versus-M4A distinction is the one that produces a silent build on mobile. A project that prepares both formats before the first export avoids the problem entirely.

Generate a Blip Set for TyranoBuilder

Open the SfxMaker blip generator and create the blip files for each speaking character, using the 800–1400 Hz range and a duration that matches the loop rate you want. Export the files as WAV, convert them to OGG for the desktop build and M4A or MP3 for the mobile builds, and use ASCII filenames for every asset so the Android export does not fail.

Open Blip Sound Generator →
Advertisement