为Java计算器按下按钮获得声音的最佳方法?
我是一名学习Java的学生,正在为我的简历做一个独立的项目。我决定做一个Java计算器,因为我知道组成它的大部分组件。有一件事我不知道怎么做,那就是在按下按钮时加上声音。我对音频流输入的东西有一个模糊的概念。但是我的计算器上的每个按钮都需要独特的声音。现在我的计算器还没有完全完成(听者还不能工作。)我只是想知道怎样才能最好地将我的.wav文件合并到按键中。提前谢谢为Java计算器按下按钮获得声音的最佳方法?,java,swing,audio,jbutton,javasound,Java,Swing,Audio,Jbutton,Javasound,我是一名学习Java的学生,正在为我的简历做一个独立的项目。我决定做一个Java计算器,因为我知道组成它的大部分组件。有一件事我不知道怎么做,那就是在按下按钮时加上声音。我对音频流输入的东西有一个模糊的概念。但是我的计算器上的每个按钮都需要独特的声音。现在我的计算器还没有完全完成(听者还不能工作。)我只是想知道怎样才能最好地将我的.wav文件合并到按键中。提前谢谢 import java.awt.*; import java.awt.event.*; import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
public class Calculator {
//instance variables
JFrame frame;
JPanel mainPanel, northPanel, southPanel;
JTextField numberLabel;
JButton backspace, multiply, divide, add, subtract, equal; //four function buttons
JButton one, two, three, four, five, six, seven, eight, nine, zero; //number buttons
JButton posOrNeg, decimal, leftParenthese, rightParenthese;
//constructor
public Calculator()
{
//create it
frame = new JFrame();
mainPanel = new JPanel(); //contains both panels
mainPanel.setForeground(Color.BLACK);
mainPanel.setBackground(Color.DARK_GRAY);
northPanel = new JPanel(new BorderLayout()); //contains the number label in border layout
southPanel = new JPanel(new GridLayout(5, 4)); //contains the buttons in border layout
numberLabel = new JTextField(37); //*************************
backspace = new JButton();
backspace.setForeground(Color.WHITE);
backspace.setBackground(Color.GRAY);
multiply = new JButton();
multiply.setForeground(Color.WHITE);
multiply.setBackground(Color.MAGENTA);
divide = new JButton();
divide.setForeground(Color.WHITE);
divide.setBackground(Color.PINK);
add = new JButton();
add.setForeground(Color.WHITE);
add.setBackground(Color.BLUE);
subtract = new JButton();
subtract.setForeground(Color.WHITE);
subtract.setBackground(Color.RED);
equal = new JButton();
equal.setForeground(Color.WHITE);
equal.setBackground(Color.ORANGE);
zero = new JButton();
zero.setForeground(Color.DARK_GRAY);
zero.setBackground(Color.GREEN);
one = new JButton();
one.setForeground(Color.DARK_GRAY);
one.setBackground(Color.GREEN);
two = new JButton();
two.setForeground(Color.DARK_GRAY);
two.setBackground(Color.GREEN);
three = new JButton();
three.setForeground(Color.DARK_GRAY);
three.setBackground(Color.GREEN);
four = new JButton();
four.setForeground(Color.DARK_GRAY);
four.setBackground(Color.GREEN);
five = new JButton();
five.setForeground(Color.DARK_GRAY);
five.setBackground(Color.GREEN);
six = new JButton();
six.setForeground(Color.DARK_GRAY);
six.setBackground(Color.GREEN);
seven = new JButton();
seven.setForeground(Color.DARK_GRAY);
seven.setBackground(Color.GREEN);
eight = new JButton();
eight.setForeground(Color.DARK_GRAY);
eight.setBackground(Color.GREEN);
nine = new JButton();
nine.setForeground(Color.DARK_GRAY);
nine.setBackground(Color.GREEN);
posOrNeg = new JButton();
posOrNeg.setForeground(Color.WHITE);
posOrNeg.setBackground(Color.LIGHT_GRAY);
decimal = new JButton();
decimal.setForeground(Color.WHITE);
decimal.setBackground(Color.CYAN);
leftParenthese = new JButton();
rightParenthese = new JButton();
//configure it
frame.setTitle("My Calculator");
frame.setSize(450, 225);
frame.setLocation(200, 200);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.setVisible(true);
//buttons
backspace.setText("Back Space");
leftParenthese.setText("(");
rightParenthese.setText(")");
multiply.setText("x");
divide.setText("/");
add.setText("+");
subtract.setText("-");
equal.setText("=");
zero.setText("0");
one.setText("1");
two.setText("2");
three.setText("3");
four.setText("4");
five.setText("5");
six.setText("6");
seven.setText("7");
eight.setText("8");
nine.setText("9");
posOrNeg.setText("+/-");
decimal.setText(".");
//add it
northPanel.add(numberLabel, BorderLayout.NORTH);
southPanel.add(backspace);
southPanel.add(leftParenthese);
southPanel.add(rightParenthese);
southPanel.add(multiply);
southPanel.add(seven);
southPanel.add(eight);
southPanel.add(nine);
southPanel.add(divide);
southPanel.add(four);
southPanel.add(five);
southPanel.add(six);
southPanel.add(add);
southPanel.add(one);
southPanel.add(two);
southPanel.add(three);
southPanel.add(subtract);
southPanel.add(zero);
southPanel.add(decimal);
southPanel.add(posOrNeg);
southPanel.add(equal);
mainPanel.add(northPanel, BorderLayout.NORTH);
mainPanel.add(southPanel, BorderLayout.SOUTH);
frame.add(mainPanel);
//add listener
one.addActionListener(new ButtonListener());
two.addActionListener(new ButtonListener());
three.addActionListener(new ButtonListener());
four.addActionListener(new ButtonListener());
five.addActionListener(new ButtonListener());
six.addActionListener(new ButtonListener());
seven.addActionListener(new ButtonListener());
eight.addActionListener(new ButtonListener());
nine.addActionListener(new ButtonListener());
zero.addActionListener(new ButtonListener());
multiply.addActionListener(new ButtonListener());
divide.addActionListener(new ButtonListener());
add.addActionListener(new ButtonListener());
subtract.addActionListener(new ButtonListener());
equal.addActionListener(new ButtonListener());
posOrNeg.addActionListener(new ButtonListener());
decimal.addActionListener(new ButtonListener());
backspace.addActionListener(new ButtonListener());
leftParenthese.addActionListener(new ButtonListener());
rightParenthese.addActionListener(new ButtonListener());
}
//define action listener
class ButtonListener implements ActionListener
{
public void actionPerformed(ActionEvent e)
{
if(e.getSource() == one)
{
}
if(e.getSource() == two)
{
}
if(e.getSource() == three)
{
}
if(e.getSource() == four)
{
}
if(e.getSource() == five)
{
}
if(e.getSource() == six)
{
}
if(e.getSource() == seven)
{
}
if(e.getSource() == eight)
{
}
if(e.getSource() == nine)
{
}
if(e.getSource() == zero)
{
}
if(e.getSource() == multiply)
{
}
if(e.getSource() == divide)
{
}
if(e.getSource() == add)
{
}
if(e.getSource() == subtract)
{
}
if(e.getSource() == equal)
{
}
if(e.getSource() == posOrNeg)
{
}
if(e.getSource() == decimal)
{
}
if(e.getSource() == backspace)
{
}
if(e.getSource() == leftParenthese)
{
}
if(e.getSource() == rightParenthese)
{
}
}
}
}
这会帮助你实现你想要的
是的,您需要这些导入:-
import java.io.File;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;
查看链接我也是一名学习型学生,刚刚找到了这个解决方案!这对我很有用,而且很简单
URL soundbyte = new File("yourpath/sound.wav").toURI().toURL();
java.applet.AudioClip clip = java.applet.Applet.newAudioClip(soundbyte);
clip.play();
它知道它适用于.wav文件,也可能适用于.au文件。。。似乎不适用于MP3 你看,那怎么样?房间里有一个正在工作的SSCCE。顺便说一句,这张CD不需要转储250行代码。
.wav
是CD质量,如果我没弄错的话。仅仅一个按钮的声音不是有点过分吗?@11684你错了。WAV可以是位深度范围、单声道或立体声以及各种采样率。线程不是必需的。请参阅以获取证据。如果要停止声音,请注意“drain()方法将阻塞,直到该内部缓冲区变为空”,如前所述。
public static synchronized void playSound(final String url) {
new Thread(new Runnable() { // the wrapper thread is unnecessary, unless it blocks on the Clip finishing, see comments
public void run() {
try {
Clip clip = AudioSystem.getClip();
AudioInputStream inputStream = AudioSystem.getAudioInputStream(Main.class.getResourceAsStream("/path/to/sounds/" + url));
clip.open(inputStream);
clip.start();
} catch (Exception e) {
System.err.println(e.getMessage());
}
}
}).start();
}
URL soundbyte = new File("yourpath/sound.wav").toURI().toURL();
java.applet.AudioClip clip = java.applet.Applet.newAudioClip(soundbyte);
clip.play();