Best way to get Sound on Button Press for a Java Calculator?

32,631

Solution 1

String soundName = "yourSound.wav";    
AudioInputStream audioInputStream = AudioSystem.getAudioInputStream(new File(soundName).getAbsoluteFile());
Clip clip = AudioSystem.getClip();
clip.open(audioInputStream);
clip.start();

This should help you in achieving what you want.

And yeah, you will require these imports:-

import java.io.File;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.Clip;

Solution 2

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

check the link http://www.developer.com/java/other/article.php/2173111/Java-Sound-Playing-Back-Audio-Files-using-Java.htm

Share:
32,631
Admin
Author by

Admin

Updated on November 24, 2020

Comments

  • Admin
    Admin over 3 years

    I'm a learning Java student working on an independent project for my Resume. I decided to do a Java calculator because I know most of the components that make it up. One thing I don't know how to do is add sound on the button press. I have a vague idea what with the Audiostream input stuff. But I need unique sounds for each button on my calculator. Right now my calculator isn't completely finished (listeners don't work yet.) I was just wondering what would be the best way to incorporate my .wav files into the button presses. Thanks in advance.

    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)
                {
    
                }
            }
        }    
    }
    
  • Andrew Thompson
    Andrew Thompson over 11 years
    The thread is not necessary. See this answer for the proof.
  • trashgod
    trashgod over 11 years
    Should you want to stop the sound, note that "The drain() method blocks until this internal buffer becomes empty," as cited here.