Android Question Google TTS KEY_PARAM_PAN parameter implementation

Wolodymyr

Member
From API 11 Google TTS engine support left/right balance setting by KEY_PARAM_PAN parameter (where -1 mean only left, 0 mean equal left/right volume, 1 mean only right channel). Question - how to use this in B4A?!
Also, KEY_PARAM_VOLUME - may be used for TTS speaking independent volume related to master volume

Thanks for help
 

Erel

B4X founder
Staff member
Licensed User
Longtime User
B4X:
Sub Class_Globals
    Private Root As B4XView
    Private xui As XUI
    Private tts As TTS
    Private Button1 As B4XView
End Sub

Public Sub Initialize
    
End Sub

Private Sub B4XPage_Created (Root1 As B4XView)
    Root = Root1
    Root.LoadLayout("MainPage")
    tts.Initialize("tts")
    Button1.Enabled = False
    Wait For TTS_Ready (Success As Boolean)
    Button1.Enabled = Success
End Sub

Private Sub Button1_Click
    Speak("test", CreateMap("pan": "1"))
End Sub

Private Sub Speak (Text As String, Params As Map)
    Dim jo As JavaObject = tts
    Dim map As JavaObject
    map.InitializeNewInstance("java.util.HashMap", Array(Params))
    jo.RunMethod("speak", Array(Text, 1, map))
End Sub
 
Upvote 0

Wolodymyr

Member
Thanks!

I updated previous Sub from forum to work TTS together with volume and balance setting

SpeakWithVolume:
Private Sub SpeakWithVolume (TTSObject As TTS, Text As String, ClearQueue As Boolean, Volume As Float, Balance As Float)
    Dim vol As String = Volume
    Dim bal As String = Balance
    Dim queue As Int
    If ClearQueue Then queue = 0 Else queue = 1
  
    Dim m As JavaObject
    m.InitializeNewInstance("java.util.HashMap", Array(CreateMap("volume": vol, "pan": bal)))

    Dim jo As JavaObject = TTSObject
    jo.RunMethod("speak", Array(Text, queue, m))
End Sub
 
Upvote 0

Wolodymyr

Member
Updated Sub with independed LeftVolume and RightVolume parameter

Updated SpeakWithVolume unified to MediaPlayer and MediaPlayerStream:
Private Sub SpeakWithVolume (TTSObject As TTS, Text As String, ClearQueue As Boolean, LeftVolume As Float, RightVolume As Float)
    Dim Volume As Float = Max(LeftVolume,RightVolume)
    If Volume=0 Then Return
    Dim Balance As Float = (RightVolume-LeftVolume)/Volume

    Dim Vol As String = Volume
    Dim Bal As String = Balance
    Dim queue As Int
    If ClearQueue Then queue = 0 Else queue = 1

    Dim m As JavaObject
    m.InitializeNewInstance("java.util.HashMap", Array(CreateMap("volume": Vol, "pan": Bal)))

    Dim jo As JavaObject = TTSObject
    jo.RunMethod("speak", Array(Text, queue, m))
End Sub
 
Upvote 0
Top