This is a copy of the emails replies from Larry Brantingham of Quadravox... there is a lot of good history in these emails, and I wished to preserve it...

===========================

[ I asked if they had a program to convert WAVe format files to LPC. I mis-identified the TMC0285 (TMS5200) as a TMC0610. ]

Hi Ben,


 We might be able to help, but we'll need to see what coding/decoding table you need. I don't recall a TMC0610, though it might have come about after I left CPD in 1980. The  TMS5200 was the Consumer group's TMC0285 - the only difference was the name. The more common S/C part was the TMS5220 and it had a slightly different coding table than the original. The bit allocations were the same and you can swap data, but it sounds a bit odd. There was also the original Speak & Spell TMC0280/281, the TMS5100 and the TMS5110. These parts had a different interface; if the one you have is set up for parallel transfers, then it's likely a 5220 derivative or the very rare bare player that was done in the early '80's. I wasn't aware any of those were ever sold. Do you know where the chip came from, or the era?


 When we started Quadravox, our first product (not a roaring success...) was a development system for TI LPC synthesizers, aimed mainly at the 50P11. Michel later did another pass for our last chip at TI, which is amazingly still alive as a Sensory Inc. device, and I believe one of the requirements for the tools was compatibility with the old 5220 coding. I've found the old QBoxPro executable software. It requires the P11 programmer to be attached, but I found the schematic and faked it; if you put the attached qbox.ini into the Windows directory after the installation, it will think it's already found the port. There are no options for coding, but I found a ".cod" file that is a template for tables - give it the method and parameter ranges and it will make one internal to the program. That would probably be only an approximation, but it might be close enough if I can find the appropriate table's coefficient ranges.


 I was digging around in old records (for tax, not technical reasons!) and found some very early speech chip data which probably includes the coding tables. For that matter, I think we put them into the patents, too, so the information to get the boundaries right should be available, though in storage in a nearby town.


 I've attached an install package for QboxPro. To use the .ini file I sent you'll need to let it install in the default directory. This old code has more than a few quirks - e.g. File/Exit instead of the built-in form close box. It codes speech but I'm not sure where it puts it so as-is it may not be very useful. I'll see what Michel remembers tomorrow.


Best regards,
Larry

------------------------

[ I thanked Larry for the software, and told him of the Echo card for the Apple II. I had come across some LPC strings from this board, and they were TI compatible... I wrote about this some time ago on the OLUG. Most of the strings were too long for XB, but not assembly.  Turns out the first software he sent me did not run - it still wanted the hardware plugged in, even though he said he'd edited the ini file to fix that. Ok, as he sent something better... ]

Hi Ben,


 We've found more stuff to send you. Michel had a different version that uses fixed value coding tables, and he showed me how to reach the output formatting (via concatenations/format), so now all that's missing is the original 5200/0285 coding table, which I am pretty sure is in a box in storage. Our storage area is in another town near here, but it may be a couple of days before I get over there. You'll have to make a copy of the TMS5220.cod file (ascii text) and manually enter the 0285 values, but it should not be difficult, just tedious. Better yet, put the new values into the defunct "D6" table file and retain the 5220 as an option.


 I didn't even know about the Echo product. If it works with the 0285, it must be a very early external application of the 5200. The first external sale was for the Byron Talking Typewriter toy (5100) and it wasn't too long afterwards that S/C moved to the 5220, so there wasn't much of a window for 5200 sales. However, at the time I was living in Nice, France, so I wasn't paying too much attention! I used to have lots of modules for the home computer, but I gave them all away some years ago. The speech group at TI got kicked around for some years, but finally disappeared entirely a year or two ago (which is why Sensory owns the "Ronco" now), so it's very unlikely anyone there has any of the old data. Still, what you want is to create new data, so on to that...


 I need to get a DLL from Michel and then I'll send you the better version. You can at least play around with it to generate some speech until we get the right tables. The original coding didn't have any particular problems, but the tables were based on statistics from our first voice talent and he had an unusually deep voice, which skewed the coefficients as well as the pitch table. We found the distribution wasn't very good for general usage, so when S/C started selling the parts they wanted to tweak the tables.


 The version I'm sending doesn't look very different, but I think it's a much better starting point. It even does voice modifications for fun - like converting voiced to unvoiced so you can make Darth Vader....


 I'll send it along later today, then the coding tables the next time I'm in beautiful downtown Rowlett.


BRs,
Larry


-------------------------

[ I sent an email about the problem with the original code just before I read this one. ]

Hi Ben,


 OK - here it is. This is just a zip of the install directory plus the sample subdirectory. I've included the qboxpro.ini file, but you will have to copy this to the windows directory or it will complain about not having a coding table in the project. The dll can be left in this directory. Since this is not a sophisticated install package, you'll have to make a directory in the root called qbox and unzip this file, using subdirectory names, into that one. That way all the references will work.
 When you format data, use the LPC10, 4UV option to match the 0285. I haven't actually looked at the formatted data - I think the 52xx just accepted the packed data even though it crossed byte boundaries, but it's been a long time since I saw the part. I designed the original 0280/5100, but the home computer group guys added the fifo interface to make the 0285.


 When I find the right coding tables, I'll pass them on, but you should be able to get it squeaking with this. You will definitely want to do some 




WARNING: The remainder of this message has not been transferred.
[ rest of message missing, but that was about the end of the text ]

----------------------------

[ I asked about the output files from the application ]

Looks like this one arrived before the other, so no problem. I haven't used this stuff in ages, and for that matter, neither has Michel, so I hope I get this right. There is a help file, but I don't know how good it is.


The *.w* files are wav files, created so that you can hear the results. They're generated by "an exact simulation" so it says. I have vague recollections of writing that part. In any event, they're necessary for editing the data. WLP is (I think) the raw LPC, WCL is the coded LPC (quantized by the coding table), WXL is the compressed, coded data (if successive frames are near enough, the coefficient data is just repeated frame-to-frame to save data), and WHE is the modified "helium" speech.


To get the formatted data, you have to ensure that all the files you want are included in a concatenation. Use Edit/Concatenations to get to that dialog. If there are no concatenations already, use add/concatenation to create at least one. Select a phrase in the main window, select a concatenation in the concatenation dialog, and say add/phrase to add the phrase to the concatenation. There are some options, but I'm not sure how many will work with the 0285. The voicing might, assuming the modification is made to the data itself, but these were for a version of the 50P11 synthesis routine we did specifically to offer sound modifications.


When you have everything included somewhere (yes, it's tedious..), then inside the concatenation window, use Format/LPC10, 4UV to create the output as a binary file. The listing file will show the coded levels used for each frame, so if for some reason the binary file isn't usable (or the flipped byte version), you could write a routine to read these and pack the data as needed. I really don't recall enough about the 52xx to remember in what order it takes the data, but I'd be willing to bet that just feeding it either the flipped or unflipped binary file byte-by-byte will work. It wasn't anything tricky.


It is important to realize that old pitch-excited LPC made a lot of mistakes, usually in pitch and voicing decisions. For that reason, editing of the data was always essential to get decent sound. If you select a file and press "edit", you'll get the parameter editor. The editor allows you to change pitch (and voicing - 0 is unvoiced), gain, and all 10 coefficients. Most of the time all you will need or want to do is to patch pitch (it sometimes is doubled) or voicing, especially at the boundaries. Tweaking coefficients isn't something I'd want to do for fun, but sometimes it's useful, especially if you want to copy in a good sound from somewhere else in the word. Don't worry - it isn't that bad often.


You can optimize the pitch tracking by setting the pitch range during the original analysis. The defaults are ok for general use, but if you're using a deep or high pitched voice, it helps to squeeze the range. BTW, though it may not be politically correct, it happens to be true that low-pitched voices work better with LPC analysis. Since the only data available to estimate the resonances is the amplitude of the pitch harmonics, having a low pitch and therefore many harmonics makes the math work better. With high-pitched voices and few harmonics, the analysis is often fooled into seeing a harmonic as the resonance of the vocal tract.


Good luck. I'll pass on the right coding table when I find it.


BRs,
Larry


----------------------------

[ I made some comments about my experience with converting some wave files, and how the original had to be very clean to synthesize - with no background noise or music... And the help file has a walk-through tutorial inside of it, very helpful... ]

You're right, and some people underestimate the importance of a having a clean file to begin with. For LPC you don't want any reverb or equalization - that just confuses the analysis. We used to have a tough time getting recording engineers to stop jazzing up the signal like they were used to!
 Editing can be tedious, although after a while you begin to see what's needed. You will need files at 8kHz sampling rate and there's a downsampling function available in the tool, but any modern recorder (including the Windows Recorder) will do it too.


 Don't be surprised if the speech sounds odd - I remember thinking that swapping one of the directions made it sound Australian (or not - I might have been to the pub with Raj and it just sounded that way). When I can get you the correct tables it should sound more natural.


BRs,
Larry

--------------------

[ I finally got it to work. Found the *.sfm file (under the Project name) and found it to be compatible with the assembler, IF you shorten the BYTE lines so it won't truncate the very last nybble of the last byte on the line. Also, a *.bin file with the project name that contains the binary, directly usable on the TI in Basic, except it may be longer than 255 bytes, the Basic string limitation. Found the 5220 manual says to end Speak External by an all "ones" nybble, so I guess ending the speech with ">Fx" should do it - yet to test. Also, the synthesizer is supposed to reset itself upon buffer underflow as well ]


Great!


 We never had a need to try it - the 5220 was passe if not dead by the time we were making our little widget.


 Does it sound like the simulation or slightly different (maybe more hollow or more muffled?) If the coding table is wrong, you should hear some difference. I wasn't sure what you meant about a limit of 255 bytes. I just tried a file of about 10 seconds and created a binary output 2833 bytes long covering 560 frames. Is this a limitation of the 5220?


 In any event, I'll be nosing around this weekend for the original 5200 tables and will let you know what I find.


BRs,
Larry

-------------------

[ I mentioned that sound recorder couldn't do 10khz ]

 There's not much benefit in going to 10kHz. We originally designed the chips for that, but decided that using 10 coefficients to model 4kHz bandwidth was a better compromise. The rule of thumb of the day was two per kHz (to get the formants) plus two for the overall shape, and 10 / 4 fits. The 50P11 could do LPC12, so we ran it at 10kHz sampling rate.


 Speaking of editing - there was only one person (OK, maybe two) who worked on the S&S who ever got rich from it and she did it as an independent speech editor. It was seen as "magic" so she pretty much wrote her own checks. Ironically, she has a PhD (in something unrelated), which might have helped. A big part of the art was to push that magical aura. I had an editor in my Nice group who would take customer suggestions, busy himself with tweaks on the screen, then play exactly the same file again. Since they thought they'd had an influence, the customers went away happy!


 Michel wrote QBoxPro to go with a P11 programmer as a kit - we sold the whole thing for $90 when TI had been selling PSL analysis tools for $10k! Too bad nobody seemed to care by the time we got started - I think we sold 13 systems total....


 I understand now what you meant about the size limit - I had thought you meant something in the chip itself. If I can find a chip spec in those old papers I'll make a copy for you.


BRs,
Larry

-------------------

Hi Ben,
 Well, I didn't find the coding tables in the old files, though ironically I found the 5220 tables. There are a couple other places I can dig into - I'll let you know what I find.


BRs.
Larry


--------------------

[ As he couldn't find the 5200 table, I told him that basically the way it sounded in their software, it sounded the same (or better) on the TI.

I asked him about the status of the software... and about his history with LPC...]


Hi Ben,


 OK - good thing; at this point the best I'm likely to find are tables for the 0280/5100 and the pitch table (I think) is half the size, so you would still be guessing a little. I'll keep my eyes open, though.


 You can distribute the software as long as no one expects support. We can barely remember it, let alone support it!


 To be honest, Richard, Gene and I got assigned to the "Spelling Bee" (before it became Speak & Spell) mainly because we we didn't have enough seniority to grab onto the hot projects.. Paul Breedlove had the insight to connect some obscure speech research in TI's Central Research Labs with the particular problem of teaching spelling in English, and he got internal seed money to get started. Richard Wiggins had just arrived from BBN to CRL, Gene Frantz was a project manager between projects, and I'd just finished off my last processor design, so we got elected to work on what, at the time, was considered to be a long-shot. I had a design group by then, so I was able to pass off the ROM and the control processor tweaks to a couple of other guys, but it was still a pretty small group. I designed most of the 0280/5100 in a laundromat to get away from the noise in the office!    We didn't have software simulations in '77 (we could check a few circuit things - by carrying a big deck of cards to the computer center and waiting a day), so designing the thing at the laundry worked just as well as doing it at the office.


 Have fun - if I can find more info I'll send it along.


BRs,
Larry

---------------

I will pass the zip file along to WHT...

I don't have a clue how this will compare to what others have found...

But I've never found anyone else willing to share!

Merry Christmas!

Ben Yates