Jump to content

Photo

Parsec Remake


64 replies to this topic

#26 SoftTango OFFLINE  

SoftTango

    Space Invader

  • 21 posts

Posted Wed Mar 2, 2016 4:38 PM

Well, I proved it's possible...

 

Using the Parsec source code provided by this forum, I lifted the "game over" LPC data bytes and wrote them into the Parsec ROM over an existing speech phrase...

 

Bingo - the speech that wasn't even included in the ROM comes to life!

 

http://picosong.com/hrng

 

Amazing to think this speech was encoded in 208 bytes... the MP3 recording of it was 18,389 bytes  :-D


Edited by SoftTango, Wed Mar 2, 2016 4:42 PM.


#27 mizapf ONLINE  

mizapf

    River Patroller

  • 2,612 posts
  • Location:Germany

Posted Wed Mar 2, 2016 5:40 PM

I always wondered where the limitations of the vocal tract model are that is implemented in the TMS51xx/52xx VSPs. The reason why the speech data set is so compact is that it only encodes the coefficients of that model. Can it produce phonemes that are not in the english inventory? I know that there are speech samples in different languages (try MOONMINE in Spanish!), but this does not mean that the phonemes are properly spoken. I have some doubts that it can create, as an extreme example, the click sounds of Xhosa.



#28 Tursi OFFLINE  

Tursi

    River Patroller

  • 4,844 posts
  • HarmlessLion
  • Location:BUR

Posted Wed Mar 2, 2016 11:53 PM

The concept has it as a tone generator in (more or less) an echo chamber, and a noise generator... so in theory it can produce quite a wide variety of sounds. I think most of the limitations are caused by the creation tools. It's very hard to take apart a wave file and figure out what values to plug into the generator to reproduce it, and thirty years ago when computers were less powerful, it was even harder.

#29 SoftTango OFFLINE  

SoftTango

    Space Invader

  • 21 posts

Posted Thu Mar 3, 2016 12:07 PM

Any more testers?

 

Specifically, anyone with bluetooth controller?

 

More the merrier  ;-)



#30 Willsy OFFLINE  

Willsy

    River Patroller

  • 3,027 posts
  • Location:Uzbekistan (no, really!)

Posted Fri Mar 4, 2016 7:24 AM

Well, I proved it's possible...

 

Using the Parsec source code provided by this forum, I lifted the "game over" LPC data bytes and wrote them into the Parsec ROM over an existing speech phrase...

 

Bingo - the speech that wasn't even included in the ROM comes to life!

 

http://picosong.com/hrng

 

Amazing to think this speech was encoded in 208 bytes... the MP3 recording of it was 18,389 bytes  :-D

Can you please post the sound data for "Game Over?" I'll use it in something I'm working on...!  ;)



#31 sometimes99er OFFLINE  

sometimes99er

    River Patroller

  • 3,985 posts
  • Location:Denmark

Posted Fri Mar 4, 2016 7:30 AM

Can you please post the sound data for "Game Over?" I'll use it in something I'm working on...!  ;)

 

Take a look here http://atariage.com/...e/#entry3456049

 

:)



#32 Willsy OFFLINE  

Willsy

    River Patroller

  • 3,027 posts
  • Location:Uzbekistan (no, really!)

Posted Fri Mar 4, 2016 7:37 AM

Got it, thanks!  :thumbsup:



#33 Willsy OFFLINE  

Willsy

    River Patroller

  • 3,027 posts
  • Location:Uzbekistan (no, really!)

Posted Fri Mar 4, 2016 7:57 AM

Now I need "Did you mean to do that?" from Alpiner!



#34 SoftTango OFFLINE  

SoftTango

    Space Invader

  • 21 posts

Posted Fri Mar 4, 2016 8:28 AM

Can you please post the sound data for "Game Over?" I'll use it in something I'm working on...!  ;)

 

Sure I'll dig it out tonight...

 

I assume you mean the LPC data recovered from the source and not the MP3 I recorded of it?



#35 mizapf ONLINE  

mizapf

    River Patroller

  • 2,612 posts
  • Location:Germany

Posted Fri Mar 4, 2016 10:08 AM

OK, with the combined help of MESS, TIImageTool, and SPEECODER:

A042    Press any key to go on.
A1AA    Game over. Press Redo or Back.
A37D    Congratulations!
A47D    On work and upward.
A5FD    Here we go again.
A726    Look out!
A7A7    Watch out!
A827    Beware! Falling objects!
A9B4    Not ready to that one?
AADB    Great moves work!
ABF9    How ...(?) have looked, didn't hit.
AD60    You forgot to duck!
AE4C    You've got to move faster!
AF6B    Did you mean to do that?
B0B0    Getting tired already?
B1E2    Then you're right next time.
B2EA    Oh no!
B3E1    Yuck!
B451    Yikes!
B4D4    Oops!
B524    Ouch!
B58E    Awww!
B5BA    Ohhh!
B63C    Aaaaarrghhhp!

(I'm not really sure about some texts here ... maybe someone can help.)

 

 

And the source code of "Did you mean to do that?" (using SPEECODER):

       DATA 323
       BYTE 16,128,2,42,154,158
       BYTE 148,120,244,211,30,90
       BYTE 50,162,190,197,184,24
       BYTE 73,136,68,172,108,101
       BYTE 50,209,91,236,76,150
       BYTE 190,67,184,171,49,25
       BYTE 202,205,6,98,85,123
       BYTE 136,61,8,106,92,189
       BYTE 193,85,39,108,117,243
       BYTE 22,83,188,138,197,70
       BYTE 25,140,247,102,234,19
       BYTE 185,240,90,217,164,101
       BYTE 220,34,56,201,187,106
       BYTE 97,147,168,148,125,137
       BYTE 202,45,178,81,242,197
       BYTE 42,173,40,70,241,55
       BYTE 153,212,35,87,207,154
       BYTE 61,162,150,220,13,91
       BYTE 111,194,92,114,179,172
       BYTE 115,1,123,201,205,176
       BYTE 238,57,156,37,87,195
       BYTE 190,39,72,134,156,165
       BYTE 228,182,34,110,178,83
       BYTE 86,19,204,58,201,90
       BYTE 249,155,178,107,167,80
       BYTE 211,111,34,110,140,170
       BYTE 105,116,153,187,9,64
       BYTE 211,161,14,104,33,57
       BYTE 73,134,187,119,44,221
       BYTE 162,6,97,146,49,98
       BYTE 148,73,228,118,138,42
       BYTE 21,150,192,53,173,46
       BYTE 167,25,207,133,134,186
       BYTE 156,161,39,171,156,241
       BYTE 114,134,158,12,123,228
       BYTE 203,90,90,182,34,101
       BYTE 111,107,105,217,27,133
       BYTE 189,173,165,69,43,150
       BYTE 254,178,155,102,173,70
       BYTE 196,49,10,134,213,102
       BYTE 161,39,91,153,22,187
       BYTE 103,150,211,166,59,99
       BYTE 17,158,76,151,238,163
       BYTE 150,159,42,90,186,247
       BYTE 54,113,225,248,232,57
       BYTE 89,250,134,226,171,31
       BYTE 61,37,47,223,176,125
       BYTE 244,148,35,189,74,245
       BYTE 209,99,138,178,13,39
       BYTE 67,247,41,210,214,21
       BYTE 7,211,233,252,136,113
       BYTE 12,224,128,202,195,28
       BYTE 48,116,154,2,130,9
       BYTE 39,128,209,110,15

(I really did not expect that I'd be using my tool 27 years later... ;) )


Edited by mizapf, Fri Mar 4, 2016 10:10 AM.


#36 mizapf ONLINE  

mizapf

    River Patroller

  • 2,612 posts
  • Location:Germany

Posted Fri Mar 4, 2016 11:40 AM

And here's also the Extended Basic version. You need to do it in two turns because the string would become too long.

 

5 RESTORE
10 REM FIRST PART "DID YOU MEAN"
20 GOSUB 200
30 SP1$=SP$
40 REM NEXT STRING "TO DO THAT"
50 GOSUB 200
60 SP2$=SP$
70 CALL SAY(,SP1$,,SP2$)
80 END
200 SP$=""
210 READ A,B,C
220 SP$=CHR$(A)&CHR$(B)&CHR$(C)
230 FOR I=1 TO C
240 READ D
250 SP$=SP$&CHR$(D)
260 NEXT I
270 RETURN
1000 DATA 96,0,161
1010 DATA 16,128,2,42,154,158
1020 DATA 148,120,244,211,30,90
1030 DATA 50,162,190,197,184,24
1040 DATA 73,136,68,172,108,101
1050 DATA 50,209,91,236,76,150
1060 DATA 190,67,184,171,49,25
1070 DATA 202,205,6,98,85,123
1080 DATA 136,61,8,106,92,189
1090 DATA 193,85,39,108,117,243
1100 DATA 22,83,188,138,197,70
1110 DATA 25,140,247,102,234,19
1120 DATA 185,240,90,217,164,101
1130 DATA 220,34,56,201,187,106
1140 DATA 97,147,168,148,125,137
1150 DATA 202,45,178,81,242,197
1160 DATA 42,173,40,70,241,55
1170 DATA 153,212,35,87,207,154
1180 DATA 61,162,150,220,13,91
1190 DATA 111,194,92,114,179,172
1200 DATA 115,1,123,201,205,176
1210 DATA 238,57,156,37,87,195
1220 DATA 190,39,72,134,156,165
1230 DATA 228,182,34,110,178,83
1240 DATA 86,19,204,58,201,90
1250 DATA 249,155,178,107,167,80
1260 DATA 211,111,34,110,140,170
1270 DATA 105,116,153,187,121
1300 REM
1310 REM
2000 DATA 96,0,163
2010 DATA 1,104,58,212,1,45
2020 DATA 36,39,201,112,247,142
2030 DATA 165,91,212,32,76,50
2040 DATA 70,140,50,137,220,78
2050 DATA 81,165,194,18,184,166
2060 DATA 213,229,52,227,185,208
2070 DATA 80,151,51,244,100,149
2080 DATA 51,94,206,208,147,97
2090 DATA 143,124,89,75,203,86
2100 DATA 164,236,109,45,45,123
2110 DATA 163,176,183,181,180,104
2120 DATA 197,210,95,118,211,172
2130 DATA 213,136,56,70,193,176
2140 DATA 218,44,244,100,43,211
2150 DATA 98,247,204,114,218,116
2160 DATA 103,44,194,147,233,210
2170 DATA 125,212,242,83,69,75
2180 DATA 247,222,38,46,28,31
2190 DATA 61,39,75,223,80,124
2200 DATA 245,163,167,228,229,27
2210 DATA 182,143,158,114,164,87
2220 DATA 169,62,122,76,81,182
2230 DATA 225,100,232,62,69,218
2240 DATA 186,226,96,58,157,31
2250 DATA 49,142,1,28,80,121
2260 DATA 152,3,134,78,83,64
2270 DATA 48,225,4,48,218,237
2280 DATA 1


#37 SoftTango OFFLINE  

SoftTango

    Space Invader

  • 21 posts

Posted Fri Mar 4, 2016 3:54 PM

Fascinating... I didn't know you could do that in Extended Basic.

 

Here you go - the binary data for Game Over (the LPC data as requested) : http://www.speedysha...me-over-lpc.bin



#38 Willsy OFFLINE  

Willsy

    River Patroller

  • 3,027 posts
  • Location:Uzbekistan (no, really!)

Posted Fri Mar 4, 2016 4:07 PM

Thanks!



#39 Willsy OFFLINE  

Willsy

    River Patroller

  • 3,027 posts
  • Location:Uzbekistan (no, really!)

Posted Fri Mar 4, 2016 4:09 PM

I always wondered where the limitations of the vocal tract model are that is implemented in the TMS51xx/52xx VSPs. The reason why the speech data set is so compact is that it only encodes the coefficients of that model. Can it produce phonemes that are not in the english inventory? I know that there are speech samples in different languages (try MOONMINE in Spanish!), but this does not mean that the phonemes are properly spoken. I have some doubts that it can create, as an extreme example, the click sounds of Xhosa.

It might struggle with that, but I think it could reasonably replicate most modes of speech, including Chinese and Cantonese.

 

Welsh is a non-starter though. Just forget it  :D



#40 mizapf ONLINE  

mizapf

    River Patroller

  • 2,612 posts
  • Location:Germany

Posted Fri Mar 4, 2016 4:16 PM

Fascinating... I didn't know you could do that in Extended Basic.

 

The SPGET subprogram in Extended Basic downloads LPC code from the vocabulary and stores it in a string. You can then output that string again with CALL SAY (you have to add a comma before the string, though). That way, we can let the synthesizer say anything.



#41 MurdockScott OFFLINE  

MurdockScott

    Star Raider

  • 51 posts

Posted Fri Mar 4, 2016 4:37 PM

I am enjoying testing this dead on replica of Parsec on several iOS devices... What fun!



#42 mizapf ONLINE  

mizapf

    River Patroller

  • 2,612 posts
  • Location:Germany

Posted Fri Mar 4, 2016 4:39 PM

It might struggle with that, but I think it could reasonably replicate most modes of speech, including Chinese and Cantonese.


There are several possible ways to create new words:

  • Use a suitable hardware device that creates LPC (the easiest way, and infeasible for most of us)
  • Study existing vocabulary and try to isolate the phonemes.
  • Become creative and try some new coefficients.

I guess it is pretty hard if you don't have suitable speech samples in the given languages. And speaking of Chinese/Cantonese, you have some phonemes like zh, ch, q, c, z which you won't easily find in English words. Or Arabic - good luck with `ayn. Well, or I can take German, and try experimenting with voiceless filter settings to find a suitable realization for the two variants of ch which we won't find in any English word.

 

 

Welsh is a non-starter though. Just forget it :D

 

Can you speak Welsh or Irish? From the phonetic point of view and from samples that I heard I think it's not too far away from German (with the exception of some specialties like "ll"). 



#43 Willsy OFFLINE  

Willsy

    River Patroller

  • 3,027 posts
  • Location:Uzbekistan (no, really!)

Posted Fri Mar 4, 2016 4:39 PM

Can anyone help to extract the speech data from Parsec from address >A42C to >A27F inclusive? This *should* be the speech data for "four". The data given in the source code doesn't seem to work.

 

The source code is:

 

0A48 A555 031A 8080 060A 2FD7 B073 C59D EAD4 A6DE 8D61 AA19 5A92 55BA 9DED
E498 CA93 DC86 731D 6B53 9A44 D96A B684 917A 8B9B 597E
 
However, it's just gobbledy gook when I stream it to the speech synth.  :mad:


#44 mizapf ONLINE  

mizapf

    River Patroller

  • 2,612 posts
  • Location:Germany

Posted Fri Mar 4, 2016 4:45 PM

Here's Parsec's "Four"

 

Extended Basic:

1000 DATA 96,0,52
1010 DATA 10,72,165,85,3,26
1020 DATA 176,128,6,10,47,215
1030 DATA 176,115,197,157,234,212
1040 DATA 166,222,141,97,170,25
1050 DATA 90,146,85,186,157,237
1060 DATA 228,152,202,147,220,134
1070 DATA 115,29,107,83,154,68
1080 DATA 217,106,182,132,145,122
1090 DATA 139,155,89,126

Assembler:

       DATA 52
       BYTE 10,72,165,85,3,26
       BYTE 176,128,6,10,47,215
       BYTE 176,115,197,157,234,212
       BYTE 166,222,141,97,170,25
       BYTE 90,146,85,186,157,237
       BYTE 228,152,202,147,220,134
       BYTE 115,29,107,83,154,68
       BYTE 217,106,182,132,145,122
       BYTE 139,155,89,126

LPC code

 5 0  0  18 20 11  5
 5 1  0
 5 1  0
 6 1  0
 5 1  0
10 0 15   9 26 12  3  7  3 10  4  3  5
12 1 21
12 1 22
12 1 23
11 1 24
12 0 25  10 25  8  5 10  4  9  5  2  4
11 1 27
 9 1 27
 9 0 28  12 21  3 12  9  3 11  3  0  3
 9 1 43
 8 1 43
 6 0 41  12 18  2  9 11  5  6  3  3  2
 4 0 24  18 23 11  4  7  6  6  3  2  3
15

Edited by mizapf, Fri Mar 4, 2016 4:46 PM.


#45 Willsy OFFLINE  

Willsy

    River Patroller

  • 3,027 posts
  • Location:Uzbekistan (no, really!)

Posted Fri Mar 4, 2016 4:59 PM

Wow great! And now, as 16-bit hex values?  :P



#46 mizapf ONLINE  

mizapf

    River Patroller

  • 2,612 posts
  • Location:Germany

Posted Fri Mar 4, 2016 5:09 PM

Why do you need 16 bit hex values?

 

OK, let me calculate from my decimal numbers:

 

0A48 A555 031A B080 060A 2FD7 B073 C59D EAD4 A6DE 8D61 AA19 5A92 55BA 9DED
E498 CA93 DC86 731D 6B53 9A44 D96A B684 917A 8B9B 597E



#47 Willsy OFFLINE  

Willsy

    River Patroller

  • 3,027 posts
  • Location:Uzbekistan (no, really!)

Posted Fri Mar 4, 2016 5:19 PM

Why do you need 16 bit hex values?
 
OK, let me calculate from my decimal numbers:
 
0A48 A555 031A B080 060A 2FD7 B073 C59D EAD4 A6DE 8D61 AA19 5A92 55BA 9DED
E498 CA93 DC86 731D 6B53 9A44 D96A B684 917A 8B9B 597E

 
Ha! I was just going to post my version:
 
: sayFour ( -- ) data[ 0060
0A48 A555 031A B080 060A 2FD7 B073 C59D EAD4 A6DE 8D61 AA19 5A92 55BA
9DED E498 CA93 DC86 731D 6B53 9A44 D96A B684 917A 8B9B 597E 0F0F ]data stream ;
0060 and 0F0F are the "start raw data", and stop commands to the synth.

Thanks for taking the time!

Edited by Willsy, Fri Mar 4, 2016 5:21 PM.


#48 Ksarul OFFLINE  

Ksarul

    River Patroller

  • 4,234 posts

Posted Fri Mar 4, 2016 6:14 PM

I'll have to correct that line in the source code and repost it. . .



#49 OLD CS1 OFFLINE  

OLD CS1

    River Patroller

  • 4,048 posts
  • Technology Samurai
  • Location:Tallahassee, FL

Posted Fri Mar 4, 2016 7:02 PM

I spent a lot of time building words from TE-II allophones before I realized XB uses LPC data.  I was rather miffed at that, but I decided once I got QBox to work I might try again.  I like the allophone model, though, simply because it is, well, simple.  Is there LPC data stored in TEII?



#50 acadiel OFFLINE  

acadiel

    Stargunner

  • 1,025 posts
  • www.hexbus.com
  • Location:USA

Posted Fri Mar 4, 2016 9:40 PM

Darn, this thread is morphing into all sorts of new gems... new phrases, etc.  :)

 

I need to buy me an iOS Bluetooth controller.  Perhaps one like this would work well.






0 user(s) are browsing this forum

0 members, 0 guests, 0 anonymous users