尝试从URL播放声音Java

问题描述:

我在播放某个URL的声音时遇到了麻烦。尝试从URL播放声音Java

这里是我当前的代码,

public static void aplay(String url) throws 
    MalformedURLException, UnsupportedAudioFileException, 
    IOException, LineUnavailableException { 

     Clip c = AudioSystem.getClip(); 
     AudioInputStream a = AudioSystem.getAudioInputStream(new URL(url)); 
     Clip c = AudioSystem.getClip(); 
     c.open(a); 
     c.start(); 
} 

而且,我在我的“主”的方法这种方法。我把https://translate.google.com/translate_tts?ie=utf-8&tl=en&q=Hi%20There作为'url',它不起作用,它会以403响应(服务器返回的HTTP响应代码:403)。我只是想知道我是否可以解决这个问题。

感谢, 丹

+0

403表示禁止。一般来说,除非你有一定的访问级别,否则这个问题不会轻易修复。 – rfornal 2014-12-06 04:27:27

+0

@rfornal有什么替代谷歌语音链接? – Dann15 2014-12-06 04:30:47

+0

还有几个选择......我已经使用了一些创建培训视频,但不像编程那样在这里进行。 – rfornal 2014-12-06 04:39:02

的网址是谷歌一个声音文件转换。为了防止滥用Google服务,服务器会执行一些启发式检查,试图通过该检查来判断它是访问该URL的人或自动服务。这就是为什么它回答403,实际上这意味着“禁止”。

声明:考虑为什么他们禁止并检查他们的使用条款。

在Chrome浏览器中直接打开网址。使用像wget或类URL这样的工具检索URL不会 - 至少不是开箱即用的。

您需要更改HTTP请求的User-Agent属性才能伪造不同的用户代理。您可以通过连接“手动”并更改“User-Agent”请求属性来完成此操作。

以下WGet.java上市演示了如何做到这一点:

import java.io.*; 
import java.net.*; 

public class WGet { 
    public static void main(final String... args) throws IOException { 
     for (final String arg : args) { 
      wget(arg); 
     } 
    } 
    public static void wget(final String arg) throws IOException { 
     wget(new URL(arg)); 
    } 
    public static void wget(final URL url) throws IOException { 
     final URLConnection con = url.openConnection(); 
     con.setRequestProperty("User-Agent", "My Client"); 
     try (final InputStream in = con.getInputStream()) { 
      copy(in, System.out); 
     } 
    } 
    public static void copy(final InputStream in, final OutputStream out) throws IOException { 
     final byte[] buf = new byte[4096]; 
     for (int bytesRead; (bytesRead = in.read(buf)) != -1;) 
      out.write(buf, 0, bytesRead); 
     out.flush(); 
    } 
} 

AudioSystem也可以用InputStream使用。因此,下面aplay()方法应该工作:

public static void aplay(String url) throws UnsupportedAudioFileException, IOException, LineUnavailableException { 
    Clip c = AudioSystem.getClip(); 
    AudioInputStream a = AudioSystem.getAudioInputStream(openStream(url)); 
    Clip c = AudioSystem.getClip(); 
    c.open(a); 
    c.start(); 
} 
public static InputStream openStream(String url) throws IOException { 
    final URL url = new URL(url); 
    final URLConnection con = url.openConnection(); 
    con.setRequestProperty("User-Agent", "My Client"); 
    return con.getInputStream(); 
} 

免责声明:我向您展示的技术方案。如果您将此代码添加到您的程序并使用它从Google获取声音文件,那么您实际上可能违反了Google翻译的使用条款。在产品中使用此代码从Google翻译中获取声音文件之前,请先获得相关法律建议。