簡體   English   中英

基於Java的游戲的聲音格式

[英]Sound format for a Java-based game

我正在開發一個Java游戲,想要捆綁和播放一些采樣的聲音效果。 我打算使用標准的javax.sound.sampled功能來播放它們。

哪種格式最適合這類樣品? 我正在尋找一種良好的壓縮,良好的質量和方便Java編程使用的混合。

質量與尺寸

這里有一些關於MP3與WAV差異的有趣文章。

為何選擇MP3和WAV? 這些是我在創建程序時最常見的,因此兼容性從來都不是問題。

我有這個非常有用的java文件,可以為您完成所有事情。 您使用聲音文件的路徑構造對象,然后使用方法來播放,停止,循環它等。

在此期間,您可以查看這些內容以供參考,盡管它們不那么干凈: 如何在Java中播放聲音?


簡單編程

不幸的是,我沒有這台計算機上的文件,但這是一個簡化版本。 這並不像你希望的那樣使用javax.swing,但說實話,我總是喜歡替代方法。

因為這與我在其他計算機上的文件不一樣,所以我不能保證兼容MP3。

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);
    }

}

實例:

String projectPath = <project directory>; // getting this is another question    
Sound helloSound = new Sound(new File(projectPath + "/Sounds"));

現在你可以調用helloSound.play(); 每當你想要播放剪輯。

我更喜歡這種方法,因此您不必在每次要播放剪輯時不斷地將所有內容設置為流。 這應該有效地與一些聲音咬合和模糊,但一定不要過度使用它並占用記憶。 用於常見的聲音效果。


簡單編程,續

找到一個好的文件播放MP3,就像我上面演示的那樣。 我完全忘了把我的東西放在一個單獨的線程中,所以這是一個更好的選擇。

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

    }

}

餡餅很簡單,對嗎? )。

這里拿到罐子。 請參閱此處的文檔。

Java支持mp3,mp3格式讓您可以選擇壓縮與質量之間的平衡。

有一個純java的MP3解碼器, http://www.javazoom.net/javalayer/javalayer.html ,它插入javax.sound包。 Sun還發布了一個用於java聲音的mp3插件

我不是這方面的專家,但Sun的所有教程和示例都使用.au文件。 似乎是一個保證最低的共同點。 為了提高文件格式的靈活性,您需要使用Java Media Framework之類的東西。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM