SoftTango Posted March 2, 2016 Share Posted March 2, 2016 (edited) 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 Edited March 2, 2016 by SoftTango 4 Quote Link to comment Share on other sites More sharing options...
+mizapf Posted March 2, 2016 Share Posted March 2, 2016 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. Quote Link to comment Share on other sites More sharing options...
Tursi Posted March 3, 2016 Share Posted March 3, 2016 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. 1 Quote Link to comment Share on other sites More sharing options...
SoftTango Posted March 3, 2016 Share Posted March 3, 2016 Any more testers? Specifically, anyone with bluetooth controller? More the merrier Quote Link to comment Share on other sites More sharing options...
Willsy Posted March 4, 2016 Share Posted March 4, 2016 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 Can you please post the sound data for "Game Over?" I'll use it in something I'm working on...! Quote Link to comment Share on other sites More sharing options...
sometimes99er Posted March 4, 2016 Share Posted March 4, 2016 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/forums/topic/249709-parsec-remake/?do=findComment&comment=3456049 Quote Link to comment Share on other sites More sharing options...
Willsy Posted March 4, 2016 Share Posted March 4, 2016 Got it, thanks! Quote Link to comment Share on other sites More sharing options...
Willsy Posted March 4, 2016 Share Posted March 4, 2016 Now I need "Did you mean to do that?" from Alpiner! Quote Link to comment Share on other sites More sharing options...
SoftTango Posted March 4, 2016 Share Posted March 4, 2016 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? Quote Link to comment Share on other sites More sharing options...
+mizapf Posted March 4, 2016 Share Posted March 4, 2016 (edited) 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 March 4, 2016 by mizapf 5 Quote Link to comment Share on other sites More sharing options...
+mizapf Posted March 4, 2016 Share Posted March 4, 2016 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 2 Quote Link to comment Share on other sites More sharing options...
SoftTango Posted March 4, 2016 Share Posted March 4, 2016 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.speedyshare.com/zJeNq/game-over-lpc.bin 1 Quote Link to comment Share on other sites More sharing options...
Willsy Posted March 4, 2016 Share Posted March 4, 2016 Thanks! Quote Link to comment Share on other sites More sharing options...
Willsy Posted March 4, 2016 Share Posted March 4, 2016 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 Quote Link to comment Share on other sites More sharing options...
+mizapf Posted March 4, 2016 Share Posted March 4, 2016 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. Quote Link to comment Share on other sites More sharing options...
MurdockScott Posted March 4, 2016 Share Posted March 4, 2016 I am enjoying testing this dead on replica of Parsec on several iOS devices... What fun! 1 Quote Link to comment Share on other sites More sharing options...
+mizapf Posted March 4, 2016 Share Posted March 4, 2016 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 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"). Quote Link to comment Share on other sites More sharing options...
Willsy Posted March 4, 2016 Share Posted March 4, 2016 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. Quote Link to comment Share on other sites More sharing options...
+mizapf Posted March 4, 2016 Share Posted March 4, 2016 (edited) 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 March 4, 2016 by mizapf Quote Link to comment Share on other sites More sharing options...
Willsy Posted March 4, 2016 Share Posted March 4, 2016 Wow great! And now, as 16-bit hex values? Quote Link to comment Share on other sites More sharing options...
+mizapf Posted March 4, 2016 Share Posted March 4, 2016 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 9DEDE498 CA93 DC86 731D 6B53 9A44 D96A B684 917A 8B9B 597E Quote Link to comment Share on other sites More sharing options...
Willsy Posted March 4, 2016 Share Posted March 4, 2016 (edited) 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 March 4, 2016 by Willsy Quote Link to comment Share on other sites More sharing options...
+Ksarul Posted March 5, 2016 Share Posted March 5, 2016 I'll have to correct that line in the source code and repost it. . . Quote Link to comment Share on other sites More sharing options...
+OLD CS1 Posted March 5, 2016 Share Posted March 5, 2016 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? Quote Link to comment Share on other sites More sharing options...
+acadiel Posted March 5, 2016 Share Posted March 5, 2016 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. 1 Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.