Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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,我有两个问题-(1)如何播放小的声音片段,例如飞碟飞行、子弹射击、物体被子弹击中等。非常短但实时的声音。我喜欢古老的街机音乐,所以它们不需要慷慨大方。我希望在尽可能少的代码中运行这些。这引出了我的第二个问题。。。 (2) 有人知道在哪里可以找到这些声音片段吗 请注意,我在这里看到了一些答案,它们似乎不完整。如果你有一个简单的通用代码,那就太好了!我对声音知之甚少,因为我通常不会在游戏写作中走这么远 感谢您提供的所有信息-我非常感谢 我不知道API部分,但是对于声音,请尝试使用javax.soun

我有两个问题-(1)如何播放小的声音片段,例如飞碟飞行、子弹射击、物体被子弹击中等。非常短但实时的声音。我喜欢古老的街机音乐,所以它们不需要慷慨大方。我希望在尽可能少的代码中运行这些。这引出了我的第二个问题。。。 (2) 有人知道在哪里可以找到这些声音片段吗

请注意,我在这里看到了一些答案,它们似乎不完整。如果你有一个简单的通用代码,那就太好了!我对声音知之甚少,因为我通常不会在游戏写作中走这么远


感谢您提供的所有信息-我非常感谢

我不知道API部分,但是对于声音,请尝试使用javax.sound,可以获得简单的声音效果


编辑:使用线程(或不使用线程)

import javax.sound.sampled.*;
导入javax.swing.*;
导入java.awt.*;
导入java.awt.event.*;
公共类AppWithSound2扩展JFrame实现ActionListener{
按钮b1;
按钮b2;
私有静态最终长serialVersionUID=1L;
公共静态void main(字符串[]args){
SwingUtilities.invokeLater(新的Runnable(){
公开募捐{
AppWithSound2 app=新的AppWithSound2();
应用程序setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.startApp();
}
});
}
公营机构{
initGUI();
}
私有void startApp(){
setVisible(真);
}
私有void initGUI(){
setLayout(新的FlowLayout());
设置大小(300200);
b1=新的JButton(“无螺纹的声音”);
b2=新的JButton(“带螺纹的声音”);
b1.添加ActionListener(本);
b2.addActionListener(本);
添加(b1);
添加(b2);
}
已执行的公共无效操作(操作事件e){
如果(如getSource()==b1){
激光声;
}
如果(如getSource()==b2){
新的LaserSound().start();
}
}
}
类LaserSound扩展线程{
公开募捐{
激光声;
}
公共静电真空激光器(){
int repeat=10;
试一试{
AudioFormat af=新的AudioFormat(8000f,//sampleRate
8,//示例
1,//通道
true,//已签名
false);//bigEndian
源数据线sdl;
sdl=AudioSystem.getSourceDataLine(af);
开放式(af);
sdl.start();
字节[]buf=新字节[1];
整数步;
对于(int j=0;j0)?32:(字节)0);
如果(i%250==0)
步骤+=2;
sdl.write(buf,0,1);
}
睡眠(200);
}
sdl.drain();
sdl.stop();
sdl.close();
}捕获(例外e){
e、 printStackTrace();
}
}
}

界面是在应用程序中播放小声音的最简单方式。这就是一个例子。如果你想玩wav以外的任何东西,请使用MP3SPI或VorbisSPI。好的,伙计们,这是我在等待时想到的。我想我已经设置了堆栈溢出设置,在我的问题得到回答时给我发电子邮件,所以我想我还没有收到任何答案。因此,我继续自己。 这是我发现的有效方法

(1) 使用以下命令创建实例:

private PlaySounds lasershot = new PlaySounds("snd/lasershot.wav");
private PlaySounds test = new PlaySounds("snd/cash_register.au");

(2) 并创建文件PlaySounds.java(或任何您喜欢的文件) 导入java.io。; 导入javax.media

公共课话音 { 私人玩家; 私有文件

   // Create a player for each of the sound files
   public PlaySounds(String filename)
   {
       file = new File(filename);
       createPlayer();
   }

   private void createPlayer()
   {
       if ( file == null )
           return;

       try 
       {
           // create a new player and add listener
           player = Manager.createPlayer( file.toURI().toURL() );
           //player.addController( (Controller) new EventHandler(player, null, null, null) );
          // player.start();  // start player
       }
       catch ( Exception e )
       {
       }
   }

    public void playSound()
    {
        // start player
        player.start();
        // Clear player
        player = null;  
        // Re-create player
        createPlayer();
    }
}//文件PlaySounds.java的结尾


(3) 若要使用,请在需要声音的位置插入以下内容:

 lasershot.playSound();
 test.playSound();

这是我发现的最短/最甜的。非常容易使用,并且可以同时播放.au和.wav文件


我非常感谢你们的帮助。

请不要抱怨答案“不完整”。你应该注意API的相关部分,不要让别人为你编写框架。我并没有要求提供框架,只是为那些不太了解Java声音的人提供了一个有用的答案。API并不总是能很好地解释事情——我先去了!谢谢,迈克尔,但这些不是免费的。(仅用于评估目的)。谢谢tulskiy,但我正在寻找Java应用程序。tulskiy,你是对的-很抱歉,我看到了applet,并假设它仅用于applet。在我下面的代码(见下文)无效后,我插入了您链接到的代码。它似乎能工作一秒钟,但声音只在第二次或第三次打电话时发出。此后不久,它就完全停止了。让Java声音工作起来就像一场噩梦,至少不止一次…@Scott Foulk:你是在每次调用时创建剪辑,还是只在现有剪辑上调用
start()
loop()
?我用java编写了一个功能齐全的音频播放器,我知道这很难。但是它是为播放简单的声音而设计的,所以你的问题应该很容易解决。我只开始播放剪辑,然后结束,但是声音只工作几次。这是一个游戏,我需要按需运行剪辑(例如子弹声),有时一个接一个(快速)。我想播放背景音乐或声音,但只是想让剪辑正常工作还没有发生。我的理想是创建一次剪辑,然后根据需要运行它。如果它能工作,我也可以使用loop()。塔尔斯基非常感谢你的帮助。哇,这看起来是我真正需要的东西。我还没有实际运行代码,但它正在创建自己的声音,它在应用程序中,而不是小程序中…很不幸,每当调用时,声音似乎都会停止操作。我得说我真的很喜欢老式街机的声音,虽然很简单,但我很怀旧…我很想把它融入我的游戏…我相信你需要用它自己的思路来制作声音。好吧,但我很尴尬地问-我怎么做(顺便说一句,我试过了)?我每次点击都慢下来,然后所有的事情都发生了,因为我显然是这样做的
 lasershot.playSound();
 test.playSound();