2

この質問と同様に、JavaアプリケーションでWAVファイルを再生したいのですが、サウンドを一時停止、再開、再開する機能も必要です。一時停止してから新しいサウンドを作成するだけで再開できると思いますが、そもそも一時停止して再開するにはどうすればよいですか?

私の音は〜15分と152.8mbであることに注意してください。MP3ファイル(同じ長さ、20.8mb)でこれを行う方法があれば、さらに良いでしょう。

4

2 に答える 2

2

WAVファイルの再生については、この質問への回答を参照してください:
ビープ音の頻繁な再生でのJavaオーディオクリップの問題

MP3を再生するには、アプリケーションにバンドルできるかなり小さなjarファイル(100kだと思いますが、おそらくもっと小さい)であるJLayerを使用できます。

これはそれを使用する方法のかなりまともな例です:
MP3.javaJavaでMP3ファイルを再生する方法から

/*************************************************************************
 *  Compilation:  javac -classpath .:jl1.0.jar MP3.java         (OS X)
 *                javac -classpath .;jl1.0.jar MP3.java         (Windows)
 *  Execution:    java -classpath .:jl1.0.jar MP3 filename.mp3  (OS X / Linux)
 *                java -classpath .;jl1.0.jar MP3 filename.mp3  (Windows)
 *  
 *  Plays an MP3 file using the JLayer MP3 library.
 *
 *  Reference:  http://www.javazoom.net/javalayer/sources.html
 *
 *
 *  To execute, get the file jl1.0.jar from the website above or from
 *
 *      http://www.cs.princeton.edu/introcs/24inout/jl1.0.jar
 *
 *  and put it in your working directory with this file MP3.java.
 *
 *************************************************************************/

import java.io.BufferedInputStream;
import java.io.FileInputStream;

import javazoom.jl.player.Player;

public class MP3 {
    private String filename;
    private Player player; 

    // constructor that takes the name of an MP3 file
    public MP3(String filename) {
        this.filename = filename;
    }

    public void close() { if (player != null) player.close(); }

    // play the MP3 file to the sound card
    public void play() {
        try {
            FileInputStream fis     = new FileInputStream(filename);
            BufferedInputStream bis = new BufferedInputStream(fis);
            player = new Player(bis);
        }
        catch (Exception e) {
            System.out.println("Problem playing file " + filename);
            System.out.println(e);
        }

        // run in new thread to play in background
        new Thread() {
            public void run() {
                try { player.play(); }
                catch (Exception e) { System.out.println(e); }
            }
        }.start();

    }


    // test client
    public static void main(String[] args) {
        String filename = args[0];
        MP3 mp3 = new MP3(filename);
        mp3.play();

        // do whatever computation you like, while music plays
        int N = 4000;
        double sum = 0.0;
        for (int i = 0; i < N; i++) {
            for (int j = 0; j < N; j++) {
                sum += Math.sin(i + j);
            }
        }
        System.out.println(sum);

        // when the computation is done, stop playing it
        mp3.close();

        // play from the beginning
        mp3 = new MP3(filename);
        mp3.play();

    }

}
于 2011-07-15T00:00:35.070 に答える
1

この質問と同様に、JavaアプリケーションでWAVファイルを再生したいのですが、サウンドを一時停止、再開、および再開する機能も必要です。一時停止してから新しいサウンドを作成するだけで再開できると思いますが、そもそも一時停止して再開するにはどうすればよいですか?

のほとんどの実装が2秒を超えるステレオ、16ビット、44.1KHzのサウンドをロードしないという事実を除いjavax.sound.sampled.Clipて、これには理想的です。そのため、BigClipを開発しました。 使用可能なメモリと同じ大きさのサウンドを処理できます。ClipBigClip

私の音は〜15分と152.8mbであることに注意してください。MP3ファイル(同じ長さ、20.8mb)でこれを行う方法があれば、さらに良いでしょう。

確実なこと。JavaSoundタグ情報ページで述べたように..

MP3デコードのサポート

Java Sound APIは、内部でサンプリングされたサウンドの多くの形式をサポートしていません。1.6.0_24では、Oracle JRE getAudioFileTypes()は通常{WAVE、AU、AIFF}を返します。少なくともMP3デコーダーが近くにあります。Java Media Frameworkのmp3plugin.jarは、MP3のデコードをサポートしています。

私は現在BigClip、DukeBoxプレーヤーで&mp3plugin.jarJarを使用しています。1024Megのメモリがあれば、1812年の序曲の17:12とボレロの15:38 (私のお気に入りのプレイリストで最も長い2つのトラック)の両方を簡単にロードできます。現在のトラックを再生しながら次のトラックをロードするので、「両方」について言及します。


余談ですが、sun.audioパッケージ(両方のリンクされたスレッドで言及されている)に言及しているコードを見ることに注意してください。このパッケージおよび/またはそのクラスは、次のリリースで(Oracleの裁量により)移動または削除される可能性があり、Java1.3以降は必要ありません

于 2011-07-15T01:53:21.327 に答える