Tag: syn6988

  • Adding speech to MMBasic

    Yup, it’s another “let’s wire up a SYN6988 board” thing, this time for MMBasic running on the Armmite STM32F407 Module (aka ‘Armmite F4’). This board is also known as the BLACK_F407VE, which also makes a nice little MicroPython platform.

    Uh, let’s not dwell too much on how the SYN6988 seems to parse 19:51 as “91 minutes to 20” …

    Wiring

    SYN6988Armmite F4
    RXPA09 (COM1 TX)
    TXPA10 (COM1 RX)
    RDYPA08
    your choice of 3.3 V and GND connections, of course

    Where to buy: AliExpress — KAIKAI Electronics Wholesale Store : High-end Speech Synthesis Module Chinese/English Speech Synthesis XFS5152 Real Pronunciation TTS

    Yes, I know it says it’s an XFS5152, but I got a SYN6988 and it seems to be about as reliable a source as one can find. The board is marked YS-V6E-V1.03, and even mentions SYN6988 on the rear silkscreen:

    Code

    REM                 SYN6988 speech demo - MMBasic / Armmite F4
    REM                 scruss, 2023-07
    
    OPEN "COM1:9600" AS #5
    REM                 READY line on PA8
    SETPIN PA8, DIN, PULLUP
    
    REM    you can ignore font/text commands
    CLS
    FONT 1
    TEXT 0,15,"[v1]Hello - this is a speech demo."
    say("[v1]Hello - this is a speech demo.")
    TEXT 0,30,"[x1]soundy[d]"
    say("[x1]soundy[d]"): REM    chimes
    TEXT 0,45,"The time is "+LEFT$(TIME$,5)+"."
    say("The time is "+LEFT$(TIME$,5)+".")
    END
    
    SUB say(a$)
      LOCAL dl%,maxlof%
      REM     data length is text length + 2 (for the 1 and 0 bytes)
      dl%=2+LEN(a$)
      maxlof%=LOF(#5)
      REM     SYN6988 simple data packet
      REM      byte  1 : &HFD
      REM      byte  2 : data length (high byte)
      REM      byte  3 : data length (low byte)
      REM      byte  4 : &H01
      REM      byte  5 : &H00
      REM      bytes 6-: ASCII string data
      PRINT #5, CHR$(&hFD)+CHR$(dl%\256)+CHR$(dl% MOD 256)+CHR$(1)+CHR$(0)+a$;
      DO WHILE LOF(#5)<maxlof%
      REM       pause while sending text
        PAUSE 5
      LOOP
      DO WHILE PIN(PA8)<>1
        REM       wait until RDY is high
        PAUSE 5
      LOOP
      DO WHILE PIN(PA8)<>0
        REM       wait until SYN6988 signals READY
        PAUSE 5
      LOOP
    END SUB
    

    For more commands, please see Embedded text commands

    Heres the auto-translated manual for the SYN6988: