Jump to content

Antichambre

Programmer
  • Posts

    1,291
  • Joined

  • Last visited

  • Days Won

    101

Posts posted by Antichambre

  1. Hello,

    SAM, Software Automatic Mouth, is an old "text-to-speech" program. It was released in 1982 and worked on most computers of the era.
    It was recently adapted to C by Sebastian Macke as a very tiny code. Source code Github.

    Here a web version of SAM, and a another one with parameters here.

    I've got two Texas Instrument speech device, one "Speak and Spell" and a "Math and Spell" but they are waiting since a long time now to be modified... Too much time :/
    So when I read the @imaginarionthread
    I couldn't help but go and look at the code.


    And obviously I tried to do something with it :decayed:

    First thing to understand is this program is not realtime, after converting the text to phoneme, each of this phoneme are converted to formants, then each sample is pushed in a buffer.
    When finished the samples buffer is written to a wave file or sent to an audio output using SDL.
    But it's 22KHz 8bit sound then depending on the duration this buffer can be too much big for our small Core.  But ok let's try...

    For us(MIDIboxer/musician) the purpose is to play it from MIDI, the perfect thing should be to get a text, a sentence or a word associated to midi note, like a "speech kit" or one text pitched along the midi note range, but that will be for another time ;)
    First thing to try is to adapt the code to MIOS32, put something in and check what it can output.
    The best and easiest way for a test, is to implement SAM as a module, write some code to input text from MIOS Studio terminal then write the wave file to the SD card

    This is what I did:
    So I imported the github flies and put it in a new software module named "sam".
    Added a sam.mk file in it to include the necessary .c and .h files.

    # defines additional rules for integrating the random module
    
    # enhance include path
    C_INCLUDE += -I $(MIOS32_PATH)/modules/sam/src
    
    
    # add modules to thumb sources (TODO: provide makefile option to add code to ARM sources)
    THUMB_SOURCE += \
      $(MIOS32_PATH)/modules/sam/src/sam.c \
      $(MIOS32_PATH)/modules/sam/src/debug.c \
      $(MIOS32_PATH)/modules/sam/src/render.c \
      $(MIOS32_PATH)/modules/sam/src/processframes.c \
      $(MIOS32_PATH)/modules/sam/src/createtransitions.c \
      $(MIOS32_PATH)/modules/sam/src/reciter.c
    
    
    # directories and files that should be part of the distribution (release) package
    DIST += $(MIOS32_PATH)/modules/sam/src

    Then I took the inspiration from the non included main.c file to create a MIOS32 project and write a terminal.c file

    Some modification were done in the SAM's files.

    • all printf function were replaced by MIOS32_MIDI_SendDebugMessage
    • the buffer memory allocation malloc was removed and size was reduced until no more "FAULT" error ;)
    • the 8 bits samples were reduced to 4bits to meet the original SID resolution, I put it back to 8. This can be done easily after if necessary depending on our future audio output device.
       

    After a couple of hours, it was working.
    Command and text are send to SAM thru the terminal, the result is written on the SD Card
    Here the menu and usage then the debug verbose:
     

    [28337.121] SD Card status 1
    [28339.122] SD Card status 3
    [28339.122] SD Card CONNECTED
    
    [28342.433] help
    
    [28342.435] Welcome to the HAARP Terminal!
    [28342.435] Following commands are available:
    [28342.435]   sam_usage:                         SAM Usage
    [28342.435]   sam:                               SAM
    [28342.435]   reset:                             resets the MIDIbox (!)
    [28342.435]   help:                              this page
    
    [28345.225] sam_usage
    
    [28345.227] usage: sam [options] Word1 Word2 ....
    [28345.227] options
    [28345.227]   -phonetic     enters phonetic mode. (see below)
    [28345.227]   -pitch number    set pitch value (default=64)
    [28345.227]   -speed number    set speed value (default=72)
    [28345.227]   -throat number    set throat value (default=128)
    [28345.227]   -mouth number    set mouth value (default=128)
    [28345.227]   -wav filename    output to wav instead of libsdl
    [28345.228]   -sing      special treatment of pitch
    [28345.228]   -debug      print additional debug messages
    [28345.228] 
    [28345.228]      VOWELS                            VOICED CONSONANTS  
    [28345.228] IY           f(ee)t                    R        red    
    [28345.228] IH           p(i)n                     L        allow    
    [28345.228] EH           beg                       W        away    
    [28345.228] AE           Sam                       W        whale    
    [28345.228] AA           pot                       Y        you    
    [28345.228] AH           b(u)dget                  M        Sam    
    [28345.228] AO           t(al)k                    N        man    
    [28345.229] OH           cone                      NX       so(ng)    
    [28345.229] UH           book                      B        bad    
    [28345.229] UX           l(oo)t                    D        dog    
    [28345.229] ER           bird                      G        again    
    [28345.229] AX           gall(o)n                  J        judge    
    [28345.229] IX           dig(i)t                   Z        zoo    
    [28345.229]                ZH       plea(s)ure  
    [28345.229]    DIPHTHONGS                          V        seven    
    [28345.229] EY           m(a)de                    DH       (th)en    
    [28345.230] AY           h(igh)            
    [28345.230] OY           boy            
    [28345.230] AW           h(ow)                     UNVOICED CONSONANTS  
    [28345.230] OW           slow                      S         Sam    
    [28345.230] UW           crew                      Sh        fish    
    [28345.230]                                        F         fish    
    [28345.230]                                        TH        thin    
    [28345.230]  SPECIAL PHONEMES                      P         poke    
    [28345.230] UL           sett(le) (=AXL)           T         talk    
    [28345.230] UM           astron(omy) (=AXM)        K         cake    
    [28345.231] UN           functi(on) (=AXN)         CH        speech    
    [28345.232] Q            kitt-en (glottal stop)    /H        a(h)ead  
    
    [28359.145] sam -debug -pitch 64 -speed 128 -mouth 128 -wav TEST_OK midibox sam is great!
    
    [28359.147] text input: MIDIBOX SAM IS GREAT! 
    [28359.147] Applying rule: 
    [28359.147] (
    [28359.147] M
    [28359.147] )
    [28359.147]  -> 
    [28359.147] M
    [28359.147] 
    [28359.147] Applying rule: 
    [28359.147] (
    [28359.147] I
    [28359.147] )
    [28359.147] ^
    [28359.148] +
    [28359.148] :
    [28359.148] #
    [28359.148]  -> 
    [28359.148] I
    [28359.148] H
    [28359.148] 
    [28359.148] Applying rule: 
    [28359.148] (
    [28359.148] D
    [28359.148] )
    [28359.148]  -> 
    [28359.148] D
    [28359.148] 
    [28359.148] Applying rule: 
    [28359.148] I
    [28359.148] ^
    [28359.148] (
    [28359.148] I
    [28359.148] )
    [28359.148] ^
    [28359.148] #
    [28359.148]  -> 
    [28359.148] I
    [28359.148] H
    [28359.148] 
    [28359.148] Applying rule: 
    [28359.148] (
    [28359.148] B
    [28359.148] )
    [28359.148]  -> 
    [28359.148] B
    [28359.148] 
    [28359.148] Applying rule: 
    [28359.148] (
    [28359.148] O
    [28359.148] )
    [28359.148]  -> 
    [28359.148] A
    [28359.148] A
    [28359.148] 
    [28359.149] Applying rule: 
    [28359.149] (
    [28359.149] X
    [28359.149] )
    [28359.149]  -> 
    [28359.149] K
    [28359.149] S
    [28359.149] 
    [28359.149] Applying rule: 
    [28359.149] (
    [28359.149] S
    [28359.149] )
    [28359.149]  -> 
    [28359.149] S
    [28359.149] 
    [28359.149] Applying rule: 
    [28359.149] (
    [28359.149] A
    [28359.149] )
    [28359.149]  -> 
    [28359.149] A
    [28359.149] E
    [28359.149] 
    [28359.149] Applying rule: 
    [28359.149] (
    [28359.149] M
    [28359.149] )
    [28359.149]  -> 
    [28359.149] M
    [28359.149] 
    [28359.149] Applying rule: 
    [28359.149] (
    [28359.149] I
    [28359.149] )
    [28359.149]  -> 
    [28359.149] I
    [28359.149] H
    [28359.149] 
    [28359.149] Applying rule: 
    [28359.149]  
    [28359.149] :
    [28359.149] #
    [28359.149] (
    [28359.149] S
    [28359.150] )
    [28359.150]  
    [28359.150]  -> 
    [28359.150] Z
    [28359.150] 
    [28359.150] Applying rule: 
    [28359.150] (
    [28359.150] G
    [28359.150] R
    [28359.150] E
    [28359.150] A
    [28359.150] T
    [28359.150] )
    [28359.150]  -> 
    [28359.150] G
    [28359.150] R
    [28359.150] E
    [28359.150] Y
    [28359.150] 4
    [28359.150] T
    [28359.150] 
    [28359.150] Applying rule: 
    [28359.150] (
    [28359.150] !
    [28359.150] )
    [28359.150]  -> 
    [28359.150] .
    [28359.150] 
    [28359.150] phonetic input:  MIHDIHBAAKS SAEM IHZ GREY4T. �
    [28359.150] ===========================================
    [28359.150] Internal Phoneme presentation:
    [28359.150]  idx    phoneme  length  stress
    [28359.150] ------------------------------
    [28359.151]    0       *        0       0
    [28359.151]   27      M*        0       0
    [28359.151]    6      IH        0       0
    [28359.151]   57      D*        0       0
    [28359.151]    6      IH        0       0
    [28359.151]   54      B*        0       0
    [28359.151]    9      AA        0       0
    [28359.151]   72      K*        0       0
    [28359.151]   32      S*        0       0
    [28359.151]    0       *        0       0
    [28359.151]   32      S*        0       0
    [28359.151]    8      AE        0       0
    [28359.151]   27      M*        0       0
    [28359.151]    0       *        0       0
    [28359.151]    6      IH        0       0
    [28359.152]   38      Z*        0       0
    [28359.152]    0       *        0       0
    [28359.152]   60      G*        0       0
    [28359.152]   23      R*        0       0
    [28359.152]   48      EY        0       4
    [28359.152]   69      T*        0       0
    [28359.152]    1      .*        0       0
    [28359.152]    0       *        0       0
    [28359.154] ===========================================
    [28359.154] 
    [28359.154] Parser2
    [28359.154] 0:  *
    [28359.154] 1: M*
    [28359.154] 2: IH
    [28359.154] 3: D*
    [28359.154] RULE: Soften T or D following vowel or ER and preceding a pause -> DX
    [28359.154] 4: IH
    [28359.154] 5: B*
    [28359.154] 6: AA
    [28359.154] 7: K*
    [28359.154] RULE: K <VOWEL OR DIPTHONG NOT ENDING WITH IY> -> KX <VOWEL OR DIPTHONG NOT ENDING WITH IY>
    [28359.154] 8: S*
    [28359.154] 9:  *
    [28359.154] 10: S*
    [28359.154] 11: AE
    [28359.154] 12: M*
    [28359.154] 13:  *
    [28359.154] 14: IH
    [28359.154] 15: Z*
    [28359.154] 16:  *
    [28359.154] 17: G*
    [28359.154] RULE: G <VOWEL OR DIPTHONG NOT ENDING WITH IY> -> GX <VOWEL OR DIPTHONG NOT ENDING WITH IY>
    [28359.154] 18: R*
    [28359.154] 19: EY
    [28359.154] RULE: insert YX following dipthong ending in IY sound
    [28359.154] 20: YX
    [28359.154] 21: T*
    [28359.154] 22: .*
    [28359.154] 23:  *
    [28359.154] RULE: Lengthen <FRICATIVE> or <VOICED> between <VOWEL> and <PUNCTUATION> by 1.5
    [28359.154] PRE
    [28359.154] phoneme 20 (YX) length 8
    [28359.154] POST
    [28359.154] phoneme 20 (YX) length 13
    [28359.154] RULE: Lengthen <FRICATIVE> or <VOICED> between <VOWEL> and <PUNCTUATION> by 1.5
    [28359.154] PRE
    [28359.154] phoneme 21 (T*) length 4
    [28359.154] POST
    [28359.154] phoneme 21 (T*) length 7
    [28359.154] RULE: <VOWEL> <VOICED CONSONANT> - increase vowel by 1/2 + 1
    [28359.154] PRE
    [28359.154] phoneme 3 (DX) length 2
    [28359.154] POST
    [28359.154] phoneme 4 (IH) length 11
    [28359.154] RULE: <VOWEL> <UNVOICED PLOSIVE> - decrease vowel by 1/8th
    [28359.155] PRE
    [28359.155] phoneme 6 (AA) length 11
    [28359.155] POST
    [28359.155] phoneme 6 (AA) length 10
    [28359.155] RULE: <VOWEL> <VOICED CONSONANT> - increase vowel by 1/2 + 1
    [28359.155] PRE
    [28359.155] phoneme 10 (S*) length 2
    [28359.155] POST
    [28359.155] phoneme 11 (AE) length 11
    [28359.155] RULE: <VOWEL> <VOICED CONSONANT> - increase vowel by 1/2 + 1
    [28359.155] PRE
    [28359.155] phoneme 13 ( *) length 0
    [28359.155] POST
    [28359.155] phoneme 14 (IH) length 11
    [28359.155] RULE: <LIQUID CONSONANT> <DIPTHONG> - decrease by 2
    [28359.155] PRE
    [28359.155] phoneme 18 (R*) length 10
    [28359.155] POST
    [28359.155] phoneme 18 (R*) length 8
    [28359.156] RULE: <VOWEL> <UNVOICED PLOSIVE> - decrease vowel by 1/8th
    [28359.156] PRE
    [28359.156] phoneme 20 (YX) length 13
    [28359.156] POST
    [28359.156] phoneme 20 (YX) length 12
    [28359.156] ===========================================
    [28359.156] Internal Phoneme presentation:
    [28359.156]  idx    phoneme  length  stress
    [28359.156] ------------------------------
    [28359.156]    0       *        0       0
    [28359.156]   27      M*        7       0
    [28359.156]    6      IH        8       0
    [28359.156]   30      DX        2       0
    [28359.156]    6      IH       11       0
    [28359.156]   54      B*        6       0
    [28359.157]   55      **        1       0
    [28359.157]   56      **        2       0
    [28359.157]    9      AA       10       0
    [28359.157]   75      KX        6       0
    [28359.157]   76      **        1       0
    [28359.157]   77      **        4       0
    [28359.157]   32      S*        2       0
    [28359.157]    0       *        0       0
    [28359.157]   32      S*        2       0
    [28359.157]    8      AE       11       0
    [28359.157]   27      M*        7       0
    [28359.157]    0       *        0       0
    [28359.157]    6      IH       11       0
    [28359.157]   38      Z*        6       0
    [28359.157]    0       *        0       0
    [28359.158]   63      GX        6       0
    [28359.158]   64      **        1       0
    [28359.158]   65      **        2       0
    [28359.158]   23      R*        8       5
    [28359.158]   48      EY       14       4
    [28359.158]   21      YX       12       4
    [28359.158]   69      T*        7       0
    [28359.158]   70      **        2       0
    [28359.158]   71      **        2       0
    [28359.158]    1      .*       18       0
    [28359.158]  254      ??             0
    [28359.158]    0       *        0       0
    [28359.158] ===========================================
    [28359.158] 
    [28359.159] ===========================================
    [28359.159] Final data for speech output:
    [28359.159]  flags ampl1 freq1 ampl2 freq2 ampl3 freq3 pitch
    [28359.159] ------------------------------------------------
    [28359.159]     0     9     6     2    46     0    81    61
    [28359.159]     0     9     6     2    46     0    81    61
    [28359.159]     0     9     6     2    46     0    81    61
    [28359.159]     0     9     6     2    46     0    81    61
    [28359.159]     0     9     6     2    46     0    81    61
    [28359.159]     0     9     6     2    46     0    81    61
    [28359.160]     0     9     6     2    46     0    81    61
    [28359.160]     0     9    10     4    59     2    87    59
    [28359.160]     0    11    14     8    72     4    93    57
    [28359.160]     0    11    14     8    72     4    93    57
    [28359.160]     0    11    14     8    72     4    93    57
    [28359.160]     0    11    14     8    72     4    93    57
    [28359.160]     0    11    14     8    72     4    93    57
    [28359.160]     0    11    14     8    72     4    93    57
    [28359.160]     0    23    96    23   151    29   102    16
    [28359.160]     0    44   179     6   230     6   111   231
    [28359.161]     0     0     6     0    54     0   121    61
    [28359.161]     0     2     8     2    60     2   197    60
    [28359.161]     0     4    11     4    66     2    17    59
    [28359.161]     0    11    14     8    72     4    93    57
    [28359.161]     0    11    14     8    72     4    93    57
    [28359.161]     0    11    14     8    72     4    93    57
    [28359.161]     0    11    14     8    72     4    93    57
    [28359.162]     0    11    14     8    72     4    93    57
    [28359.162]     0    11    14     8    72     4    93    57
    [28359.162]     0    11    14     8    72     4    93    57
    [28359.162]     0    11    14     8    72     4    93    57
    [28359.162]     0    26    76    29   124     2   154    26
    [28359.162]     0     9   138    14   177     6   215   251
    [28359.162]     0    36   200    30   229    36    20   220
    [28359.162]     0     2     6     0    26     0    81    61
    [28359.162]     0     2     6     0    26     0    81    61
    [28359.162]     0     2     6     0    26     0    81    61
    [28359.162]     0     2     6     0    26     0    81    61
    [28359.162]     0     2     6     1    26     0    81    61
    [28359.162]     0     0     6     0    26     0    81    61
    [28359.162]     0     0     6     0    26     0    81    61
    [28359.163]     0     3    12     2    30     0    83    58
    [28359.163]     0     6    19     4    35     0    86    55
    [28359.163]     0    15    26    11    40     1    89    51
    [28359.163]     0    15    26    11    40     1    89    51
    [28359.163]     0    15    26    11    40     1    89    51
    [28359.163]     0    15    26    11    40     1    89    51
    [28359.163]     0    15    26    11    40     1    89    51
    [28359.163]     0    15    26    11    40     1    89    51
    [28359.163]     0    20    65    30    47     8    89    32
    [28359.164]     0    23   104    23    54    23    90    12
    [28359.164]     0     9   144    16    62    17    91   248
    [28359.164]     0    44   183    44    69    10    92   229
    [28359.164]     0    51   222    51    76    73    93   209
    [28359.164]     0     0     6     0    84     0    94    61
    [28359.164]     0     0     6     0    84     0    94    61
    [28359.164]     0     0     6     0    84     0    94    61
    [28359.164]     0     0     6     6    84     3    94    61
    [28359.164]     0     0     6     0    84     0    94    61
    [28359.165]     0     0     6     0    84     0    94    61
    [28359.165]     0     0     6     0    84     0    94    61
    [28359.165]     0     0     6     0   133     0    95    61
    [28359.165]   241     0     6     0   182     0    96    61
    [28359.165]   241     0     6     0   231     0    97    61
    [28359.165]   241     0     6     0    24     0    98    61
    [28359.165]   241     0     6     0    73     0    99    61
    [28359.166]     0     2    10     2   134     2   160    59
    [28359.166]     0     4    15     4   195     2   221    57
    [28359.166]     0     8    19     6     0     3    26    55
    [28359.166]     0    15    24    13    62     4    88    52
    [28359.166]     0    15    24    13    62     4    88    52
    [28359.166]     0    15    24    13    62     4    88    52
    [28359.166]     0    15    24    13    62     4    88    52
    [28359.166]     0    15    24    13    62     4    88    52
    [28359.166]     0    15    24    13    62     4    88    52
    [28359.166]     0    15    24    13    62     4    88    52
    [28359.167]     0    15    24    13    62     4    88    52
    [28359.167]     0     6   143    10   182     6   212   249
    [28359.167]     0     9     6     2    46     0    81    61
    [28359.167]     0     9     6     2    46     0    81    61
    [28359.167]     0     9     6     2    46     0    81    61
    [28359.167]     0     9     6     2    46     0    81    61
    [28359.167]     0     9     6     2    46     0    81    61
    [28359.168]     0     9     6     2    46     0    81    61
    [28359.168]     0     9    10     4    59     2    87    59
    [28359.168]     0    11    14     8    72     4    93    57
    [28359.168]     0    11    14     8    72     4    93    57
    [28359.168]     0    11    14     8    72     4    93    57
    [28359.168]     0    11    14     8    72     4    93    57
    [28359.168]     0    11    14     8    72     4    93    57
    [28359.168]     0    11    14     8    72     4    93    57
    [28359.168]     0    11    14     8    72     4    93    57
    [28359.168]     0    11    14     8    72     4    93    57
    [28359.168]     0    29    64    23   119    20    93    32
    [28359.169]     0    18   114    20   166    26    93     7
    [28359.169]     1     6   164     6   213     6    93   238
    [28359.169]     1    66   214    73     4    86    93   213
    [28359.169]     1     8     9     2    51     0    93    60
    [28359.169]     1     8     9     2    51     0    93    60
    [28359.169]     1     8     9     2    51     0    93    60
    [28359.169]     1    29    72     2    59     0    93    28
    [28359.169]     0    16   135     6    67     0    93   253
    [28359.169]     0    50   198    48    75     0    93   221
    [28359.169]     0     1     6     0    84     0    94    61
    [28359.170]     0     1     6     0    84     0    94    61
    [28359.170]     0     1     6     0    84     0    94    61
    [28359.170]     0     1     6     0    84     0    94    61
    [28359.170]     0     2     6     1    84     0    94    61
    [28359.170]     0     0     6     0    84     0    94    61
    [28359.170]     0     0     6     0    84     0    94    61
    [28359.170]     0     2     9     2   139     1   149   109
    [28359.170]     0     3    12     3   195     2   205   157
    [28359.170]     0     5    15     4   250     2     4   206
    [28359.170]     0     9    18     6    50     3    60   254
    [28359.171]     0     9    18     6    50     3    60    48
    [28359.171]     0     9    18     6    50     3    60    48
    [28359.171]     0     9    18     6    50     3    60    48
    [28359.171]     0     9    18     6    54     3    66    70
    [28359.171]     0     9    18     8    58     3    72    93
    [28359.171]     0    11    18     9    63     4    78   116
    [28359.171]     0    11    18    11    67     4    84   139
    [28359.171]     0    13    18    13    72     5    90   162
    [28359.171]     0    13    18    13    72     5    90   184
    [28359.171]     0    13    18    13    72     5    90   207
    [28359.172]     0    13    18    13    72     5    90   230
    [28359.172]     0    13    18    13    72     5    90   253
    [28359.172]     0    13    18    13    72     5    90    20
    [28359.172]     0    13    18    13    72     5    90    45
    [28359.172]     0    13    18    13    72     5    90    46
    [28359.172]     0    13    49     8   103    10    90    35
    [28359.172]     0    13    81    26   135    29    90    24
    [28359.172]     0    13   112    16   166    18    91    12
    [28359.172]     0    13   144     6   198    10    91     1
    [28359.172]     0    13   175     6   229     6    91   246
    [28359.173]     0    13   207    46     5    24    92   235
    [28359.173]     0    13   238    66    36    26    92   223
    [28359.173]     0    13    14     9    68     4    93    84
    [28359.173]     0    13    14     9    68     4    93    88
    [28359.173]     0    13    14     9    68     4    93    93
    [28359.173]     0    13    14     9    68     4    93    97
    [28359.173]     0    13    14     9    68     4    93   102
    [28359.173]     0    13    14     9    68     4    93    61
    [28359.173]     0    13    14     9    68     4    93    62
    [28359.173]     0    26    76    27   131     2   100    56
    [28359.173]     0     9   138    16   195     6   107    51
    [28359.174]     0    50   200    50     2    36   114    45
    [28359.174]     0     0     6     0    66     0   121   168
    [28359.174]     0     0     6     0    66     0   121   193
    [28359.174]     0     0     6     0    66     0   121   219
    [28359.174]     0     0     6     0    66     0   121   244
    [28359.175]     0     0     6     0    66     0   121    14
    [28359.175]    25     0     6     0    66     0   121    75
    [28359.175]    25     0     6     0    66     0   121    76
    [28359.175]     0     0     6     0    66     0   121    77
    [28359.175]     0     0     9     0    66     0   177    99
    [28359.176]     0     0    12     0    66     0   234   121
    [28359.176]     0     0    15     0    66     0    34   144
    [28359.176]     0     0    19     0    67     0    91   166
    [28359.176]     0     0    19     0    67     0    91   190
    [28359.176]     0     0    19     0    67     0    91   214
    [28359.176]     0     0    19     0    67     0    91   238
    [28359.176]     0     0    19     0    67     0    91     6
    [28359.176]     0     0    19     0    67     0    91    30
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0     0     0     0     0     0     0
    [28359.176]     0     0     0     0     0     0     0     0
    [28359.176]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.181]     0     0     0     0     0     0     0     0
    [28359.181]     0     0     0     0     0     0     0     0
    [28359.181]     0     0     0     0     0     0     0     0
    [28359.181]     0     0     0     0     0     0     0     0
    [28359.181]     0     0     0     0     0     0     0     0
    [28359.181]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.183]     0     0     0     0     0     0     0     0
    [28359.183]     0     0     0     0     0     0     0     0
    [28359.183]     0     0     0     0     0     0     0     0
    [28359.183]     0     0     0     0     0     0     0     0
    [28359.183]     0     0     0     0     0     0     0     0
    [28359.183]     0     0     0     0     0     0     0     0
    [28359.183]     0     0     0     0     0     0     0     0
    [28359.183]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.185]     0     0     0     0     0     0     0     0
    [28359.185]     0     0     0     0     0     0     0     0
    [28359.185]     0     0     0     0     0     0     0     0
    [28359.185]     0     0     0     0     0     0     0     0
    [28359.185]     0     0     0     0     0     0     0     0
    [28359.185]     0     0     0     0     0     0     0     0
    [28359.185]     0     0     0     0     0     0     0     0
    [28359.185] ===========================================
    [28359.526] TEST_OK.WAV saved


    The outputted wave file:

     

    Here is the SAM software module to add in the MIOS32 module and the project to play with.

    sam.zip  sam_tester.zip

     

    Next step is to make it real time.
    One way is to render the text first to the SD card then add a sample reader from SD card. But pitch/speed/throat and mouth parameters will not be realtime, so SAM code must be deeply changed to achive a realtime process... TODO! ;)
    But we can imagine a small CS to input different speeches and map them to midi events. CC for parameters etc... the dipcoreF4 has a second USB host port which supports HID keyboard, useful for fast text input.
    Then it can be outputted with a DAC, a SID or a TIA...

    But that is another story... ;)

     

    • Like 1
  2. I had a look on the code, it's more complicated than just add some SAM files. You will need to understand an maybe adapt/modify the necessary parts(files) and create Input/Output interfacing, check ram memory needed etc...

    For us it must be realtime process... But as a start: For input the easiest first way is to use MIOS-Studio Terminal for SAM commands, and output wave file to the SD card. It's not real-time but just an example.

    Something like that:

    Midibox%20Sam.png?raw=1

    [28337.121] SD Card status 1
    [28339.122] SD Card status 3
    [28339.122] SD Card CONNECTED
    
    [28342.433] help
    
    [28342.435] Welcome to the HAARP Terminal!
    [28342.435] Following commands are available:
    [28342.435]   sam_usage:                         SAM Usage
    [28342.435]   sam:                               SAM
    [28342.435]   reset:                             resets the MIDIbox (!)
    [28342.435]   help:                              this page
    
    [28345.225] sam_usage
    
    [28345.227] usage: sam [options] Word1 Word2 ....
    [28345.227] options
    [28345.227]   -phonetic     enters phonetic mode. (see below)
    [28345.227]   -pitch number    set pitch value (default=64)
    [28345.227]   -speed number    set speed value (default=72)
    [28345.227]   -throat number    set throat value (default=128)
    [28345.227]   -mouth number    set mouth value (default=128)
    [28345.227]   -wav filename    output to wav instead of libsdl
    [28345.228]   -sing      special treatment of pitch
    [28345.228]   -debug      print additional debug messages
    [28345.228] 
    [28345.228]      VOWELS                            VOICED CONSONANTS  
    [28345.228] IY           f(ee)t                    R        red    
    [28345.228] IH           p(i)n                     L        allow    
    [28345.228] EH           beg                       W        away    
    [28345.228] AE           Sam                       W        whale    
    [28345.228] AA           pot                       Y        you    
    [28345.228] AH           b(u)dget                  M        Sam    
    [28345.228] AO           t(al)k                    N        man    
    [28345.229] OH           cone                      NX       so(ng)    
    [28345.229] UH           book                      B        bad    
    [28345.229] UX           l(oo)t                    D        dog    
    [28345.229] ER           bird                      G        again    
    [28345.229] AX           gall(o)n                  J        judge    
    [28345.229] IX           dig(i)t                   Z        zoo    
    [28345.229]                ZH       plea(s)ure  
    [28345.229]    DIPHTHONGS                          V        seven    
    [28345.229] EY           m(a)de                    DH       (th)en    
    [28345.230] AY           h(igh)            
    [28345.230] OY           boy            
    [28345.230] AW           h(ow)                     UNVOICED CONSONANTS  
    [28345.230] OW           slow                      S         Sam    
    [28345.230] UW           crew                      Sh        fish    
    [28345.230]                                        F         fish    
    [28345.230]                                        TH        thin    
    [28345.230]  SPECIAL PHONEMES                      P         poke    
    [28345.230] UL           sett(le) (=AXL)           T         talk    
    [28345.230] UM           astron(omy) (=AXM)        K         cake    
    [28345.231] UN           functi(on) (=AXN)         CH        speech    
    [28345.232] Q            kitt-en (glottal stop)    /H        a(h)ead  
    
    [28359.145] sam -debug -pitch 64 -speed 128 -mouth 128 -wav TEST_OK midibox sam is great!
    
    [28359.147] text input: MIDIBOX SAM IS GREAT! 
    [28359.147] Applying rule: 
    [28359.147] (
    [28359.147] M
    [28359.147] )
    [28359.147]  -> 
    [28359.147] M
    [28359.147] 
    [28359.147] Applying rule: 
    [28359.147] (
    [28359.147] I
    [28359.147] )
    [28359.147] ^
    [28359.148] +
    [28359.148] :
    [28359.148] #
    [28359.148]  -> 
    [28359.148] I
    [28359.148] H
    [28359.148] 
    [28359.148] Applying rule: 
    [28359.148] (
    [28359.148] D
    [28359.148] )
    [28359.148]  -> 
    [28359.148] D
    [28359.148] 
    [28359.148] Applying rule: 
    [28359.148] I
    [28359.148] ^
    [28359.148] (
    [28359.148] I
    [28359.148] )
    [28359.148] ^
    [28359.148] #
    [28359.148]  -> 
    [28359.148] I
    [28359.148] H
    [28359.148] 
    [28359.148] Applying rule: 
    [28359.148] (
    [28359.148] B
    [28359.148] )
    [28359.148]  -> 
    [28359.148] B
    [28359.148] 
    [28359.148] Applying rule: 
    [28359.148] (
    [28359.148] O
    [28359.148] )
    [28359.148]  -> 
    [28359.148] A
    [28359.148] A
    [28359.148] 
    [28359.149] Applying rule: 
    [28359.149] (
    [28359.149] X
    [28359.149] )
    [28359.149]  -> 
    [28359.149] K
    [28359.149] S
    [28359.149] 
    [28359.149] Applying rule: 
    [28359.149] (
    [28359.149] S
    [28359.149] )
    [28359.149]  -> 
    [28359.149] S
    [28359.149] 
    [28359.149] Applying rule: 
    [28359.149] (
    [28359.149] A
    [28359.149] )
    [28359.149]  -> 
    [28359.149] A
    [28359.149] E
    [28359.149] 
    [28359.149] Applying rule: 
    [28359.149] (
    [28359.149] M
    [28359.149] )
    [28359.149]  -> 
    [28359.149] M
    [28359.149] 
    [28359.149] Applying rule: 
    [28359.149] (
    [28359.149] I
    [28359.149] )
    [28359.149]  -> 
    [28359.149] I
    [28359.149] H
    [28359.149] 
    [28359.149] Applying rule: 
    [28359.149]  
    [28359.149] :
    [28359.149] #
    [28359.149] (
    [28359.149] S
    [28359.150] )
    [28359.150]  
    [28359.150]  -> 
    [28359.150] Z
    [28359.150] 
    [28359.150] Applying rule: 
    [28359.150] (
    [28359.150] G
    [28359.150] R
    [28359.150] E
    [28359.150] A
    [28359.150] T
    [28359.150] )
    [28359.150]  -> 
    [28359.150] G
    [28359.150] R
    [28359.150] E
    [28359.150] Y
    [28359.150] 4
    [28359.150] T
    [28359.150] 
    [28359.150] Applying rule: 
    [28359.150] (
    [28359.150] !
    [28359.150] )
    [28359.150]  -> 
    [28359.150] .
    [28359.150] 
    [28359.150] phonetic input:  MIHDIHBAAKS SAEM IHZ GREY4T. �
    [28359.150] ===========================================
    [28359.150] Internal Phoneme presentation:
    [28359.150]  idx    phoneme  length  stress
    [28359.150] ------------------------------
    [28359.151]    0       *        0       0
    [28359.151]   27      M*        0       0
    [28359.151]    6      IH        0       0
    [28359.151]   57      D*        0       0
    [28359.151]    6      IH        0       0
    [28359.151]   54      B*        0       0
    [28359.151]    9      AA        0       0
    [28359.151]   72      K*        0       0
    [28359.151]   32      S*        0       0
    [28359.151]    0       *        0       0
    [28359.151]   32      S*        0       0
    [28359.151]    8      AE        0       0
    [28359.151]   27      M*        0       0
    [28359.151]    0       *        0       0
    [28359.151]    6      IH        0       0
    [28359.152]   38      Z*        0       0
    [28359.152]    0       *        0       0
    [28359.152]   60      G*        0       0
    [28359.152]   23      R*        0       0
    [28359.152]   48      EY        0       4
    [28359.152]   69      T*        0       0
    [28359.152]    1      .*        0       0
    [28359.152]    0       *        0       0
    [28359.154] ===========================================
    [28359.154] 
    [28359.154] Parser2
    [28359.154] 0:  *
    [28359.154] 1: M*
    [28359.154] 2: IH
    [28359.154] 3: D*
    [28359.154] RULE: Soften T or D following vowel or ER and preceding a pause -> DX
    [28359.154] 4: IH
    [28359.154] 5: B*
    [28359.154] 6: AA
    [28359.154] 7: K*
    [28359.154] RULE: K <VOWEL OR DIPTHONG NOT ENDING WITH IY> -> KX <VOWEL OR DIPTHONG NOT ENDING WITH IY>
    [28359.154] 8: S*
    [28359.154] 9:  *
    [28359.154] 10: S*
    [28359.154] 11: AE
    [28359.154] 12: M*
    [28359.154] 13:  *
    [28359.154] 14: IH
    [28359.154] 15: Z*
    [28359.154] 16:  *
    [28359.154] 17: G*
    [28359.154] RULE: G <VOWEL OR DIPTHONG NOT ENDING WITH IY> -> GX <VOWEL OR DIPTHONG NOT ENDING WITH IY>
    [28359.154] 18: R*
    [28359.154] 19: EY
    [28359.154] RULE: insert YX following dipthong ending in IY sound
    [28359.154] 20: YX
    [28359.154] 21: T*
    [28359.154] 22: .*
    [28359.154] 23:  *
    [28359.154] RULE: Lengthen <FRICATIVE> or <VOICED> between <VOWEL> and <PUNCTUATION> by 1.5
    [28359.154] PRE
    [28359.154] phoneme 20 (YX) length 8
    [28359.154] POST
    [28359.154] phoneme 20 (YX) length 13
    [28359.154] RULE: Lengthen <FRICATIVE> or <VOICED> between <VOWEL> and <PUNCTUATION> by 1.5
    [28359.154] PRE
    [28359.154] phoneme 21 (T*) length 4
    [28359.154] POST
    [28359.154] phoneme 21 (T*) length 7
    [28359.154] RULE: <VOWEL> <VOICED CONSONANT> - increase vowel by 1/2 + 1
    [28359.154] PRE
    [28359.154] phoneme 3 (DX) length 2
    [28359.154] POST
    [28359.154] phoneme 4 (IH) length 11
    [28359.154] RULE: <VOWEL> <UNVOICED PLOSIVE> - decrease vowel by 1/8th
    [28359.155] PRE
    [28359.155] phoneme 6 (AA) length 11
    [28359.155] POST
    [28359.155] phoneme 6 (AA) length 10
    [28359.155] RULE: <VOWEL> <VOICED CONSONANT> - increase vowel by 1/2 + 1
    [28359.155] PRE
    [28359.155] phoneme 10 (S*) length 2
    [28359.155] POST
    [28359.155] phoneme 11 (AE) length 11
    [28359.155] RULE: <VOWEL> <VOICED CONSONANT> - increase vowel by 1/2 + 1
    [28359.155] PRE
    [28359.155] phoneme 13 ( *) length 0
    [28359.155] POST
    [28359.155] phoneme 14 (IH) length 11
    [28359.155] RULE: <LIQUID CONSONANT> <DIPTHONG> - decrease by 2
    [28359.155] PRE
    [28359.155] phoneme 18 (R*) length 10
    [28359.155] POST
    [28359.155] phoneme 18 (R*) length 8
    [28359.156] RULE: <VOWEL> <UNVOICED PLOSIVE> - decrease vowel by 1/8th
    [28359.156] PRE
    [28359.156] phoneme 20 (YX) length 13
    [28359.156] POST
    [28359.156] phoneme 20 (YX) length 12
    [28359.156] ===========================================
    [28359.156] Internal Phoneme presentation:
    [28359.156]  idx    phoneme  length  stress
    [28359.156] ------------------------------
    [28359.156]    0       *        0       0
    [28359.156]   27      M*        7       0
    [28359.156]    6      IH        8       0
    [28359.156]   30      DX        2       0
    [28359.156]    6      IH       11       0
    [28359.156]   54      B*        6       0
    [28359.157]   55      **        1       0
    [28359.157]   56      **        2       0
    [28359.157]    9      AA       10       0
    [28359.157]   75      KX        6       0
    [28359.157]   76      **        1       0
    [28359.157]   77      **        4       0
    [28359.157]   32      S*        2       0
    [28359.157]    0       *        0       0
    [28359.157]   32      S*        2       0
    [28359.157]    8      AE       11       0
    [28359.157]   27      M*        7       0
    [28359.157]    0       *        0       0
    [28359.157]    6      IH       11       0
    [28359.157]   38      Z*        6       0
    [28359.157]    0       *        0       0
    [28359.158]   63      GX        6       0
    [28359.158]   64      **        1       0
    [28359.158]   65      **        2       0
    [28359.158]   23      R*        8       5
    [28359.158]   48      EY       14       4
    [28359.158]   21      YX       12       4
    [28359.158]   69      T*        7       0
    [28359.158]   70      **        2       0
    [28359.158]   71      **        2       0
    [28359.158]    1      .*       18       0
    [28359.158]  254      ??             0
    [28359.158]    0       *        0       0
    [28359.158] ===========================================
    [28359.158] 
    [28359.159] ===========================================
    [28359.159] Final data for speech output:
    [28359.159]  flags ampl1 freq1 ampl2 freq2 ampl3 freq3 pitch
    [28359.159] ------------------------------------------------
    [28359.159]     0     9     6     2    46     0    81    61
    [28359.159]     0     9     6     2    46     0    81    61
    [28359.159]     0     9     6     2    46     0    81    61
    [28359.159]     0     9     6     2    46     0    81    61
    [28359.159]     0     9     6     2    46     0    81    61
    [28359.159]     0     9     6     2    46     0    81    61
    [28359.160]     0     9     6     2    46     0    81    61
    [28359.160]     0     9    10     4    59     2    87    59
    [28359.160]     0    11    14     8    72     4    93    57
    [28359.160]     0    11    14     8    72     4    93    57
    [28359.160]     0    11    14     8    72     4    93    57
    [28359.160]     0    11    14     8    72     4    93    57
    [28359.160]     0    11    14     8    72     4    93    57
    [28359.160]     0    11    14     8    72     4    93    57
    [28359.160]     0    23    96    23   151    29   102    16
    [28359.160]     0    44   179     6   230     6   111   231
    [28359.161]     0     0     6     0    54     0   121    61
    [28359.161]     0     2     8     2    60     2   197    60
    [28359.161]     0     4    11     4    66     2    17    59
    [28359.161]     0    11    14     8    72     4    93    57
    [28359.161]     0    11    14     8    72     4    93    57
    [28359.161]     0    11    14     8    72     4    93    57
    [28359.161]     0    11    14     8    72     4    93    57
    [28359.162]     0    11    14     8    72     4    93    57
    [28359.162]     0    11    14     8    72     4    93    57
    [28359.162]     0    11    14     8    72     4    93    57
    [28359.162]     0    11    14     8    72     4    93    57
    [28359.162]     0    26    76    29   124     2   154    26
    [28359.162]     0     9   138    14   177     6   215   251
    [28359.162]     0    36   200    30   229    36    20   220
    [28359.162]     0     2     6     0    26     0    81    61
    [28359.162]     0     2     6     0    26     0    81    61
    [28359.162]     0     2     6     0    26     0    81    61
    [28359.162]     0     2     6     0    26     0    81    61
    [28359.162]     0     2     6     1    26     0    81    61
    [28359.162]     0     0     6     0    26     0    81    61
    [28359.162]     0     0     6     0    26     0    81    61
    [28359.163]     0     3    12     2    30     0    83    58
    [28359.163]     0     6    19     4    35     0    86    55
    [28359.163]     0    15    26    11    40     1    89    51
    [28359.163]     0    15    26    11    40     1    89    51
    [28359.163]     0    15    26    11    40     1    89    51
    [28359.163]     0    15    26    11    40     1    89    51
    [28359.163]     0    15    26    11    40     1    89    51
    [28359.163]     0    15    26    11    40     1    89    51
    [28359.163]     0    20    65    30    47     8    89    32
    [28359.164]     0    23   104    23    54    23    90    12
    [28359.164]     0     9   144    16    62    17    91   248
    [28359.164]     0    44   183    44    69    10    92   229
    [28359.164]     0    51   222    51    76    73    93   209
    [28359.164]     0     0     6     0    84     0    94    61
    [28359.164]     0     0     6     0    84     0    94    61
    [28359.164]     0     0     6     0    84     0    94    61
    [28359.164]     0     0     6     6    84     3    94    61
    [28359.164]     0     0     6     0    84     0    94    61
    [28359.165]     0     0     6     0    84     0    94    61
    [28359.165]     0     0     6     0    84     0    94    61
    [28359.165]     0     0     6     0   133     0    95    61
    [28359.165]   241     0     6     0   182     0    96    61
    [28359.165]   241     0     6     0   231     0    97    61
    [28359.165]   241     0     6     0    24     0    98    61
    [28359.165]   241     0     6     0    73     0    99    61
    [28359.166]     0     2    10     2   134     2   160    59
    [28359.166]     0     4    15     4   195     2   221    57
    [28359.166]     0     8    19     6     0     3    26    55
    [28359.166]     0    15    24    13    62     4    88    52
    [28359.166]     0    15    24    13    62     4    88    52
    [28359.166]     0    15    24    13    62     4    88    52
    [28359.166]     0    15    24    13    62     4    88    52
    [28359.166]     0    15    24    13    62     4    88    52
    [28359.166]     0    15    24    13    62     4    88    52
    [28359.166]     0    15    24    13    62     4    88    52
    [28359.167]     0    15    24    13    62     4    88    52
    [28359.167]     0     6   143    10   182     6   212   249
    [28359.167]     0     9     6     2    46     0    81    61
    [28359.167]     0     9     6     2    46     0    81    61
    [28359.167]     0     9     6     2    46     0    81    61
    [28359.167]     0     9     6     2    46     0    81    61
    [28359.167]     0     9     6     2    46     0    81    61
    [28359.168]     0     9     6     2    46     0    81    61
    [28359.168]     0     9    10     4    59     2    87    59
    [28359.168]     0    11    14     8    72     4    93    57
    [28359.168]     0    11    14     8    72     4    93    57
    [28359.168]     0    11    14     8    72     4    93    57
    [28359.168]     0    11    14     8    72     4    93    57
    [28359.168]     0    11    14     8    72     4    93    57
    [28359.168]     0    11    14     8    72     4    93    57
    [28359.168]     0    11    14     8    72     4    93    57
    [28359.168]     0    11    14     8    72     4    93    57
    [28359.168]     0    29    64    23   119    20    93    32
    [28359.169]     0    18   114    20   166    26    93     7
    [28359.169]     1     6   164     6   213     6    93   238
    [28359.169]     1    66   214    73     4    86    93   213
    [28359.169]     1     8     9     2    51     0    93    60
    [28359.169]     1     8     9     2    51     0    93    60
    [28359.169]     1     8     9     2    51     0    93    60
    [28359.169]     1    29    72     2    59     0    93    28
    [28359.169]     0    16   135     6    67     0    93   253
    [28359.169]     0    50   198    48    75     0    93   221
    [28359.169]     0     1     6     0    84     0    94    61
    [28359.170]     0     1     6     0    84     0    94    61
    [28359.170]     0     1     6     0    84     0    94    61
    [28359.170]     0     1     6     0    84     0    94    61
    [28359.170]     0     2     6     1    84     0    94    61
    [28359.170]     0     0     6     0    84     0    94    61
    [28359.170]     0     0     6     0    84     0    94    61
    [28359.170]     0     2     9     2   139     1   149   109
    [28359.170]     0     3    12     3   195     2   205   157
    [28359.170]     0     5    15     4   250     2     4   206
    [28359.170]     0     9    18     6    50     3    60   254
    [28359.171]     0     9    18     6    50     3    60    48
    [28359.171]     0     9    18     6    50     3    60    48
    [28359.171]     0     9    18     6    50     3    60    48
    [28359.171]     0     9    18     6    54     3    66    70
    [28359.171]     0     9    18     8    58     3    72    93
    [28359.171]     0    11    18     9    63     4    78   116
    [28359.171]     0    11    18    11    67     4    84   139
    [28359.171]     0    13    18    13    72     5    90   162
    [28359.171]     0    13    18    13    72     5    90   184
    [28359.171]     0    13    18    13    72     5    90   207
    [28359.172]     0    13    18    13    72     5    90   230
    [28359.172]     0    13    18    13    72     5    90   253
    [28359.172]     0    13    18    13    72     5    90    20
    [28359.172]     0    13    18    13    72     5    90    45
    [28359.172]     0    13    18    13    72     5    90    46
    [28359.172]     0    13    49     8   103    10    90    35
    [28359.172]     0    13    81    26   135    29    90    24
    [28359.172]     0    13   112    16   166    18    91    12
    [28359.172]     0    13   144     6   198    10    91     1
    [28359.172]     0    13   175     6   229     6    91   246
    [28359.173]     0    13   207    46     5    24    92   235
    [28359.173]     0    13   238    66    36    26    92   223
    [28359.173]     0    13    14     9    68     4    93    84
    [28359.173]     0    13    14     9    68     4    93    88
    [28359.173]     0    13    14     9    68     4    93    93
    [28359.173]     0    13    14     9    68     4    93    97
    [28359.173]     0    13    14     9    68     4    93   102
    [28359.173]     0    13    14     9    68     4    93    61
    [28359.173]     0    13    14     9    68     4    93    62
    [28359.173]     0    26    76    27   131     2   100    56
    [28359.173]     0     9   138    16   195     6   107    51
    [28359.174]     0    50   200    50     2    36   114    45
    [28359.174]     0     0     6     0    66     0   121   168
    [28359.174]     0     0     6     0    66     0   121   193
    [28359.174]     0     0     6     0    66     0   121   219
    [28359.174]     0     0     6     0    66     0   121   244
    [28359.175]     0     0     6     0    66     0   121    14
    [28359.175]    25     0     6     0    66     0   121    75
    [28359.175]    25     0     6     0    66     0   121    76
    [28359.175]     0     0     6     0    66     0   121    77
    [28359.175]     0     0     9     0    66     0   177    99
    [28359.176]     0     0    12     0    66     0   234   121
    [28359.176]     0     0    15     0    66     0    34   144
    [28359.176]     0     0    19     0    67     0    91   166
    [28359.176]     0     0    19     0    67     0    91   190
    [28359.176]     0     0    19     0    67     0    91   214
    [28359.176]     0     0    19     0    67     0    91   238
    [28359.176]     0     0    19     0    67     0    91     6
    [28359.176]     0     0    19     0    67     0    91    30
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0    19     0    67     0    91    55
    [28359.176]     0     0     0     0     0     0     0     0
    [28359.176]     0     0     0     0     0     0     0     0
    [28359.176]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.177]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.178]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.179]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.180]     0     0     0     0     0     0     0     0
    [28359.181]     0     0     0     0     0     0     0     0
    [28359.181]     0     0     0     0     0     0     0     0
    [28359.181]     0     0     0     0     0     0     0     0
    [28359.181]     0     0     0     0     0     0     0     0
    [28359.181]     0     0     0     0     0     0     0     0
    [28359.181]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.182]     0     0     0     0     0     0     0     0
    [28359.183]     0     0     0     0     0     0     0     0
    [28359.183]     0     0     0     0     0     0     0     0
    [28359.183]     0     0     0     0     0     0     0     0
    [28359.183]     0     0     0     0     0     0     0     0
    [28359.183]     0     0     0     0     0     0     0     0
    [28359.183]     0     0     0     0     0     0     0     0
    [28359.183]     0     0     0     0     0     0     0     0
    [28359.183]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.184]     0     0     0     0     0     0     0     0
    [28359.185]     0     0     0     0     0     0     0     0
    [28359.185]     0     0     0     0     0     0     0     0
    [28359.185]     0     0     0     0     0     0     0     0
    [28359.185]     0     0     0     0     0     0     0     0
    [28359.185]     0     0     0     0     0     0     0     0
    [28359.185]     0     0     0     0     0     0     0     0
    [28359.185]     0     0     0     0     0     0     0     0
    [28359.185] ===========================================
    [28359.526] TEST_OK.WAV saved

     

    • Thanks 1
  3. SAM is an independant program, no need of a SID, the SID was used on C64 as DAC.
    But it was working on Apple, Atari etc...

    But good news it's a C source code you can embed onto a MIDIbox Core, you just need a DAC, an audio output.

  4. Quick test for CC automation.

    The HAARP is only connected to my laptop and Ableton Live is running. Live gives the sync.
    Only the Drum Track is programmed. I play with 4 differents clips.
    There's 3 synth used, BAss, Saw and Choir they are some of the basic provided with Ableton, no sequence, direct input are activated on the synth tracks.
    Preset, Mute change, and some of the parameters of the HAARP are automated, by a previous MIDI record.

     

    • Like 1
  5. On 1/30/2021 at 3:44 PM, Altitude said:

    nice.  Need to start paying more attention here, lots of great projects slipping under the radar

    Thanks!

    I spent my free time of the two last month to get the firmware I wanted for it, that's done :happy:
    I started to write the manual during few days before leaving France for work but it seems coding in C is easier than setting a page or a column break in word software! :shock: ahah!

    Best regards
    Bruno

     

  6. 18 minutes ago, Phatline said:

    now Display1 stays dark, it is connected to Pin 33, PB12-J15.CS1   (it was working bevore)

    I didn't touch that
    Be sure the MIOS32_LCD is universal, I know you put the values in MIOS32_config but try also to set them with booloader updater help, set lcd_type too...

  7. 10 hours ago, Phatline said:

    i doesnt Activated "Midi via USB" since config is:

    
    #define MIOS32_USE_MIDI
    #define MIOS32_USE_UART
    #define MIOS32_USE_UART_MIDI
    #define MIOS32_UART_NUM 1
    #define MIOS32_UART0_ASSIGNMENT 1 //1=Midi, 0= Disabled, 2= COM
    #define MIOS32_UART1_ASSIGNMENT 0
    #define MIOS32_UART2_ASSIGNMENT 0
    #define MIOS32_UART3_ASSIGNMENT 0

    (right?)

     

    #define MIOS32_UART_NUM 1

    This line is enough.

  8. You can use the routine of the Seq:
    No need of a string variable.

    /////////////////////////////////////////////////////////////////////////////
    // Returns the 8bit pattern of a hexadecimal 4bit value
    // The dot will be set if bit 7 of this value is set
    /////////////////////////////////////////////////////////////////////////////
    s32 SEQ_LED_DigitPatternGet(u8 value)
    {
      const u8 led_digits_decoded[16] = {
        //    a
        //   ---
        //  !   !
        // f! g !b
        //   ---
        //  !   !
        // e!   !c
        //   ---
        //    d   h
        // 1 = on, 0 = off
        // NOTE: the dod (h) will be set automatically by the driver above when bit 7 is set
    
        //       habc defg
        0x7e, // 0111 1110
        0x30, // 0011 0000
        0x6d, // 0110 1101
        0x79, // 0111 1001
        0x33, // 0011 0011
        0x5b, // 0101 1011
        0x5f, // 0101 1111
        0x70, // 0111 0000
        0x7f, // 0111 1111
        0x7b, // 0111 1011
        0x77, // 0111 0111
        0x1f, // 0001 1111
        0x4e, // 0100 1110
        0x3d, // 0011 1101
        0x4f, // 0100 1111
        0x47, // 0100 0111
      };  
    
    
      return led_digits_decoded[value & 0xf] | (value & 0x80);
    }

     

    /////////////////////////////////////////////////////////////////////////////
    // This hook is called before the shift register chain is scanned
    /////////////////////////////////////////////////////////////////////////////
    void APP_SRIO_ServicePrepare(void)
    {
        static u8 led_digit_ctr = 0;
        if( ++led_digit_ctr >= 7 )
            led_digit_ctr = 0;
      
        u8 inversion_mask = (COMMON_PIN_DIGITx==CATHODE) ? 0xff : 0x00;
        u8 common_enable = (COMMON_PIN_DIGITx==CATHODE) ? 1 : 0;
    
        float bpm = SEQ_BPM_EffectiveGet();
        if( led_digit_ctr == 0 ) {
          u8 sr_value = SEQ_LED_DigitPatternGet(((int)(bpm*10)) % 10);
          MIOS32_DOUT_SRSet(SEGMENTs_REG, sr_value ^ inversion_mask);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT1, common_enable);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT2, !common_enable);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT3, !common_enable);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT4, !common_enable);
        } else if( led_digit_ctr == 1 ) {
          //u8 sr_value = SEQ_LED_DigitPatternGet((int)bpm % 10) | 0x80; // +dot
          u8 sr_value = SEQ_LED_DigitPatternGet((int)bpm % 10) ; // no dot
          MIOS32_DOUT_SRSet(SEGMENTs_REG, sr_value ^ inversion_mask);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT1, !common_enable);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT2, common_enable);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT3, !common_enable);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT4, !common_enable);
        } else if( led_digit_ctr == 2 ) {
          u8 sr_value = SEQ_LED_DigitPatternGet(((int)bpm / 10) % 10);
          MIOS32_DOUT_SRSet(SEGMENTs_REG, sr_value ^ inversion_mask);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT1, !common_enable);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT2, !common_enable);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT3, common_enable);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT4, !common_enable);
        } else if( led_digit_ctr == 3 ) {
          u8 sr_value = SEQ_LED_DigitPatternGet(((int)bpm / 100) % 10);
          MIOS32_DOUT_SRSet(SEGMENTs_REG, sr_value ^ inversion_mask);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT1, !common_enable);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT2, !common_enable);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT3, !common_enable);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT4, common_enable);
        }
        else { // not displaying bpm digit in this cycle, disable common pins
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT1, !common_enable);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT2, !common_enable);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT3, !common_enable);
          MIOS32_DOUT_PinSet(COMMON_PIN_DIGIT4, !common_enable);
        }
    }

     

    For you to give the right values to the registers and pins depending on your diagram.

    Also the "DOT" can be added.

    Follow the pinout for the SEGMENTs register this one: http://www.ucapps.de/midibox_seq/mbseq_v4_bpm_digits.pdf, or adapt led_digits_decoded array to your own pinout.

    Always have a look in the repo cause what you're looking for is often already done somewhere ;) That's the magic here :)

    Best regards
    Bruno




     

  9. 13 hours ago, Meadow said:

    I thought of choosing normal analog potis for the EQ and the bus section. I know they will not change their position, if I work on another project. But I think that's fine by me.
    I mean analog mixing consoles worked like this for years. But, if we say I work on project A and change the positions of the potis, then work on project B, the plugins should not change any values as long as I don't touch any potis, right?

    No problem I thought your SSL channel strip was an hardware one, but it's a plug-in, no need of any VCA here ;)
    So you can use pots or encoders. Pots need AIN modules, Encoders need DIN modules. About pots changes, there's some mode you can choose Direct/Snap/Relative/Parallax they are explained somewhere here: http://www.ucapps.de/midibox_ng_manual.html

    13 hours ago, Meadow said:

    So you would recommend to use din modules for the buttons and AINSER 64 modules for the (non?)motorfaders, right?
    And the potis? Should they also be connected to AINSER modules?

    DIN module for switches and encoders.
    DOUT for leds if required.
    AIN module for faders and pots.

  10. Hi,

    1 hour ago, Meadow said:

    The channel strip consists of the SSL E series eq and 8 additional potis controlling the different Bus channels.

    It will be difficult to replace the rotating pots of the EQ and Busses sections. There's some motorised pots but the cost will be hudge, and they are very big. Another way is to replace them by VCA or something else like digital pots, but it depends on the mixer circuits, anyway it will be very expensive, and VCA will need AOUT to be controlled.

    1 hour ago, Meadow said:

    I found a forum post writing about three AINSER 8 connected to a core. Is there the possibility to connect even more?
    If I think of two AINSER 64 per core, this would mean I can read 128 buttons, etc with one core.
    So I would need 10 cores for the not motorized knobs etc alone.
    Is this possible? Can I connect 10 cores all via usb to my pc and program them to one big controller?

    You can use DIN modules for switches and DOUT for LEDs, you can also use matricing too, to save some money and limit the size of your project.
    You don't need so much AIN modules and Cores.
    Keep the AIN modules for the faders... And for the pots if you decide to use VCA(or other) to automate your EQ and Busses sections.

    Best regards
    Bruno

  11. 15 hours ago, Karg said:

    I manage to send MMC message (currently MPC Live), but have not managed to receive them. Similarly, I do not manage to receive notes, and whatever I try to send to the Seq does not show up on the Midi Monitor.

    MIDI Machine Control is not supported by the SEQ, it's a sub layer of the MIDI norm which is not implemented. Of course the SEQ can receive/send SPP and Realtime messages like start stop continue, midi clock etc..
    More than that I think the MPC is not a regular USB MIDI Device and if it's the case it's via an internal USB HUB that the seq does not support.

    Then just use regular MIDI DIN connection between the seq and the MPC, this will work.

    • Like 1
×
×
  • Create New...