首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于Java游戏的声音格式

基于Java游戏的声音格式
EN

Stack Overflow用户
提问于 2010-07-13 21:14:38
回答 3查看 1.7K关注 0票数 3

我正在开发一个Java游戏,我想捆绑并播放一些采样的声音效果。我计划使用标准的javax.sound.sampled功能来播放它们。

哪种格式最适合这类样本?我正在寻找一个好的压缩,良好的质量和方便的Java内编程使用的混合。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-07-13 21:47:46

质量与大小

这里有一些关于MP3和WAV区别的有趣文章。

  • http://www.angelfire.com/vt2/tommymc3/MP3vsWav.html
  • http://www.scinet.cc/articles/wma-vs-mp3/wma-mp3.html
  • http://ask.yahoo.com/20000602.html

为什么选择MP3和WAV?这些是我在创建程序时最常看到的,所以兼容性从来都不是问题。

我有一个非常有用的java文件,它可以为你做所有的事情。使用声音文件的路径构造对象,然后使用方法播放、停止、循环等。

同时,您可以查看这些内容以供参考,尽管它们不是那么干净:How can I play sound in Java?

简单编程

不幸的是,我在这台电脑上没有这个文件,但这里有一个简化的版本。这并没有像您希望的那样使用javax.swing,但老实说,我一直更喜欢其他方法。

因为这与我在另一台计算机上的文件不同,所以我不能保证MP3兼容性。

代码语言:javascript
复制
import  sun.audio.*;
import  java.io.*;

public class Sound {

    private InputStream input;
    private AudioStream audio;

    public Sound (File fileName)
    {
        input = new FileInputStream();
        audio = new AudioStream(input);
    }

    public void play()
    {
        AudioPlayer.player.start(audio);
    }

    public void stop()
    {
        AudioPlayer.player.stop(audio);
    }

}

实例化:

代码语言:javascript
复制
String projectPath = <project directory>; // getting this is another question    
Sound helloSound = new Sound(new File(projectPath + "/Sounds"));

现在,只要您想要播放剪辑,就可以调用helloSound.play();

我更喜欢这种方法,这样你就不必每次想要播放一个剪辑时都不断地把所有东西都设置成一个流。这对于一些声音片段和格式回复应该是有效的,但请确保不要过度使用它并占用内存。使用此选项可获得常见的声音效果。

简单编程,续写

我找到了一个很好的文件来播放MP3s,就像我上面展示的一样。我完全忘了把我的放在一个单独的线程中,所以这是一个更好的选择。

代码语言:javascript
复制
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();

    }

}

简单如馅饼,对吧?;)。

获取jar here。请参阅文档here

票数 4
EN

Stack Overflow用户

发布于 2010-07-13 21:19:50

Java支持mp3,mp3格式让您可以选择在压缩和质量之间取得平衡。

有一个纯java MP3解码器http://www.javazoom.net/javalayer/javalayer.html,它插入到javax.sound包中。Sun还发布了java sound的mp3 plugin

票数 2
EN

Stack Overflow用户

发布于 2010-07-13 21:22:24

我不是这方面的专家,但是来自Sun的所有教程和示例都使用.au文件。似乎是一个有保证的最低公分母。为了提高文件格式的灵活性,您需要使用像Java Media Framework这样的格式。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3237498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档