Moonbase Alpha

Moonbase Alpha

261 lượt đánh giá
Text to Speech Tutorial!
Bởi slegghetti
Ever want to make songs using the TTS in Moonbase Alpha? Now you can!
3
2
   
Giải thưởng
Yêu thích
Đã yêu thích
Bỏ thích
Introduction
Hi, I'm Tacticman. I've been playing Moonbase Alpha for a while now and I have a lot of experience with the text to speech. I've written some of the most popular scripts you hear as well as contributed to some. Some songs I've written include parts of Happy Birthday John Madden, all of HEYEAYEAYEAYEA, all of Still Alive from Portal, part of Imperial March from Star Wars, Taps, 2001 Space Odessey, as well as others. I've decided to reveal the secrets to how to successfully manipulate the text to speech to make whatever songs you want.
Basic Steps
Writing a song code in Moonbase Alpha is actually simpler than it seems. Usually, it will look something like this:

[aa<2500,25>]

We'll call this the "standard form" of song coding. This is the standard form for two reasons; the first reason is that this particular code lasts for one second. The second being that the pitch is at a middle C on a piano. If you're musically inclined that will make more sense. Here's a diagram of a piano to help demonstrate:


All of the keys are labeled. Look for the C in the middle of the keyboard. That's where the number 25 will put you. I've also added numbers to each key to indicate what note you'll hit when you enter a certain number. Note: The TTS only plays a note up to number 37, which is a high C. After that, anything higher will just play a change in pitch.

Now, let's change the number to 24, making the new code [aa<1000,24>] . You'll notice the pitch went down to a B. In music we call this a half step. Now change the code to 26. You'll notice it goes to a C sharp but not a D. Again, changing it one number only changes the pitch by a half step. If you wanted to hit a D you'd have to go up to 27, not 26.

What about the first number? As mentioned before in this "standard form," this code is exactly 1 second long. The first number in ANY code indicates the length at which is it played in thousandths of seconds. Since this is 1000, it plays for 1 second. If it were 2500, it would be 2.5. If it were 500, it would be half a second, and so on.

However, if you write a code that doesn't have a pitch indicator as we'll call it, it will play whatever phoneme you put for the indicated duration, but it will sound as if you just put it into the text normally. For example, trying typing [mmeh<9000>]. It's fun!

tl;dr, the first number controls how long the note goes for and the second controls the pitch.
Writing the code
We've all seen people write elaborate songs in Moonbase Alpha. But you'll notice that they can't do it all in one chat message. Instead, they need to stretch it out over several messages.

The chat can only hold 128 characters at the most. This means if you have a code longer than 128 characters, you'll have to break it into separate parts.

This also means that you'll need to conserve as much space as possible to get the most characters in per message. It's a hassle to have to keep going back to wherever you're storing the codes and copying and pasting more messages. Let's try a simple code; going from standard form to [aa<1000,29>] . This is from middle C to E. Now, many song codes will make it look like this:

[aa<1000,25>] [aa<1000,29>]

There's a lot of extra space that can be cut down from that. Let's take it part by part to see what we can take out.


First of all, we have to remember that every code MUST start and end in brackets. But this rule can be omitted when combining codes. I'll show you what I mean:


And that's it. This method allows you to take lengthy codes and reduce them by several characters.
Advanced Coding
Now that we all know the basics behind how codes are written, let's look more in depth beyond the standard form. Let's say you want to do more than match the pitch of the song; you want to make the actual lyrics.

You can use other text codes other than what's in the standard form with "aa". These can be hard to find, but it takes practice, trial and error, and above all, patience. However, only certain phonemes are able to be used. I CANNOT stress this enough. If an incorrect phoneme is used, you'll get the well known "Command Error in Phoneme" prompt.

That being said, you can combine phonemes. I know it sounds ridiculous, but the TTS will recognize certain parts of a code and cut them up for you. Let's take an example: Let's say you wanted to say "so" in standard form. You'd probably try this:

[so<1000,25>]

You'll get the initial S sound but nothing else. This is MBA trying to break up the code into segments. The only problem with this code is the O part. Because there are several different pronounciations of the letter O, simply having the letter there isn't specific enough for Moonbase Alpha to make a sound out of it. You'll have to add a modifier to it. Modifiers are suffixes or prefixes added to a phoneme that specify its sound. In this case, in order to produce an "Oh" sound, we need to add a W. Try this code:

[sow<1000,25>]

It works! Now, what about adding sounds at the end of that? What if we wanted to say "Soul" instead? As we said before, the code MUST be contained within the brackets. You can put an l at the end of the code outside the brackets, but the TTS will end up literally saying "So-el" instead of "soul." So to do this, we must put it inside the brackets. Try this:

[sow<1000,25>ll]

There, that worked. However, the L sound doesn't always work. Moonbase Alpha seems to have a problem with certain sounds such as L, H, J, and ironically, "uh." We'll get more into that later.
Advanced Coding cont.
As far as the problem phonemes go, there are a few easy fixes. You may have to add a modifier to it; if you wanted a "HA" sound, you couldn't just put "ha", you'd have to put "hxaa". Another one is adding a short time modifier to it. This generally isn't an issue but it can turn up. A simple fix is adding <20> behind the phoneme to tell Moonbase Alpha to play that sound longer than the other parts of the code. You may find that you'll need to increase that number.

Ok, what about connecting codes together that have advanced phonemes?

Let's make a simple sentence out of the text to speech: I want cake.

Start with the first sound. Remember, you may have to mispell things in order to use the working phonemes in the game.

[ay<1000,25>]
Next?
[waa<1000,20>nt]
and finally:
[kay<1000,25>k]

This might get a little confusing. You'll notice that in the second line BEFORE the time indicator, TWO LETTERS ARE REQUIRED TO WORK THE PHONEME. But for a suffix, ONLY ONE IS NEEDED. The second line is an exception to this because it is producing two separate sounds, the "n" and the "t" You'll see that in the third line, the K in the "kay" part also only has one letter. Prefixes and suffixes generally only require one letter to dictate a preceding/following sound. But as always, there are exceptions. THe biggest exceptions are the H and J sounds.

Now let's put it together using the same method as before.
[ay<1000,25>] [waa<1000,20>nt] [kay<1000,25>k]
[ay<1000,25> waa<1000,20>nt kay<1000,25>k]
[ay<1000,25>waa<1000,20>ntkay<1000,25>k]

You'll notice that the "nt" and "kay" come in contact, but that is ok. Moonbase Alpha will sort it out; if it doesn't, simply add a time modifier after the suffix of the preceding code. It would look like this:


[ay<1000,25>waa<1000,20>nt<20>kay<1000,25>k]

Another important thing to note: If you want to make a pause, add an underscore in place of a phoneme. This will make a silence for however long the time indicates.
List of Known Phonemes + Codes
Only certain phonemes will work in Moonbase Alpha. Here's a list of the most popular ones without prefixes:

aa (ah sound)
ah (ah sound)
ae (ae as in "Apple", "Madden")
ay (Eh)
ao ("ohaa")
aw (ahoh, will change depending on whatever follows)
ar (arm, army)

ey (ay as in Hey, bay)
eh (eh as in Meh)

iy (ee as in Bee)
ih (hitch, myth)
ir (ear)
ix (same as ih)

ow (Oh, boat)

uh (uh)
uw (You, goo)

Special cases:

jh - May be needed to make a "ja" sounded like John or Joy
hx - Used to make a "Ha" sound as in Happy or Harry

Add any other phonemes to the comments if you have them.
Well that about sums it up. So, to sum it all up:

1: Everything has to be in the brackets
2: Everything has to be under 128 characters
3: Only use certain phonemes, and some prefixes

Comment or message me with any questions you have.

Enjoy some songs I wrote!

Still Alive (Portal)

[thih<200,32>sswaa<120,31>ssah<120,29>tray<200,29>ah<200,31>mmff]
[ay<200,22>mey<120,32>kkey<120,31>ngah<200,29>now<200,29>thiy<200,31>rr_<200>hxuw<400,27>gsuh<200,29>kkseh<200,22>ss]
[ih<200,22>ts<90>hxah<300,29>rd<90>tow<200,31>ow<350,32>ver<200,29>stey<200,26>tmay<300,27>sae<350,29>dih<120,22>sfae<120,22>]
[shaa<500,31>n_<1600>ae<120,32>peh<150,31>cher<120,29>say<150,29>eh<200,31>ns_<1600>wey<200,22>dow<200,32>waa<200,31>t]
[wey<200,29>mah<500,29>stbey<200,31>kah<500,27>zwey<200,29>kae<500,22>nn]
[fow<500,29>rthaa<200,31>gah<500,32>daa<200,29>vah<500,26>llaa<200,27>vah<200,29>ss]
[eh<200,22>kseh<120,27>pthaa<120,29>waa<200,30>ns<80>hxow<200,29>ar<200,27>deh<200,25>dd]
[bah<200,22>ther<200,23>snow<400,25>seh<400,30>nskray<200,30>ih<200,29>now<200,27>ver<200,25>eh<200,27>vriy<200,25>mih<200,25>s]
[tey<350,25>kwey<200,22>ll<20>jhah<200,23>stkiy<350,25>paw<350,30>ntray<200,32>ih<200,30>ntih<200,29>llwiy<200,27>rah<200,27>n]
[aw<200,29>tah<350,30>fkey<350,30>kae<200,32>ndthaa<200,34>say<200,35>eh<200,35>nsgeh<200,34>tsdah<350,32>nnae<200,30>nd]
[yx<20>uw<200,32>mey<200,34>kah<200,34>niy<350,32>tgah<350,30>nfow<250,27>rthaa<180,25>piy<180,27>pih<180,27>ll<20>hxow<200,30>]
[ar<350,29>stih<200,29>ll<20>ah<200,31>llay<500,31>vv]

HEYEAYEAYEAYEAYEA
[sow<150,28>ay<150,28>kkray<300,37>ssuh<300,37>mmttay<300,33>mms<50>wweh<150,33>nnay<150,33>mm<50>llay<150,28>ihnn<150,28>]
[ih<150,28>nnbeh<150,27>eh<300,25>dd<50>guh<150,26>sstuw<150,26>geh<150,37>ttow<300,35>ttwah<150,33>tts<50>ih<150,35>]
[mah<300,37>hxae<300,33>dd<50>ae<150,33>dd<50>ay<300,33>mm<10>ffiy<150,33>llih<150,35>nnpeh<150,28>kkuw<300,26>llyur<300,25>]
[sow<150,28>ay<150,28>wwey<300,37>kkih<150,37>nnth<20>uh<150,37>mor<200,33>nnihn<200,33>ae<200,33>nndday<200,33>ssteh<300,28>pp]
[aw<300,28>ttssah<150,26>ay<150,25>ddae<150,25>nday<150,25>ttey<150,26>kkuh<150,26>ddiy<150,37>ppbr<20>eh<300,35>thae<300,33>]
[ndgeh<300,35>ttrih<300,37>llhxay<300,33>ae<150,33>nnay<150,33>say<300,33>_<300>ae<150,33>tteh<150,33>ttaw<150,33>ppuh<150,33>]
[ffmaa<200,33>lluh<300,33>nngswah<300,35>ssgow<150,35>ih<300,37>ngaw<300,33>nn]
[ae<150,28>nnday<300,30>ssae<300,28>_<300>hxeh<750,37>ey<200,33>eh<750,33>ey<200,28>eh<750,28>ey<400,26>ey<400,25>]
[hxeh<750,37>ey<200,33>eh<750,33>ey<200,26>eh<750,26>_<750>ay<150,35>sseh<200,37>hxeh<300,33>eh<300,30>]
[wwah<300,35>ttsgow<300,35>ih<400,37>nnaw<300,33>nn<90>]


Windows startup

[dah<500,26>dah<180,14>dah<180,21>dah<500,19>dah<180,26>dah<500,21>]

Star Spangled Banner

[ow<400,20>ow<400,17>sey<800,13>kae<800,17>nyuw<800,20>siy<800,25>]
[bay<500,29>thaa<300,27>daw<800,25>nsur<800,17>lliy<800,19>llay<800,20>tt]
[waa<300,20>ttsow<300,20>praw<1000,29>dlliy<300,27>wiy<800,25>hxey<800,24>ll]
[ae<400,22>ttah<300,24>tway<800,25>llay<800,25>tsllae<800,20>stglliy<800,17>mmih<800,13>ng]
[hxuw<300,20>sbraw<300,17>ddstray<800,13>psae<800,17>ndbray<800,20>ttstah<1000,25>rs]
[thruw<500,29>thaa<400,27>per<800,25>ih<800,17>llah<800,19>sfay<800,20>tt]
[ow<400,20>ver<400,20>rae<800,29>mpar<400,27>tswiy<800,25>waa<800,24>ch]
[wer<500,22>sow<300,24>gae<800,25>lleh<800,25>ntlliy<800,20>striy<800,17>mmih<800,13>ng]
[ae<500,29>ndthaa<200,29>raa<800,29>keh<800,30>tsreh<800,32>dglley<800,32>rr_<400>thaa<400,30>baa<400,29>msber<800,27>st]
[tih<800,29>ngih<800,30>ner<800,30>_<400>gey<800,30>vpruw<800,29>ffthruw<400,27>thaa<800,25>nay<800,24>tt]
[thae<400,22>tar<400,24>fllae<800,25>ggwaa<800,17>sstih<800,19>llther<1000,20>]
[ow<800,20>sey<800,25>dao<800,25>sthae<400,25>ae<400,24>ttstar<800,22>spey<800,22>nguh<800,22>lldbae<800,27>nner<400,30>]
[er<400,29>yxeh<400,27>eh<400,25>ttwey<800,25>ey<800,24>vv_<400>for<400,20>thaa<400,20>llae<800,25>ae<400,27>ndaw<400,29>vv]
[thaa<400,30>friy<800,32>_<800>ae<400,25>ndthaa<400,27>hxao<1000,29>maa<400,30>vthaa<1000,27>brey<5600,25>vv]

Indiana Jones Theme

[dah<300,19>dah<100,20>dah<250,22>dah<1000,27>dah<300,17>dah<100,19>dah<1000,20>]
[dah<300,22>dah<100,24>dah<250,26>dah<1000,32>dah<300,24>dah<150,26>dah<500,27>dah<500,29>dah<500,31>]
[dah<300,19>dah<100,20>dah<250,22>dah<1000,27>dah<300,29>dah<100,31>dah<1000,32>]
[dah<300,22>dah<150,22>dah<400,31>dah<250,29>dah<150,22>dah<400,31>dah<150,29>dah<150,22>dah<400,31>dah<150,29>]
[dah<150,22>dah<250,31>dah<250,29>dah<300,19>dah<100,20>dah<250,22>dah<1000,27>dah<300,17>dah<100,19>dah<1000,20>]
[dah<300,22>dah<100,24>dah<250,26>dah<1000,32>dah<300,24>dah<150,26>dah<500,27>dah<500,29>dah<500,31>]
[dah<300,19>dah<100,20>dah<250,22>dah<1000,27>dah<300,29>dah<100,31>dah<1000,32>]
[dah<300,22>dah<150,22>dah<400,31>dah<250,29>dah<150,22>dah<400,31>dah<150,29>dah<150,22>dah<400,31>dah<150,29>]
[dah<150,22>dah<400,32>dah<250,31>dah<200,29>dah<1000,27>]
[dah<300,19>dah<150,22>dah<1000,20>dah<300,17>dah<150,20>dah<100,19>dah<100,22>dah<800,31>]
[dah<300,19>dah<150,22>dah<1000,20>dah<300,17>dah<150,20>dah<100,18>dah<100,16>dah<800,15>]
[dah<300,19>dah<150,22>dah<1000,20>dah<300,17>dah<150,20>dah<100,19>dah<100,22>dah<800,31>]
[dah<250,29>dah<250,31>dah<250,32>dah<100,25>dahdah<200>dah<200,32>dah<100,25>dahdah<100>dah<300,32>dah<100,30>dah<200,28>]
[dah<1000,30>dah<250,32>dah<100,25>dahdah<200>dah<200,32>dah<100,25>dahdah<100>dah<300,32>dah<100,30>dah<200,28>]
[dah<1000,30>dah<250,30>dah<250,30>dah<100,32>dah<5000,34>]
99 bình luận
Shaymim 12 Thg08, 2024 @ 7:37pm 
Hey everyone! I'm not sure if this is well known but the TTS Moonbase Alpha uses is available on github, it's called DECTalk, it's easier to work with for several reasons, and this list of phonemes should work in moonbase!

{ĐƯỜNG DẪN BỊ XÓA}
Solid Snek 22 Thg12, 2023 @ 8:49pm 
a bit late to the party but amogus [uh<300,25>uh<300,28>uh<300,30>uh<300,31>uh<300,30>uh<300,28>uh<300,25>]...[uh<200,23>uh<200,27>uh<200,25>]...[eh<300,20>eh<300,13>]..[uh<300,25>uh<300,28>uh<300,30>uh<300,31>uh<300,30>uh<300,28>uh<300,31>]...[uh<200,31>uh<200,30>uh<200,28>uh<200,31>uh<200,30>uh<200,28>uh<2]
andreanna 18 Thg12, 2023 @ 2:09pm 
i made bury the light
[ay<400,27>aa<300,27>mdaa<300,29>stow<300,30>rmdaa<300,27>tih<300,30>saa<300,27>prow<1000,32>chih<1000,27>ng]
[prow<300,27>vow<1000,34>kiy<700,27>ng]
[blxaa<300,32>klxaa<300,32>dzih<300,32>naa<300,31>iy<300,27>sow<300,26>lxey<700,26>shaa<200,26>aa<500,27>n]
Baku 8 Thg07, 2023 @ 3:38pm 
that one line from right before the epic drop in wildfire:
[wiy<150,35>mey<150,35>dah<150,35>chow<200,35>iy<100,35>sgow<300,35>fay<350,35>tah<300,35>geh<300,35>nst][iy<100,35>ow<300,35>rfey<350,35>t]
MILITIAHEAD84 27 Thg06, 2023 @ 3:14pm 
plz send me little dark age
invrl 7 Thg01, 2023 @ 9:48pm 
Spent a good 10 - 25 minutes figuring out how to transcribe "Sanctus"
[sah<2000,13>nktuw<2000,13>s]
I will never for the life of me understand why "sa" is a command error and "sah" isn't but whatever, honestly a really good text to speech if you're willing to figure it out.
Chilevec 1 Thg01, 2023 @ 12:53am 
What phoneme for the o in "told"?
Zesty 4 Thg08, 2022 @ 12:16pm 
Here is the first part of the among us drip theme:
[dah<300,25>dah<300,28>dah<300,30>dah<300,31>dah<300,30>dah<300,28>dah<300,25>dah<200,23>dah<150,27>dah<150,25>]
PouLS 6 Thg07, 2022 @ 7:09am 
Wtf is wrong with the phoneme key? For example 'ae (ae as in "Apple", "Madden")' but there's no "ae" in "Apple" or "Madden".
Magic Dog 12 Thg03, 2022 @ 8:59pm 
GOD BLESS THE US [_<-1000,1000>] AAAAAAAAAAAAAA