Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/340.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中的启动和停止声音_Java_Audio_Javasound - Fatal编程技术网

Java中的启动和停止声音

Java中的启动和停止声音,java,audio,javasound,Java,Audio,Javasound,与之类似,我希望在Java应用程序中播放WAV文件-但是,我也希望能够暂停、恢复和重新启动声音。我猜我可以通过暂停然后创建一个新的声音来重新开始,但是我应该如何暂停然后重新开始呢 请注意,我的声音为~15分钟和152.8mb。如果有办法用MP3文件(同样的长度,20.8mb)来播放,那就更好了。要播放WAV文件,请参阅此问题的答案: 对于播放MP3,您可以使用一个相当小的罐子(我认为是100k,可能更小),可以与应用程序捆绑在一起 下面是一个关于如何使用它的相当不错的例子: (来自) /***

与之类似,我希望在Java应用程序中播放WAV文件-但是,我也希望能够暂停、恢复和重新启动声音。我猜我可以通过暂停然后创建一个新的声音来重新开始,但是我应该如何暂停然后重新开始呢


请注意,我的声音为~15分钟和152.8mb。如果有办法用MP3文件(同样的长度,20.8mb)来播放,那就更好了。

要播放WAV文件,请参阅此问题的答案:

对于播放MP3,您可以使用一个相当小的罐子(我认为是100k,可能更小),可以与应用程序捆绑在一起

下面是一个关于如何使用它的相当不错的例子:
(来自)

/*************************************************************************
*编译:javac-classpath.:jl1.0.jarmp3.java(OSX)
*javac-classpath。;jl1.0.jar MP3.java(Windows)
*执行:java-classpath.:jl1.0.jar MP3 filename.MP3(OS X/Linux)
*java-classpath。;jl1.0.jar MP3 filename.MP3(Windows)
*  
*使用JLayer MP3库播放MP3文件。
*
*参考:http://www.javazoom.net/javalayer/sources.html
*
*
*要执行,请从上面的网站或从中获取文件jl1.0.jar
*
*      http://www.cs.princeton.edu/introcs/24inout/jl1.0.jar
*
*并将其与此文件MP3.java一起放在您的工作目录中。
*
*************************************************************************/
导入java.io.BufferedInputStream;
导入java.io.FileInputStream;
导入javazoom.jl.player.player;
公共级MP3{
私有字符串文件名;
私人玩家;
//采用MP3文件名的构造函数
公共MP3(字符串文件名){
this.filename=文件名;
}
public void close(){if(player!=null)player.close();}
//将MP3文件播放到声卡
公共游戏{
试一试{
FileInputStream fis=新的FileInputStream(文件名);
BufferedInputStream bis=新的BufferedInputStream(fis);
玩家=新玩家(bis);
}
捕获(例外e){
System.out.println(“播放问题文件”+文件名);
系统输出打印ln(e);
}
//在新线程中运行以在后台播放
新线程(){
公开募捐{
试试{player.play();}
catch(异常e){System.out.println(e);}
}
}.start();
}
//测试客户端
公共静态void main(字符串[]args){
字符串文件名=args[0];
MP3=新的MP3(文件名);
mp3.play();
//当音乐播放时,做任何你喜欢的计算
int N=4000;
双和=0.0;
对于(int i=0;i
与此问题类似,我希望在Java应用程序中播放WAV文件-但是,我还希望能够暂停、恢复和重新启动声音。我猜我可以通过暂停然后创建一个新的声音来重新开始,但是我应该如何暂停然后重新开始呢

javax.sound.sampled.Clip
非常适合这种情况,除了大多数
Clip
的实现不会加载超过2秒的16位44.1KHz立体声!因为这个原因,我发展了
BigClip
可以处理与可用内存一样大的声音

请注意,我的声音为~15分钟和152.8mb。如果有办法用MP3文件(同样的长度,20.8mb)来实现这一点,那就更好了

当然可以。如……中所述

MP3解码支持 Java声音API在内部不支持许多格式的采样声音。在1.6.024中,Oracle JRE getAudioFileTypes()通常会返回{WAVE,AU,AIFF}。至少一个MP3解码器就在附近。Java媒体框架的mp3plugin.jar支持解码MP3

我目前在DukeBox播放器中使用的是
BigClip
&mp3plugin.jar。考虑到1024毫克的内存,它可以轻松加载1812序曲的17:12和波列罗的15:38(我最喜欢的曲目列表中最长的两首曲目)。我提到“两者”,因为它将在播放当前曲目时加载下一首曲目


另外,请注意不要查看提到
sun.audio
包(在两个链接线程中都提到)的代码。这个包和/或它的类可能会在下一个版本中被移动或删除(由Oracle自行决定)&自从Java1.3以来就没有必要了。

/*************************************************************************
 *  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();

    }

}