Jump to content

Photo

Any way to dump LPC speech patterns via TEII or the Text-to-Speech disk?


11 replies to this topic

#1 pixelpedant OFFLINE  

pixelpedant

    Space Invader

  • 46 posts

Posted Fri Jul 20, 2018 12:18 AM

CALL SPGET serves as a simple, handy way to fetch LPC patterns in XB and the Speech Editor (which can then be saved, stored, modified, etc.).  But while TEII and the Text-to-Speech disk offer much richer speech composition options, it doesn't seem like there's a trivial way to dump patterns for subsequent use, or generate patterns ahead of time for performance reasons.  Or at least I can't see one.  Is there a method I'm missing here?  



#2 RXB OFFLINE  

RXB

    River Patroller

  • 3,349 posts
  • Location:Vancouver, Washington, USA

Posted Fri Jul 20, 2018 12:50 AM

Curious want you are attempting to do?



#3 pixelpedant OFFLINE  

pixelpedant

    Space Invader

  • Topic Starter
  • 46 posts

Posted Fri Jul 20, 2018 6:15 AM

I've been playing around with speech a lot lately.  Not attempting to do anything in particular, necessarily.  I wrote a Python app for editing speech patterns (analogous to Speecoder, but with more user-friendly/modern editing).  Then I got to mapping musical note frequencies to LPC pitch values for the sake of messing around with sung speech.

 

TEII and the Text-to-Speech disk are powerful tools for generating pattern data (and even messing around with pitch and energy a bit).  And heck, the Text-to-Speech disk subroutines can even be used in an XB program!  But what would make these tools really useful to me is if their generated LPC patterns could be dumped for subsequent editing and reuse.  Especially because the phonemic/syllabic inventory of the default vocabulary is incomplete.



#4 HOME AUTOMATION OFFLINE  

HOME AUTOMATION

    Chopper Commander

  • 130 posts

Posted Fri Jul 20, 2018 1:13 PM

Hi again,

I solved this exact issue around 1998, as i wished to have immediate and continuous speech prompts and dialogs as users key in their responses in my TI-99/4a driven PABX with Voice Attendant Subsystem, as well as system wide.

Unfortunatly My LPC extraction solution has been off-line for some time, due to old and failing disks, lost instructions, lack of workspace, only one fully working console that can't be relocated right now. The list goes on...

The Solution went something like this...

I bought TEXT-TO-SPEECH, disassembler and sector editor disks from TEX-COMP. I dissassembled the speech output program from TI's XB TEXT-TO-SPEECH disk(I don't remember the filename). searched for "9400"(there's only one). The disassembler I used could not edit. I believe I observed the instruction to have a two address format, such as MOV R4,@>9400. I entered this into the LINE-BY-LINE ASSEMBLER in order to determine the OP-CODE...

D804 (MOVB R4,@>9400)
9400

using the sector editor I replaced this with a branch out...

06A0 (BL @>A000)
A000

from A000 I wrote a small routine to save the LPC data to a CPU buffer...

LI R9,B000
MOVB R4,*R9+
INC R2 (Byte count)

than reimmplement the calling program's replaced instruction...

MOVB R4,@>9400
RT

after phrase is spoken, LPC data starts at B000 with length in R2.
Since R9 is in the calling program's WS, using it might crash the calling program. R9 is just an example. As I recall, there is an available unused register in the calling prog's WS, or at least one that wont crash it until one phrase completes.

When I engineered this solution my 32K was off-line, so I had to use MINIMEMORY with a widget, thus XB crashed after each phrase. I had to hit enter and throw the switch in the right order to succeed. Using 32K, a successful return to XB should be possible.

I suppose you could preserve the calling prog's WS by moving R4 to a symbolic memory address that coincides with a register in your own WS and then restore the old WS before RT. I'm not sure if the calling program minds R11 being used by the BL.
 



#5 pixelpedant OFFLINE  

pixelpedant

    Space Invader

  • Topic Starter
  • 46 posts

Posted Fri Jul 20, 2018 3:12 PM

Wow.  Hats off to you for finding a solution to this sticky problem on the TI end of things.  I thought it might come down to disassembly.  But I was kind of hoping otherwise.  Thanks for the detailed explanation!


  • RXB likes this

#6 HOME AUTOMATION OFFLINE  

HOME AUTOMATION

    Chopper Commander

  • 130 posts

Posted Fri Jul 20, 2018 4:29 PM

Follow up,

I meant to use a symbolic memory address in place of R2.

Since you're working on pitch, I thought I might pitch this at you.

The TI text2speech is seldom understood by new users, perhaps moreso over a telephone. Totally unacceptable for emergency announcements. In an effort to address this I used the speech modifiers, set to about the lowest frequencies, slowest speech and steady inflection, using double periods between words and multiple periods between sentences to lengthen pauses. This results in the sound of a slowed down tape. Than by locating the speech processors timing resistor and replacing it with a potentiometer, the oscillator can be adjusted to about 20 to 50 times speedup of speech speed and freq. Resulting in higher speed Clear Sounding female speech! The voice sounds similar to the older AT&T calling card auto-attendant. After hearing this I understood that the original samples are actually female.

I,m sorry to say, but... the sound of TI singing, to me sounds like a woman trying to sing like a man while falling out of a window.

Your video offerings however, are a great educational tool!

  P.S. I wanted to provide you with a simple utility but I'm locked into a very different project right now.



#7 pixelpedant OFFLINE  

pixelpedant

    Space Invader

  • Topic Starter
  • 46 posts

Posted Fri Jul 20, 2018 6:43 PM

I,m sorry to say, but... the sound of TI singing, to me sounds like a woman trying to sing like a man while falling out of a window.
 

 

:-D

 

Laughing out loud.  Honestly.  Well said.



#8 HOME AUTOMATION OFFLINE  

HOME AUTOMATION

    Chopper Commander

  • 130 posts

Posted Sat Jul 21, 2018 6:00 AM

I'm back again,

Recall is better this morning, the reason I used MINIMEMORY instead of 32K was not because the 32K was off-line but rather because I was completely unfamiliar with 32K usage by XB. Not knowing where it was safe to place my 5 lines of code in 32K. I instead resorted to what I knew best... MEDIUM MEMORY.

     THANX.



#9 HOME AUTOMATION OFFLINE  

HOME AUTOMATION

    Chopper Commander

  • 130 posts

Posted Fri Nov 2, 2018 11:18 PM

CALL SPGET serves as a simple, handy way to fetch LPC patterns in XB and the Speech Editor (which can then be saved, stored, modified, etc.).  But while TEII and the Text-to-Speech disk offer much richer speech composition options, it doesn't seem like there's a trivial way to dump patterns for subsequent use, or generate patterns ahead of time for performance reasons.  Or at least I can't see one.  Is there a method I'm missing here?  

Hi pixelpedant,

Your efforts have been missed...

I have uploaded my revamped solution to this older post...

 

#25 icon_share.png

 

I hope I will be seeing more from you...

Good Luck! :)


Edited by HOME AUTOMATION, Fri Nov 2, 2018 11:23 PM.


#10 Willsy OFFLINE  

Willsy

    River Patroller

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

Posted Sat Nov 3, 2018 11:24 AM

It would be nice if the current flock of emulators could simply stream all writes to the speech synth to a file (speech_out.bin) or something. I've asked for this option a couple of times over the years but to my knowledge it hasn't materialised, being quite low down on the priority list, which is understandable.

 

Mark



#11 mizapf OFFLINE  

mizapf

    River Patroller

  • 3,396 posts
  • Location:Germany

Posted Sat Nov 3, 2018 3:02 PM

Speaking for MAME, the problem is that adding everything into the code for later activation not only bloats the code, but it increases the complexity for the user as well. The first person likes to get some copies of the speech data, the next one wishes to get floppy output, the third one asks for RS232 and so on. I'd have to add even more command line arguments, and I already see people complaining about yet another thing to consider when trying to get MAME running.

 

On the other side, the way to go would be to add some few lines to the source code and to recompile, but I see that while many of you do have experience with building programs on the TI, only very few actually dare to build MAME from sources (which is, by the way, the easiest way to keep it updated), and even fewer have tried to apply such changes.



#12 Tursi OFFLINE  

Tursi

    Quadrunner

  • 5,322 posts
  • HarmlessLion
  • Location:BUR

Posted Sun Nov 4, 2018 2:56 PM

It would be nice if the current flock of emulators could simply stream all writes to the speech synth to a file (speech_out.bin) or something. I've asked for this option a couple of times over the years but to my knowledge it hasn't materialised, being quite low down on the priority list, which is understandable.

 

Mark

 

Classic99 can do it. It's one of the breakpoint types.

 

(Edit) Speech is at >9400, so setting "L9400=1" will log all speech writes to "dump1.bin". You have to close the emulator to get it to close the file. Just tested that this still works, but it's been in there since December 2015. ;)


Edited by Tursi, Sun Nov 4, 2018 3:01 PM.





0 user(s) are browsing this forum

0 members, 0 guests, 0 anonymous users