L

LambdaSpeak Speech Synthesizer, Sample Player, RTC, MP3, Serial Interface, MIDI

Started by LambdaMikel, 08:56, 01 May 17

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

LambdaMikel

Another caveat - it is NOT possible to make the Emic 2 speak synchronously.
The DEC parser mode is also buffered. Hence, there will be a short delay: I am buffering the allophones and speaking starts when the last allophone has been delivered a second ago or so, or when the buffer is full. That means that certain software, such as the screen reading "echo" of the SSA-1 software, which constantly sends bytes if you list a long basic program, will not work perfectly. There will be delays when the buffer is full, and an "incomplete" buffer might be spoken. But for short utterances such as in Roland in Space, there is no problem with the buffering approach.

LambdaMikel

 The thread

http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/amstrad-ssa-1-speech-synthesizer-rom-needed/msg4641/#msg4641

is a great source of information, but given the problems figuring out the exact timings for Roland in Space title screen, I decided to dust-off my real SSA-1 and connect it to my recently acquired HP 1662A Logic Analyzer (I got that thing for 50$ !).

I am attaching the screenshots for the title screen speech "Amstrad produly presents..." - the first three bytes or so.
Lab 1 = ~LRQ
Lab 2 = SBY
Lab 3 = ~ALD

Similar to the measurements in the cited thread above.

That should give me some material to work with...
[attachimg=1][attachimg=2][attachimg=3][attachimg=4][attachimg=5][attachimg=6][attachimg=6][attachimg=7]

LambdaMikel

[attachimg=1][attachimg=2][attachimg=4][attachimg=5][attachimg=6][attachimg=7][attachimg=8][attachimg=9][attachimg=3]

LambdaMikel

Seem I finally figured it out  :)



Thanks to gerald in the other thread

http://www.cpcwiki.eu/forum/amstrad-cpc-hardware/amstrad-ssa-1-speech-synthesizer-rom-needed/120/

There is still some finetuning of the allophones possible - the Emic 2 allows to specify the lengths. I haven't done that yet. It uses Emic 2's default allophones. Some of the mappings were not so clear to me, but as you can see in the video, it is not much worse than the original SSA-1.

Also, the effect that the Emic 2 cannot really speak synchronously as the allophones arrive, but has to buffer them first, is visible in the video, if you look at the "talking head" in the SSA-1 software loader. The head speaks silently, and the speech comes later.

Next step is to make PCB version 2. This version will have (at least) 2 modes:

- the native Emic 2 mode, as shown previously
- the SSA-1 emulation, as shown in this video
- ( maybe also DK'tronics? ) But it seems that might not be so worthwhile, as not so many games seems to support DK'tronics speech synthesizer.

The DIP switch will be used to select some of these options.



LambdaMikel

I tried to squeeze the board's height as much as possible, but even this new version will still block parts of the DD3 display  :( Must use a cable otherwise.

LambdaMikel

I now have the final PCB. That way the DD3 display is unobstructed. It is submitted to the PCB manufacturer... a small batch of 3. Let's see if it works  :)

Btw, the large empty area on the top right below the "Lambda Speak" logo is reserved for a little loudspeaker. The Emic 2 has a built-in amplifier.

[attach=2]

LambdaMikel

The PCBs are back... tomorrow I will put the iron to work - let's see if it works  :)
Stay tuned  :P

Bryce

Hey, great score on the HP 1662A! They're a bit big but a great device, especially for retro computers where you can really make use of the state analysis mode that modern LA's unfortunately don't have any more :(

Bryce.

LambdaMikel

Yeah, that thing is fun - and really useful for this project!

The PCB works - here is a new video:



Will still need one more PCB revision though unfortunately: the space for the DDI-3 LCD display is still slightly too small.

And then, the software needs some more work:
- read DIP switches at startup to determine initial modes (choices: Emic 2 native, and SSA-1 emulation, as well as different voices for SSA-1)
- add some &FF control byte facility such that the modes can be changed, even from SSA-1 mode
- add reset handler


LambdaMikel

... how about a round of "Alex Higgins World Pool" instead of "Roland in Space"  :P



LambdaMikel

Bryce wrote:
QuoteHey, great score on the HP 1662A! They're a bit big but a great device, especially for retro computers where you can really make use of the state analysis mode that modern LA's unfortunately don't have any more

I must say that this state analysis mode is still a bit of a mystery to me... so far I just used the timed mode. And even that was not easy to understand. The analyzer certainly requires far more time and study for proper use. I managed to find a PDF of the manual online, but boy, that thing is not easy to understand... it has tons of menus and configuration options. For 90% of them I have no idea what they do - I was lucky to figure out how to acquire the traces by playing around and using some intuition. If you can give some advice about logic state mode etc. that would be great, Bryce! 

Bryce

State analysis is more or less just a mode where the LA uses the clock of the device you're testing instead of its own internal clock. So the LA is exactly in sync with the DUT. That way you can see exactly what level each pin was at on each clock cycle. Unfortunately modern LAs don't include thiis option any more :(

Bryce.

LambdaMikel

Thanks for the explanation, Bryce!

And here comes my next question  ;) I was asked again about MX4 compatibility - I don't have any MX4 equipment to test unfortunately, but chances are that LambdaSpeak already is compatible?! LambdaSpeak's IDC box header has the following layout:


--------------|_|---------------
| pin1                   pin49 |
| pin2                   pin50 |
--------------------------------


That means, pin 1 = sound, pin 2 = GND, pin 49 = GND, pin 50 = CLK of the CPC 464.

Will that work, or does it require changes?

Bryce

It looks like you have the pins flipped? How are you connecting it to your CPC? The correct layout would be:

pin2                           pin50
pin1                           pin49

So you would have to mount the 90° header on the rear of the PCB to get it connected correctly?

Did you make the edge to IDC adapter PCB layout yourself? It looks like the problem started there.

Bryce.

LambdaMikel

I see. Yes, I used my CPC Expansion Breadboard adapter for this:
http://www.ebay.com/itm/Amstrad-Schneider-CPC-464-Expansion-Port-Breadboard-Connector-KIT-/192224312275?hash=item2cc1763bd3:g:ZqoAAOSwJ4hY-5Dq
(only difference is that the female IDC pin header connector is facing upwards for LambdaSpeak, whereas it is facing downwards on the Ebay auction image).
When I did the PCB design, this layout occurred "naturally", so to speak, so I am a bit surprised that the pins are flipped with regard to MX4.

Well, I can make another version with pins flipped.

Where can I buy a mother4x motherboard to test it?

LambdaMikel

Just to be sure - the layout I posted is when I am turning the card upside down such that I am looking directly INTO the IDC box header (male IDC).
Did you by any chance describe the layout on the motherboard (female IDC connectors on board?) That would describe the difference as well.

Bryce

There's an easy way to test if the pin numbering is correct: Put pins on the PCB instead of a socket and then connect an IDC connector/cable to the header: Is "your" pin one connected to the red wire? If not you've got it wrong.

Bryce.

LambdaMikel

Hmm, the pins / connector on LambdaSpeak are already PINs / male.
If I do this test you suggested, then pin1 of the cable (marked by a little arrow) alligns with pin 49.

LambdaMikel

But with your test, there are still 2 possible outcomes depending on how I put the cable on the headers
Without the little notch? It can then either be pin 2 or pin 49 in my case.

LambdaMikel

This is how I got my layout:


--------------|_|---------------
| pin1                   pin49 |
| pin2                   pin50 |
--------------------------------


If you look at the CPC 464 expansion port from behind, you will get the following picture:


                                  --------------------------------
LOUDSPEAKER   VIDEO   POWER       | pin49                   pin1 |
                                  | pin50                   pin2 |
                                  --------------------------------


Then if you pair this with an IDC box header "1-to-1", such that the notch is facing upwards, then you will get my allignment, where
pin1 = upper left.

Now, if I were to orient the IDC header such that the notch would be facing downwards, then I will get pin 2 = pin 1...

LambdaMikel

Well, flipping the rows (vertically) is easy.. as long as I don't need to flip the horizontal axis. That would be bad!

Duke


You need:
--------------|_|---------------
| pin2                   pin50 |
| pin1                   pin49 |
--------------------------------

For top side 90 deg IDC connector mount for MotherX4 compatiblity.


LambdaMikel


LambdaMikel

This evening, I have finished the software part:

       
  • reset button handler
  • dip switches for mode selection: sw1 = emic / ssa-1, sw2 + sw3 : voice, sw4 = speaker on/off, sw5 - sw8 = io address of LambdaSpeak
  • control byte: sending &ff to io address toggles between ssa-1 emulation and native emic 2 mode (one can leave ssa-1 mode, change the default voice and volume etc. using native emic 2 mode, and go back to ssa-1, and the new voice will be active!)
With regard to the IO addresses, I currently have
sw5 = faee, fafe, fbee, fbfe (ssa- and dk'tronics)
sw6 = fa00, fb00
sw7 = fa01, fb01
sw8 = fa02, fb02

Only one switch can be "on" of course (and exactly one switch has to be on).

LambdaSpeak cannot distinguish between fa and fb (by design), because ssa-1 replies to both addresses.

It also uses the DK'tronics port, but only SSA-1 emulation is implemented.

Does anybody have any problems with the ports for sw6 - sw8? I looked at the CPC io port list and couldn't find any hardware that would be using these, so it should be fine?

LambdaMikel

Quote from: LambdaMikel on 07:10, 12 July 17sw6 = fa00, fb00 sw7 = fa01, fb01 sw8 = fa02, fb02

Interesting - tried that and got a colorful screen with green background and random pixels at startup  :-X Seems some CPC internal hardware is not very selective about decoding...

Changed these to

sw6 = fad5, fbd5
sw7 = fad6, fbd6
sw8 = fad7, fbd7

This worked with my equipment, and I couldn't find any other hardware listed at these ports.


Powered by SMFPacks Menu Editor Mod