从Google翻译文本到语音下载MP3

时间:2012-02-06 17:01:22

标签: vb.net mp3 google-translate

我在互联网上找到了这段代码,它使用了Google翻译的文字转语音功能。这是代码:

http://translate.google.com/translate_tts?tl=en&q="hello world"

我知道如何在我的vb.net中调用此功能,但我不知道如何从Google翻译中保存MP3文件。我使用vb.net中的system.speech来获得此功能,但我特别需要从谷歌翻译获得演讲。那么,有没有人知道如何使用该URL保存谷歌翻译的声音文件?感谢。

6 个答案:

答案 0 :(得分:21)

编辑2015-12-26

自2015-12-21起,此代码在进一步更改Google TTS API后不再有效。如@ncpierson所示,需要一个新的附加参数tk,我很难在shell脚本中计算出它的计算方法。当我可以的时候,我会用新的编辑修改这个答案。

我不确定Windows,但在Linux中,从命令行来看这很容易。我使用命令行脚本下载文本字符串的英文音频:

#!/bin/bash
# write an English text string as an audio file using Google Translate
# usage: en2audio.sh <text>
wget -q -U Mozilla -O "$*.mp3" "http://translate.google.com/translate_tts?ie=UTF-8&client=t&tl=en&q=$*"

我用中文做同样的事情(脚本有点简单,因为在单词之间没有空格来解析):

#!/bin/bash
# write a Chinese text string as an audio file using Google Translate
# usage: zh2audio.sh <text>
wget -q -U Mozilla -O $1.mp3 "http://translate.google.com/translate_tts?ie=UTF-8&client=t&tl=zh&q=$1"

大多数Linux发行版都包含wget作为标准,但可以轻松下载(参见,例如this link)。

(感谢@ncpierson client=t参数)。

答案 1 :(得分:7)

当我使用您的示例时,谷歌翻译页面运行的脚本生成了一个文件 名为“translate_tts”,没有文件扩展名。

使用此文件的一种简单方法是告诉您的浏览器,例如Mozilla [在“工具”下/ “OPTIONS”/ APPLICATIONS],用于保存音频文件 - 在这种情况下我相信它是一个MP3, 即使没有延期。在任何情况下,选择audio / wave或audio / Mpg旁边的“ACTION”下的选项为“SAVE FILE”。

当浏览器加载您的网址时,会下载名为“translate_tts”的文件, 无论数据是什么。所以,在你的情况下,我会将文件名更改为 “你好,World.mp3”。这样你就可以在你的硬盘上放置文件,其中包含你想要的音频,可以由任何音频播放器播放,最好是VLC媒体播放器,因为它会 几乎可以播放任何格式。

当然,如果你想要一个不同的音频,例如“再见世界”,您只需更改您的网址即可 到

  

http://translate.google.com/translate_tts?tl=en&q="Goodbye-World"

并重复上述步骤将文件另存为“Goodbye-World.mp3”。

答案 2 :(得分:3)

如果您想手动执行此操作,请右键点击“另存为...”即可。示例:test your own example

我不知道vb.net,但我打算尝试通过linux中的bash脚本下载几点信息。在我看到vb.net标签之前,我建议使用wget。检查this thread,它可能会给你一些想法。你基本上想要下载链接的页面,这是一个mp3。

答案 3 :(得分:2)

这是用Java编写的解决方案:

URL url = new URL("http://translate.google.com/translate_tts?tl=en&q=\"hello world\"");
HttpURLConnection httpcon = (HttpURLConnection) url.openConnection();
httpcon.addRequestProperty("User-Agent", "anything");
IOUtils.copy(httpcon.getInputStream(), new FileOutputStream("output.mp3"));

省略了异常处理。 IOUtils来自Apache Commons IO。

答案 4 :(得分:2)

我当时正在尝试编写一个与你的功能完全相同的函数,加上一些额外的功能,经过一些搜索,我能够生成以下代码。它做了四件事:

  1. 网络是否要求从Google TTS获取MP3文件
  2. 将MP3保存到文件中(我将其放在运行目录的1层深处)
  3. 使用Windows媒体播放器COM API播放文件(可以作为项目中的COM引用包含在内)
  4. 存储以前发音的短语的历史记录,以便在出现重复的短语时不必再次点击API(在我计划安装时,互联网并不是很好)。

  5. Imports System.Net
    Imports System.IO
    Imports System.Text
    
    Dim MP As New MediaPlayer.MediaPlayer
    
    Private Sub SaySomething(TTS As String)
    If Not TTS = "" Then
        If Not System.IO.File.Exists(Environment.CurrentDirectory.ToString() + "/TTS/" + TTS + ".mp3") Then
            Dim WR As HttpWebRequest = HttpWebRequest.Create("http://translate.google.com/translate_tts?tl=en&q=""" + TTS + """")
    
            Dim response As HttpWebResponse = CType(WR.GetResponse(), HttpWebResponse)
    
            Dim receiveStream As Stream = response.GetResponseStream()
    
            Dim readStream As New StreamReader(receiveStream, Encoding.UTF8)
    
            If Not System.IO.Directory.Exists(Environment.CurrentDirectory.ToString() + "/TTS") Then
                System.IO.Directory.CreateDirectory(Environment.CurrentDirectory.ToString() + "/TTS")
            End If
    
            Dim fs As New FileStream(Environment.CurrentDirectory.ToString() + "/TTS/" + TTS + ".mp3", FileMode.Create)
    
            readStream.BaseStream.CopyTo(fs)
    
            fs.Close()
            fs.Dispose()
            readStream.Dispose()
            receiveStream.Dispose()
        End If
    
        MP.Open(Environment.CurrentDirectory.ToString() + "/TTS/" + TTS + ".mp3")
    End If
    End Sub
    

答案 5 :(得分:0)

我已经制作了一种半自动方式,可以在2017年获取生成的语音文件并删除所有Google的元数据。它适用于Firefox,它是用C#编写的。所以它接近你想要做的,但仍然不是100%。我试图直接获取文件,但谷歌已经实现了一些非常奇特的安全功能,我现在似乎无法解决这些问题。当我以为我靠近时,它又送回了ReCaptcha。

我在这里开源:https://github.com/Goodlookinguy/FFMediaCacheGrabber并提供了一个操作视频。

不会撒谎,我对这个答案感觉不太好,因为它不是你想要的,但至少我现在可以帮助别人。

相关问题