1

我正在学习英语,我想开发一个软件来帮助我发音。

有一个叫 HowJSay 的网站,如果你在这里输入:http: //www.howjsay.com/index.php ?word= car 你会立即听到 car 这个词的发音。我想用 JAVA 开发一个无需进入网站就可以播放这种声音的软件 =]

我试过这个,但不起作用=/

public static void main(String[] args) throws Exception {
    URL url = new URL("http://www.howjsay.com/index.php?word=car");
    url.openConnection();
    AudioStream as = new AudioStream(url.openStream());
    AudioPlayer.player.start(as);
    AudioPlayer.player.stop(as);
}

有任何想法吗?请。

4

4 回答 4

4

干得好

import javax.sound.sampled.*;
import java.io.IOException;
import java.net.URL;

public class HowJSay
{
public static void main(String[] args) {
    AudioInputStream din = null;
    try {
        AudioInputStream in = AudioSystem.getAudioInputStream(new URL("http://www.howjsay.com/mp3/"+ args[0] +".mp3"));
        AudioFormat baseFormat = in.getFormat();
        AudioFormat decodedFormat = new AudioFormat(
                AudioFormat.Encoding.PCM_SIGNED,
                baseFormat.getSampleRate(), 16, baseFormat.getChannels(),
                baseFormat.getChannels() * 2, baseFormat.getSampleRate(),
                false);
        din = AudioSystem.getAudioInputStream(decodedFormat, in);
        DataLine.Info info = new DataLine.Info(SourceDataLine.class, decodedFormat);
        SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);
        if(line != null) {
            line.open(decodedFormat);
            byte[] data = new byte[4096];
            // Start
            line.start();

            int nBytesRead;
            while ((nBytesRead = din.read(data, 0, data.length)) != -1) {
                line.write(data, 0, nBytesRead);
            }
            // Stop
            line.drain();
            line.stop();
            line.close();
            din.close();
        }

    }
    catch(Exception e) {
        e.printStackTrace();
    }
    finally {
        if(din != null) {
            try { din.close(); } catch(IOException e) { }
        }
    }
}

}
于 2012-12-09T16:58:35.773 回答
2

Java Sound可以轻松播放短片,但开箱即用支持有限数量的格式。它默认支持的格式由AudioSystem.getAudioFileTypes()& 给出,该列表不包括 MP3。

对 MP3 缺乏支持的解决方案是在应用程序的运行时类路径中添加一个解码器。由于 Java Sound 在服务提供者接口上工作,它只需要在类路径上就可以使用。MP3 解码器可以在 中找到mp3plugin.jar

至于播放 MP3 的代码,信息上的短源。只要剪辑很短,页面就足够了。即。

import java.net.URL;
import javax.swing.*;
import javax.sound.sampled.*;

public class LoopSound {

    public static void main(String[] args) throws Exception {
        URL url = new URL(
            "http://pscode.org/media/leftright.wav");
        Clip clip = AudioSystem.getClip();
        // getAudioInputStream() also accepts a File or InputStream
        AudioInputStream ais = AudioSystem.
            getAudioInputStream( url );
        clip.open(ais);
        clip.loop(Clip.LOOP_CONTINUOUSLY);
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                // A GUI element to prevent the Clip's daemon Thread
                // from terminating at the end of the main()
                JOptionPane.showMessageDialog(null, "Close to exit!");
            }
        });
    }
}
于 2012-12-10T01:53:09.250 回答
1

如果您不太关心该网站,那么您可以尝试使用 Google Translate API

try{
        String word="car";
        word=java.net.URLEncoder.encode(word, "UTF-8");
        URL url = new URL("http://translate.google.com/translate_tts?ie=UTF-8&tl=ja&q="+word);
        HttpURLConnection urlConn = (HttpURLConnection) url.openConnection();
        urlConn.addRequestProperty("User-Agent", "Mozilla/4.76");
        InputStream audioSrc = urlConn.getInputStream();
        DataInputStream read = new DataInputStream(audioSrc);
        AudioStream as = new AudioStream(read);
        AudioPlayer.player.start(as);
        AudioPlayer.player.stop(as);
}

在此处的帮助下: Java:从 Google 翻译下载文本到语音

如果每个word站点都保证有带链接的 mp3 文件,howjsay.com/mp3/word.mp3那么您只需将 URL 更改为

URL url = new URL("howjsay.com/mp3/" + word + ".mp3");

于 2012-12-09T16:31:01.250 回答
0

如果您对 Marek 提供的代码有疑问,请确保您符合以下标准:

  1. 使用支持的音频格式,例如 16 位 .wav
  2. 确保您使用的 URL 实际上是在自动播放音频。

仅仅参考音频文件的下载页面是不够的。它必须流式传输音频。YouTube URL 不起作用,因为它们是视频。Audacity 是将音频文件转换为兼容的 16 位 .wav 文件的好方法,如果您有自己的域/网站,则可以从那里提供文件的直接链接。

于 2017-12-09T19:59:09.630 回答