2

私はJavaがまったく初めてです。しかし、ガールフレンドにJavaで書かれたささやかな贈り物をしたいと思っています。私が持っているプログラム自体は動作します...しかし、追加したいのは、プログラムが実行されている限りループするオーディオファイルです。私はたくさんのものに目を通し、多くのことを試しましたが、どういうわけか私は間違いを犯しているようです. はい、私は多くのコード例があることを知っています。アプレットではありません。

それは次のコードです...きれいなコードであってはなりません。どうにかして動作することを願っています。誰かが助けてくれれば幸いです。

import java.io.BufferedInputStream;
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.UnsupportedAudioFileException;

/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author Shore
 */
public class audio {

            public static void main(String[] args) throws UnsupportedAudioFileException, IOException, LineUnavailableException  {
            File f = new File("C:\\Users\\Shore\\Documents\\NetBeansProjects\\Meli13\\src\\WW.wav");

            AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(f);
            BufferedInputStream bufferedInputStream = new BufferedInputStream(audioInputStream);
            AudioFormat af = audioInputStream.getFormat();
            int size = (int) (af.getFrameSize() * audioInputStream.getFrameLength());
            byte[] audio = new byte[size];
            DataLine.Info info = new DataLine.Info(Clip.class, af, size);
            bufferedInputStream.read(audio, 0, size);
            Clip clip = (Clip) AudioSystem.getLine(info);
            clip.open(af, audio, 0, size);
            clip.start();

            }
}

どうもありがとう。WW.wav は同じフォルダーにあります。

4

1 に答える 1

1

かわいいね!これは cupid.stackoverflow.com のようなものですか? ;)

Java はまったくの初心者なので、API ドキュメントは特定のクラスの機能を理解するのに非常に役立つことを覚えておいてください。この場合、ここでドキュメントにアクセスできる Clip クラスに関心があります。

ドキュメントに記載されているように、再生を自動的にループするようにクラスを設定できます。あなたは次のようにそれをやって回ります:

        ...
        Clip clip = (Clip) AudioSystem.getLine(info);
        clip.open(af, audio, 0, size);
        clip.loop(3); //Added this line
        clip.setLoopPoints(0, -1); //Added this line
        clip.start();
        ...

clip.loop(3)Java にクリップを 3 回繰り返すように指示します。永遠に繰り返したい場合はClip.LOOP_CONTINUOUSLY、パラメーターとして使用します。clip.setLoopPoints(0,-1)最初 (0) から最後 (-1 で指定) まで繰り返すように Java に指示します。これらはフレーム番号であり、絶対時間ではありません。したがって、ファイルの特定の部分をループしたい場合は、そのための計算を行う必要があります。しかし、それはちょっとしたトピックです。

最後に (そして最も重要なことに)、Clip新しいスレッドを開始します。つまり、アプリケーションが を呼び出した直後に終了するとclip.start()Clipスレッドが終了し、あまりにも早く終了するため、実際には何も聞こえません。

アプリケーションのセットアップ方法はわかりませんが、提供されたコード スニペットでは、実際に何かを聞く唯一の方法は、Clipスレッドの実行中にメイン スレッドを一時停止することです。次のように実行できます。

while (clip.isRunning()) {
    Thread.sleep(1000);
}

それがお役に立てば幸いです。あなたはその女性とポイントを獲得してください。乾杯。

于 2013-04-04T13:48:33.180 に答える