Est. 2012
Lab · Gen 1 Cry Synth

Every Pokemon Cry Is Three Numbers

Not a recording, not a sound file, just three bytes: which of 38 base cries to play, how far to push its pitch, and how fast to play it. Pick any of the 151 (or a glitch Pokemon from the Glitchhouse), drag the numbers around, and hear exactly what the game does with them. Push the base past the 38 real cries and the page tells you what the game plays instead.

Type, use the arrow keys, press Enter to play.
PikachuReal cry
base 0x0Fpitch 0xEElength 0x01
0x0F
0xEE
0x01
Sound slot
Tempo
Wrapped notes
Duration
Same base cry

The sound is synthesized live in your browser from the Game Boy's two square-wave channels and its noise channel. This is not a recording.

How does a whole cry fit in three numbers?

Cries, I love them, and the way Red and Blue store them is one of my favorite tricks on the whole cartridge. There are only 38 actual cry recipes in the game, numbered 0x00 to 0x25, and each one is a short script of notes for the two square-wave channels plus the noise channel. Every Pokemon then gets a single three-byte row in a table the pokered disassembly calls CryData. When a cry plays, the game reads that row, loads the base cry's notes, and bends them on the way out. That's it. That is the whole system!

It also means a lot of Pokemon share a sound. Bulbasaur, Ivysaur, Venusaur, Pikachu, Dratini, Dragonair and Dragonite all use base cry 0x0F, and the only things separating them are the other two bytes. Pikachu's cry is literally Venusaur's recipe with the pitch byte at 0xEE and the length byte at 0x01. (Once you hear it, you cannot unhear it.) Load any Pokemon above and the Same base cry row shows its whole sound family.

  1. The base cry picks the notes. It is an index into those 38 recipes, so it decides the melody, the rhythm and the hiss. Two Pokemon with the same base play the same notes in the same order, every single time.
  2. The pitch byte gets added to every note. Each square-wave note has an 11-bit frequency number from 0 to 2047, where bigger means higher. The pitch byte (0 to 255) is added straight onto that number, so 0x00 leaves the cry alone and bigger values push it up. Here is the catch, though: the hardware only keeps 11 bits, so a note pushed past 2047 wraps around to the bottom of the range and comes out as a low buzz instead of a squeak. The piano roll outlines every wrapped note in gold, and 41 of the 151 real Pokemon have at least one. (Pikachu wraps 4 of its 12 notes!)
  3. The length byte sets the tempo. The game adds 0x80 to the length byte and uses the total as the tempo for the two square channels, where 0x100 is normal speed. So a length of 0x80 plays the notes exactly as written, 0x00 plays them twice as fast, and 0xFF stretches them to almost one and a half times as long. The noise channel ignores the length byte completely and always runs at normal speed, which you can see for yourself: drag the Length slider and watch the bottom lane of the piano roll stay put.

Why do glitch cries sound so stretched?

Most glitch Pokemon never got hand-picked bytes. Their index numbers point past the end of CryData (even 'M, whose index of 0 wraps around to 255 when the game subtracts one from it), so they read whatever three bytes happen to sit there, and random bytes are rarely polite. Real Pokemon cluster on tidy lengths, with 114 of the 151 using 0x01, 0x40, 0x80, 0xC0 or 0xFF. The glitch specimens land on values like 0xC9, 0xCB and 0xD0 instead, which stretch the square-wave notes to about 1.3 times their written length while the hiss underneath keeps its original timing, so the two drift apart.

Two you can load from the list: p (index 0xCB) plays base cry 0x17, the same notes Gyarados uses, at length 0xC9, and ▼ W G d (index 0xCE) plays base cry 0x21, Bellsprout's notes, at length 0xD0. Neither one wraps a single note, so everything odd about them comes from the stretch and a small pitch nudge.

MissingNo. goes the other direction. Its row is a real part of the table, it just holds nothing but zeros: base 0x00 (Nidoran♂︎'s notes), pitch 0x00 and length 0x00. A length of 0x00 means a tempo of 0x80, so MissingNo. plays Nidoran♂︎'s cry with the square-wave notes at double speed while the noise channel plods along at normal speed behind them.

What happens when the base cry runs off the table?

This is where it gets weird. The game turns the base cry into a sound number with a little math: 0x14 plus three times the base, keeping only the low 8 bits. (Each cry takes three slots in the sound table, one per channel, and the first cry starts at slot 0x14.) There is one wrinkle: the game doubles the base with a rotate instead of a shift, so for a base of 0x80 or more the top bit wraps around and adds 1. Any base past 0x25 lands on a slot that is not the start of a cry at all. It might be a sound effect, a single channel of some other sound, or the opening of a song, and because Red and Blue keep three separate copies of their sound engine (one for towns and routes, one for battles, one for caves, cycling, surfing and a few other spots), the same glitch cry can point at a different sound depending on where you hear it!

My favorite example is 4 h. Its base cry is 0xF5, which lands on sound slot 0xF4, and in the battle sound bank slot 0xF4 is the second channel of the Final Battle music. So when its cry plays in a battle, the battle music stops and one lonely channel of the Final Battle theme starts in its place. The Sound slot row in the synth does this math for whatever you have loaded, for all three banks.

One honest note: none of that is a cry, so for a base past 0x25 this page plays nothing at all rather than make up a sound. The Sound slot row tells you what the real game plays instead. Sometimes that is a sound effect or a drum hit, the same every time. Sometimes it is a channel of a song. And sometimes it is one channel of a real cry, while the game's cry code also grabs the other channels without giving them any notes, so they carry on with whatever the last sound left behind, and there is no fixed sound at all. Everything from 0x00 to 0x25 is the real recipe, synthesized note for note.

How is the sound made?

Pretty much the way the cartridge does it. The page reads the base cry's notes, runs them through the pitch and tempo math above, and builds every sample of the two square waves and the noise channel at 1,048,576 samples per second before scaling it down for your speakers. The engine is a port of ardean's open-source Pokemon Generation 1 Cry Synthesizer (MIT license), which is built on dotsarecool's original Gen 1 cry research, the 151 cry rows come straight from the Red cartridge and are double-checked against the pret team's pokered disassembly, and the WAV download comes out of the exact same synthesis you hear, saved at 44,100 samples per second.

Your homework: find the real Pokemon whose cry sounds the most like a glitch, then send it to a friend with the share link and see if they can guess who it is. (My money is on something with a wrapped note or two.) Every glitch specimen in the list has its own page in the Glitchhouse, and if you find a good one, tell me about it on the contact page. Toodles!