Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
SAM Speech Synthesis ported to native QB64PE (v0.15)
#6
(04-01-2025, 01:38 AM)madscijr Wrote: This version prints out the parameters as it attempts to play each sound...

Code: (Select All)
Const PI = 3.141592653589793
Const TWOPI = 2 * PI
Const Pi2 = 8 * Atn(1)

Type PhonemeDataType
    frequency1 As Integer
    frequency2 As Integer
    amplitude As Integer
    duration As Integer
    inflection As Integer
    vowel As Integer
    pitch As Integer
    filter As Integer
    volume As Integer
    rate As Integer
    stress As Integer
    Reserved As Integer ' Not used, but included for original data compatibility
End Type

Dim Shared arrPhoneme(1 To 131) As PhonemeDataType ' Array to hold phoneme data.  Dimensioned for the number of phonemes in the DATA statements.
Dim Shared arrPhName(1 To 131) As String ' Array of phoneme names, for lookup.
Dim iLoop As Integer

Restore PhonemeNameData
For iLoop = 1 To 131
    Read arrPhName(iLoop)
Next iLoop

Restore PhonemeSoundData
For iLoop = 1 To 131
    Read arrPhoneme(iLoop).frequency1
    Read arrPhoneme(iLoop).frequency2
    Read arrPhoneme(iLoop).amplitude
    Read arrPhoneme(iLoop).duration
    Read arrPhoneme(iLoop).inflection
    Read arrPhoneme(iLoop).vowel
    Read arrPhoneme(iLoop).pitch
    Read arrPhoneme(iLoop).filter
    Read arrPhoneme(iLoop).volume
    Read arrPhoneme(iLoop).rate
    Read arrPhoneme(iLoop).stress
    Read arrPhoneme(iLoop).Reserved
Next iLoop

PhonemeNameData:
' Phoneme names corresponding to the PhonemeSoundData
Data "AH","AO","AA","AE","EH","ER","IH","EY","IY","AY","UH","UW"
Data "UX","OH","OY","AX","AXR","AW","AWH","OW","P","B","T","D"
Data "K","G","CH","JH","S","Z","SH","ZH","F","V","TH","DH","M"
Data "N","NG","L","R","W","Y","H","PAUSE","BEEP","BREATH","UH"
Data "AH","IH","EH","OH","UW","P","T","K","F","TH","S","SH","H"
Data "M","N","L","R","W","Y","B","D","G","V","DH","Z","ZH","CH"
Data "JH","NG","BREATH","UH","AH","IH","EH","OH","UW","P","T"
Data "K","F","TH","S","SH","H","M","N","L","R","W","Y","B","D"
Data "G","V","DH","Z","ZH","CH","JH","NG","PAUSE1","PAUSE2","PUNC"

PhonemeSoundData:
' Data frequency1, frequency2, amplitude, duration, inflection, vowel, pitch, filter, volume, rate, stress, Reserved
Data 160,160,32767,7,0,1,64,0,63,10,0,0
Data 260,260,32767,7,0,1,64,0,63,10,0,0
Data 294,294,32767,7,0,1,64,0,63,10,0,0
Data 247,247,32767,7,0,1,64,0,63,10,0,0
Data 220,220,32767,7,0,1,64,0,63,10,0,0
Data 208,208,32767,7,0,1,64,0,63,10,0,0
Data 311,311,32767,7,0,1,64,0,63,10,0,0
Data 277,277,32767,7,0,1,64,0,63,10,0,0
Data 330,330,32767,7,0,1,64,0,63,10,0,0
Data 311,311,32767,7,0,1,64,0,63,10,0,0
Data 370,370,32767,7,0,1,64,0,63,10,0,0
Data 392,392,32767,9,0,0,64,0,63,10,0,0
Data 440,440,32767,9,0,0,64,0,63,10,0,0
Data 494,494,32767,9,0,0,64,0,63,10,0,0
Data 523,523,32767,9,0,0,64,0,63,10,0,0
Data 587,587,32767,9,0,0,64,0,63,10,0,0
Data 659,659,32767,9,0,0,64,0,63,10,0,0
Data 698,698,32767,9,0,0,64,0,63,10,0,0
Data 784,784,32767,9,0,0,64,0,63,10,0,0
Data 880,880,32767,9,0,0,64,0,63,10,0,0
Data 988,988,32767,9,0,0,64,0,63,10,0,0
Data 1047,1047,32767,9,0,0,64,0,63,10,0,0
Data 1175,1175,32767,9,0,0,64,0,63,10,0,0
Data 1319,1319,32767,9,0,0,64,0,63,10,0,0
Data 1397,1397,32767,9,0,0,64,0,63,10,0,0
Data 1568,1568,32767,9,0,0,64,0,63,10,0,0
Data 1760,1760,32767,9,0,0,64,0,63,10,0,0
Data 1865,1865,32767,9,0,0,64,0,63,10,0,0
Data 2093,2093,32767,9,0,0,64,0,63,10,0,0
Data 2349,2349,32767,9,0,0,64,0,63,10,0,0
Data 2489,2489,32767,9,0,0,64,0,63,10,0,0
Data 160,160,32767,5,0,0,64,0,63,10,0,0
Data 160,160,32767,5,0,0,64,0,63,10,0,0
Data 160,160,32767,5,0,0,64,0,63,10,0,0
Data 160,160,32767,5,0,0,64,0,63,10,0,0
Data 349,349,32767,7,0,0,64,0,63,10,0,0
Data 175,175,32767,7,0,0,64,0,63,10,0,0
Data 196,196,32767,7,0,0,64,0,63,10,0,0
Data 233,233,32767,7,0,0,64,0,63,10,0,0
Data 277,277,32767,7,0,0,64,0,63,10,0,0
Data 311,311,32767,7,0,0,64,0,63,10,0,0
Data 349,349,32767,7,0,0,64,0,63,10,0,0
Data 415,415,32767,7,0,0,64,0,63,10,0,0
Data 466,466,32767,7,0,0,64,0,63,10,0,0
Data 523,523,32767,7,0,0,64,0,63,10,0,0
Data 587,587,32767,7,0,0,64,0,63,10,0,0
Data 622,622,32767,7,0,0,64,0,63,10,0,0
Data 698,698,32767,7,0,0,64,0,63,10,0,0
Data 784,784,32767,7,0,0,64,0,63,10,0,0
Data 830,830,32767,7,0,0,64,0,63,10,0,0
Data 932,932,32767,7,0,0,64,0,63,10,0,0
Data 1047,1047,32767,7,0,0,64,0,63,10,0,0
Data 1109,1109,32767,7,0,0,64,0,63,10,0,0
Data 1245,1245,32767,7,0,0,64,0,63,10,0,0
Data 1397,1397,32767,7,0,0,64,0,63,10,0,0
Data 1480,1480,32767,7,0,0,64,0,63,10,0,0
Data 1661,1661,32767,7,0,0,64,0,63,10,0,0
Data 1865,1865,32767,7,0,0,64,0,63,10,0,0
Data 1976,1976,32767,7,0,0,64,0,63,10,0,0
Data 2217,2217,32767,7,0,0,64,0,63,10,0,0
Data 2489,2489,32767,7,0,0,64,0,63,10,0,0
Data 2637,2637,32767,7,0,0,64,0,63,10,0,0
Data 2959,2959,32767,7,0,0,64,0,63,10,0,0
Data 3322,3322,32767,7,0,0,64,0,63,10,0,0
Data 3520,3520,32767,7,0,0,64,0,63,10,0,0
Data 3951,3951,32767,7,0,0,64,0,63,10,0,0
Data 160,160,32767,5,0,0,64,0,63,10,0,0
Data 247,247,32767,5,0,0,64,0,63,10,0,0
Data 294,294,32767,5,0,0,64,0,63,10,0,0
Data 220,220,32767,5,0,0,64,0,63,10,0,0
Data 311,311,32767,5,0,0,64,0,63,10,0,0
Data 370,370,32767,5,0,0,64,0,63,10,0,0
Data 440,440,32767,5,0,0,64,0,63,10,0,0
Data 494,494,32767,5,0,0,64,0,63,10,0,0
Data 587,587,32767,5,0,0,64,0,63,10,0,0
Data 659,659,32767,5,0,0,64,0,63,10,0,0
Data 784,784,32767,5,0,0,64,0,63,10,0,0
Data 880,880,32767,5,0,0,64,0,63,10,0,0
Data 1047,1047,32767,5,0,0,64,0,63,10,0,0
Data 1175,1175,32767,5,0,0,64,0,63,10,0,0
Data 1397,1397,32767,5,0,0,64,0,63,10,0,0
Data 1568,1568,32767,5,0,0,64,0,63,10,0,0
Data 1865,1865,32767,5,0,0,64,0,63,10,0,0
Data 2093,2093,32767,5,0,0,64,0,63,10,0,0
Data 2489,2489,32767,5,0,0,64,0,63,10,0,0
Data 2959,2959,32767,5,0,0,64,0,63,10,0,0
Data 160,160,20000,8,0,0,64,0,63,10,0,0
Data 160,160,20000,8,0,0,64,0,63,10,0,0
Data 261,261,20000,8,0,0,64,0,63,10,0,0
Data 174,174,20000,8,0,0,64,0,63,10,0,0
Data 196,196,20000,8,0,0,64,0,63,10,0,0
Data 233,233,20000,8,0,0,64,0,63,10,0,0
Data 277,277,20000,8,0,0,64,0,63,10,0,0
Data 311,311,20000,8,0,0,64,0,63,10,0,0
Data 349,349,20000,8,0,0,64,0,63,10,0,0
Data 415,415,20000,8,0,0,64,0,63,10,0,0
Data 466,466,20000,8,0,0,64,0,63,10,0,0
Data 523,523,20000,8,0,0,64,0,63,10,0,0
Data 587,587,20000,8,0,0,64,0,63,10,0,0
Data 622,622,20000,8,0,0,64,0,63,10,0,0
Data 698,698,20000,8,0,0,64,0,63,10,0,0
Data 784,784,20000,8,0,0,64,0,63,10,0,0
Data 830,830,20000,8,0,0,64,0,63,10,0,0
Data 932,932,20000,8,0,0,64,0,63,10,0,0
Data 1047,1047,20000,8,0,0,64,0,63,10,0,0
Data 1109,1109,20000,8,0,0,64,0,63,10,0,0
Data 1245,1245,20000,8,0,0,64,0,63,10,0,0
Data 1397,1397,20000,8,0,0,64,0,63,10,0,0
Data 1480,1480,20000,8,0,0,64,0,63,10,0,0
Data 1661,1661,20000,8,0,0,64,0,63,10,0,0
Data 1865,1865,20000,8,0,0,64,0,63,10,0,0
Data 1976,1976,20000,8,0,0,64,0,63,10,0,0
Data 2217,2217,20000,8,0,0,64,0,63,10,0,0
Data 2489,2489,20000,8,0,0,64,0,63,10,0,0
Data 2637,2637,20000,8,0,0,64,0,63,10,0,0
Data 2959,2959,20000,8,0,0,64,0,63,10,0,0
Data 3322,3322,20000,8,0,0,64,0,63,10,0,0
Data 3520,3520,20000,8,0,0,64,0,63,10,0,0
Data 3951,3951,20000,8,0,0,64,0,63,10,0,0
Data 160,160,20000,5,0,0,64,0,63,10,0,0
Data 247,247,20000,5,0,0,64,0,63,10,0,0
Data 294,294,20000,5,0,0,64,0,63,10,0,0
Data 220,220,20000,5,0,0,64,0,63,10,0,0
Data 311,311,20000,5,0,0,64,0,63,10,0,0
Data 370,370,20000,5,0,0,64,0,63,10,0,0
Data 440,440,20000,5,0,0,64,0,63,10,0,0
Data 494,494,20000,5,0,0,64,0,63,10,0,0
Data 587,587,20000,5,0,0,64,0,63,10,0,0
Data 659,659,20000,5,0,0,64,0,63,10,0,0
Data 784,784,20000,5,0,0,64,0,63,10,0,0
Data 880,880,20000,5,0,0,64,0,63,10,0,0
Data 1047,1047,20000,5,0,0,64,0,63,10,0,0
Data 1175,1175,20000,5,0,0,64,0,63,10,0,0
Data 1397,1397,20000,5,0,0,64,0,63,10,0,0
Data 1568,1568,20000,5,0,0,64,0,63,10,0,0
Data 1865,1865,20000,5,0,0,64,0,63,10,0,0
Data 2093,2093,20000,5,0,0,64,0,63,10,0,0
Data 2489,2489,20000,5,0,0,64,0,63,10,0,0
Data 2959,2959,20000,5,0,0,64,0,63,10,0,0
Data 160,160,32767,7,0,0,64,0,63,10,0,0
Data 170,170,32767,7,0,0,64,0,63,10,0,0
Data 160,160,32767,7,0,0,64,0,63,10,0,0
Data 170,170,32767,7,0,0,64,0,63,10,0,0
Data 181,181,32767,7,0,0,64,0,63,10,0,0
Data 192,192,32767,7,0,0,64,0,63,10,0,0
Data 204,204,32767,7,0,0,64,0,63,10,0,0
Data 216,216,32767,7,0,0,64,0,63,10,0,0
Data 230,230,32767,7,0,0,64,0,63,10,0,0
Data 244,244,32767,7,0,0,64,0,63,10,0,0
Data 259,259,32767,7,0,0,64,0,63,10,0,0
Data 275,275,32767,7,0,0,64,0,63,10,0,0
Data 292,292,32767,7,0,0,64,0,63,10,0,0
Data 310,310,32767,7,0,0,64,0,63,10,0,0
Data 329,329,32767,7,0,0,64,0,63,10,0,0
Data 349,349,32767,7,0,0,64,0,63,10,0,0
Data 370,370,32767,7,0,0,64,0,63,10,0,0
Data 392,392,32767,7,0,0,64,0,63,10,0,0
Data 415,415,32767,7,0,0,64,0,63,10,0,0
Data 440,440,32767,7,0,0,64,0,63,10,0,0
Data 466,466,32767,7,0,0,64,0,63,10,0,0
Data 494,494,32767,7,0,0,64,0,63,10,0,0
Data 523,523,32767,7,0,0,64,0,63,10,0,0
Data 554,554,32767,7,0,0,64,0,63,10,0,0
Data 587,587,32767,7,0,0,64,0,63,10,0,0
Data 622,622,32767,7,0,0,64,0,63,10,0,0
Data 659,659,32767,7,0,0,64,0,63,10,0,0
Data 698,698,32767,7,0,0,64,0,63,10,0,0
Data 740,740,32767,7,0,0,64,0,63,10,0,0
Data 784,784,32767,7,0,0,64,0,63,10,0,0
Data 830,830,32767,7,0,0,64,0,63,10,0,0
Data 880,880,32767,7,0,0,64,0,63,10,0,0
Data 932,932,32767,7,0,0,64,0,63,10,0,0
Data 988,988,32767,7,0,0,64,0,63,10,0,0
Data 1047,1047,32767,7,0,0,64,0,63,10,0,0
Data 1109,1109,32767,7,0,0,64,0,63,10,0,0
Data 1175,1175,32767,7,0,0,64,0,63,10,0,0
Data 1245,1245,32767,7,0,0,64,0,63,10,0,0
Data 1319,1319,32767,7,0,0,64,0,63,10,0,0
Data 1397,1397,32767,7,0,0,64,0,63,10,0,0
Data 1480,1480,32767,7,0,0,64,0,63,10,0,0
Data 1568,1568,32767,7,0,0,64,0,63,10,0,0
Data 1661,1661,32767,7,0,0,64,0,63,10,0,0
Data 1760,1760,32767,7,0,0,64,0,63,10,0,0
Data 1865,1865,32767,7,0,0,64,0,63,10,0,0
Data 1976,1976,32767,7,0,0,64,0,63,10,0,0
Data 2093,2093,32767,7,0,0,64,0,63,10,0,0
Data 2217,2217,32767,7,0,0,64,0,63,10,0,0
Data 2349,2349,32767,7,0,0,64,0,63,10,0,0
Data 2489,2489,32767,7,0,0,64,0,63,10,0,0
Data 2637,2637,32767,7,0,0,64,0,63,10,0,0
Data 2794,2794,32767,7,0,0,64,0,63,10,0,0
Data 2959,2959,32767,7,0,0,64,0,63,10,0,0
Data 3136,3136,32767,7,0,0,64,0,63,10,0,0
Data 3322,3322,32767,7,0,0,64,0,63,10,0,0
Data 3520,3520,32767,7,0,0,64,0,63,10,0,0
Data 3729,3729,32767,7,0,0,64,0,63,10,0,0
Data 3951,3951,32767,7,0,0,64,0,63,10,0,0

Dim frequency As Integer
Dim duration As Integer
Dim amplitude As Integer
For iLoop = 1 To 131
    frequency = arrPhoneme(iLoop).frequency1
    duration = arrPhoneme(iLoop).duration
    amplitude = arrPhoneme(iLoop).amplitude

    Print _Trim$(Str$(iLoop)) + ". " + arrPhName(iLoop) + " : " + _
        "frequency=" + _TRIM$(str$(frequency)) + ", " + _
        "duraton=" + _TRIM$(str$(duration)) + ", " + _
        "amplitude=" + _TRIM$(str$(amplitude))
   
    PlaySound frequency, duration, amplitude
Next iLoop

_Delay 0.2 ' Add a short delay after speaking, important for some sound cards.

End

Sub PlaySound (frequency As Integer, duration As Integer, amplitude As Integer)
    Dim amplitude1 As Single
    Dim duration1 As Single
    Dim SampleRate&
    Dim FRate As Single
    Dim SndLoop!

    ' input value of frequency is 160-3951
    ' (not sure if we need to convert it for _SNDRAW)

    ' input duration1 is probably 1/18th second ?
    ' do we need to convert this to some other value?

    ' input value of amplitude is 0-32767
    ' convert to amplitude1 which must be from -1.0 to 1.0
    amplitude1 = (2 * (amplitude / 32767)) - 1
    'amplitude1 = .3 ' amplitude of the signal from -1.0 to 1.0

    SampleRate& = _SndRate ' sets the sample rate
    FRate = frequency / SampleRate&
   
    Print "    PlaySound values: "
    Print "        amplitude1=" + _Trim$(Str$(amplitude1))
    Print "        SampleRate&=" + _Trim$(Str$(SampleRate&))
    Print "        FRate=" + _Trim$(Str$(FRate))
    Print "        Pi2=" + _Trim$(Str$(Pi2))
   
    SndLoop! = 0
    Do While SndLoop! < SampleRate&
        '_SNDRAW SIN((2 * 4 * ATN(1) * SndLoop! / SampleRate&) * frq!) * EXP(-(SndLoop! / SampleRate&) * 3)
        '_SNDRAW amplitude1 * SIN(Pi2 * Duration * FRate) 'sine wave
        _SndRaw amplitude1 * Sgn(Sin(Pi2 * duration * FRate)) ' square wave
        SndLoop! = SndLoop! + 1
    Loop

    _SndRawDone
    Do: Loop While _SndRawLen 'flush the sound playing buffer

End Sub ' PlaySound
Reply


Messages In This Thread
RE: SAM Speech Synthesis ported to native QB64PE (v0.15) - by madscijr - 04-01-2025, 02:21 AM



Users browsing this thread: 1 Guest(s)