2014-12-06 1 views
0

특정 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(); 
} 

내 현재 코드입니다. 나는 'url'로 https://translate.google.com/translate_tts?ie=utf-8&tl=en&q=Hi%20There을 넣었고 작동하지 않을 것이고, 403 (서버가 반환 한 HTTP 응답 코드 : 403)으로 응답 할 것입니다. 이 문제를 해결할 수 있을지 궁금합니다.

감사합니다, 댄

+0

403 금지되어 있음을 의미합니다. 일반적으로 어떤 수준의 액세스 권한이 없으면 쉽게 해결되지 않습니다. – rfornal

+0

@rfornal은 Google 음성 링크에 대한 대안이 있습니까? – Dann15

+0

몇 가지 대안이 있습니다 ... 저는 몇 가지 교육용 비디오를 사용해 왔지만 여기에서하는 것처럼 프로그래밍 방식으로 제작하지는 않았습니다. – rfornal

답변

0

URL은 구글에서 사운드 파일 번역입니다. Google 서비스의 오용을 방지하기 위해 서버는 휴리스틱 검사를 수행하여 사용자가 URL에 액세스하는 자동화 된 서비스인지 여부를 알려줍니다. 그것이 실제로 "금지됨"을 의미하는 403으로 응답하는 이유입니다.

면책 조항 : 왜 금지하고 사용 조건을 확인하십시오.

Chrome과 같이 브라우저에서 직접 URL을 열면 작동합니다. wget 또는 class URL과 같은 도구로 URL을 검색하는 것은 적어도 별다른 편의를 제공하지 않습니다.

다른 사용자 에이전트를 위조하기 위해 HTTP 요청의 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 사용할 수 있습니다.

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(); 
} 

면책 조항 : 그래서, 다음 aplay() 방법은 작동합니다 나는 당신에게 기술 솔루션을 표시하고 있습니다. 이 코드를 프로그램에 추가하고이를 사용하여 Google에서 사운드 파일을 가져 오는 경우 실제로는 Google 번역 사용 약관을 위반했을 수 있습니다. 제품에서이 코드를 사용하여 Google 번역사에서 사운드 파일을 가져 오기 전에 법적 자문을 구하십시오.

관련 문제