Сам перевод мне не нужен, мне нужно только произношение передаваемого текста.
Загуглил свежую рабочую ссылку на TTS и оно заработало.
Но вот странная проблема. Русский текст она превращает во что-то невообразимое, при чтении. Вот пример. Послушайте сами.
При том, когда русские слова пишешь латиницей, она их читает по-русски, это хорошо слышно.
Для примера послушайте чтение на английском и немецком. Там ни каких проблем нет.
- Код: Выделить всё
Option Explicit
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Private Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As Long, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As Long) As Long
Public Function GoogleSpeak(ByVal sText As String, Optional ByVal Language As String = "ru", Optional ByVal bDoevents As Boolean) As Boolean
On Error Resume Next
Dim sTempPath As String, ml As String
Dim FileLength As Long
sText = Replace(sText, vbCrLf, " ")
If Len(sText) > 100 Then Exit Function
sTempPath = Environ("Temp") & "\TempMP3.MP3"
If URLDownloadToFile(0&, "https://translate.google.com.vn/translate_tts?q=" & sText & "&tl=" & Language & "&client=tw-ob", sTempPath, 0&, 0&) = 0 Then
If mciSendString("open " & Chr$(34) & sTempPath & Chr$(34) & " type MpegVideo" & " alias myfile", 0&, 0&, 0&) = 0 Then
ml = String(30, 0)
Call mciSendString("status myfile length ", ml, 30, 0&)
FileLength = Val(ml)
If FileLength Then
If mciSendString("play myFile", 0&, 0&, 0&) = 0 Then
Do While mciSendString("status myfile position ", ml, 30, 0&) = 0
If Val(ml) = FileLength Then GoogleSpeak = True: Exit Do
If bDoevents Then DoEvents
Loop
End If
End If
Call mciSendString("close myfile", 0&, 0&, 0&)
End If
Kill sTempPath
End If
End Function
Private Sub Command1_Click()
'Английский
Debug.Print GoogleSpeak("He said he hoped to catch someone dropping off 100 ballots or 50 ballots.", "en", True)
'Немецкий
'Debug.Print GoogleSpeak("Das Berliner Start-up Mietz mochte die Orientierung auf dem Mietmarkt mit einer App erleichtern.", "de", True)
'Русский
'Debug.Print GoogleSpeak("Privet. Horoshaya pogoda. Такие дела, брат. Цена - 553 raza.", "ru", True)
End Sub