Results 1 to 3 of 3
  1. #1
    lenny is offline Member
    Join Date
    Jul 2007
    Posts
    40
    Rep Power
    0

    Default Make sound play in a java application

    Hi, I am developing a GUI that demonstrates the use of many of the JFrame, JPanel, etc components.
    One part of the program I want to be a music player, where you press a button to open a file chooser, choose a song, and it plays. Here is the code for the buttonlistener:
    Java Code:
    	private class ButtonListener implements ActionListener
    	{
    		public void actionPerformed (ActionEvent event)
    		{
    			
    			JFileChooser chooser = new JFileChooser();
    			int status = chooser.showOpenDialog(null);
    			
    			if (status != JFileChooser.APPROVE_OPTION)
    				song1.setText("No File Yet Chosen");
    			else
    			{
    				File file = chooser.getSelectedFile();
    				AudioClip song;
    				try{
    					song=JApplet.newAudioClip(file.toURL());
    					song.play();
    				}
    				catch(Exception e)
    				{
                                 e.getMessage();
    				}
    
    			} 
    				       
    		}
    My problem is that the music doesn't play. I've tried a variety of techniques that were supposed to make sound play in a java application, but none of them have worked.
    The program compiles, but when I click on the button, so sound comes out (even if I choose a .wav file from the file chooser).
    Thanks

  2. #2
    mathias is offline Member
    Join Date
    Jul 2007
    Posts
    40
    Rep Power
    0

    Default

    Please check this:
    Java Code:
    /*File AudioCapture01.java
    This program demonstrates the capture
    and subsequent playback of audio data.
    
    A GUI appears on the screen containing
    the following buttons:
    Capture
    Stop
    Playback
    
    Input data from a microphone is
    captured and saved in a
    ByteArrayOutputStream object when the
    user clicks the Capture button.
    
    Data capture stops when the user clicks
    the Stop button.
    
    Playback begins when the user clicks
    the Playback button.
    
    Tested using SDK 1.4.0 under Win2000
    **************************************/
    
    import javax.swing.*;
    import java.awt.*;
    import java.awt.event.*;
    import java.io.*;
    import javax.sound.sampled.*;
    
    public class AudioCapture01
                            extends JFrame{
    
      boolean stopCapture = false;
      ByteArrayOutputStream
                     byteArrayOutputStream;
      AudioFormat audioFormat;
      TargetDataLine targetDataLine;
      AudioInputStream audioInputStream;
      SourceDataLine sourceDataLine;
    
      public static void main(
                            String args[]){
        new AudioCapture01();
      }//end main
    
      public AudioCapture01(){//constructor
        final JButton captureBtn =
                    new JButton("Capture");
        final JButton stopBtn =
                       new JButton("Stop");
        final JButton playBtn =
                   new JButton("Playback");
    
        captureBtn.setEnabled(true);
        stopBtn.setEnabled(false);
        playBtn.setEnabled(false);
    
        //Register anonymous listeners
        captureBtn.addActionListener(
          new ActionListener(){
            public void actionPerformed(
                            ActionEvent e){
              captureBtn.setEnabled(false);
              stopBtn.setEnabled(true);
              playBtn.setEnabled(false);
              //Capture input data from the
              // microphone until the Stop
              // button is clicked.
              captureAudio();
            }//end actionPerformed
          }//end ActionListener
        );//end addActionListener()
        getContentPane().add(captureBtn);
    
        stopBtn.addActionListener(
          new ActionListener(){
            public void actionPerformed(
                            ActionEvent e){
              captureBtn.setEnabled(true);
              stopBtn.setEnabled(false);
              playBtn.setEnabled(true);
              //Terminate the capturing of
              // input data from the
              // microphone.
              stopCapture = true;
            }//end actionPerformed
          }//end ActionListener
        );//end addActionListener()
        getContentPane().add(stopBtn);
    
        playBtn.addActionListener(
          new ActionListener(){
            public void actionPerformed(
                            ActionEvent e){
              //Play back all of the data
              // that was saved during
              // capture.
              playAudio();
            }//end actionPerformed
          }//end ActionListener
        );//end addActionListener()
        getContentPane().add(playBtn);
    
        getContentPane().setLayout(
                         new FlowLayout());
        setTitle("Capture/Playback Demo");
        setDefaultCloseOperation(
                            EXIT_ON_CLOSE);
        setSize(250,70);
        setVisible(true);
      }//end constructor
    
      //This method captures audio input
      // from a microphone and saves it in
      // a ByteArrayOutputStream object.
      private void captureAudio(){
        try{
          //Get everything set up for
          // capture
          audioFormat = getAudioFormat();
          DataLine.Info dataLineInfo =
                    new DataLine.Info(
                      TargetDataLine.class,
                       audioFormat);
          targetDataLine = (TargetDataLine)
                       AudioSystem.getLine(
                             dataLineInfo);
          targetDataLine.open(audioFormat);
          targetDataLine.start();
    
          //Create a thread to capture the
          // microphone data and start it
          // running.  It will run until
          // the Stop button is clicked.
          Thread captureThread =
                    new Thread(
                      new CaptureThread());
          captureThread.start();
        } catch (Exception e) {
          System.out.println(e);
          System.exit(0);
        }//end catch
      }//end captureAudio method
    
      //This method plays back the audio
      // data that has been saved in the
      // ByteArrayOutputStream
      private void playAudio() {
        try{
          //Get everything set up for
          // playback.
          //Get the previously-saved data
          // into a byte array object.
          byte audioData[] =
                     byteArrayOutputStream.
                             toByteArray();
          //Get an input stream on the
          // byte array containing the data
          InputStream byteArrayInputStream
                = new ByteArrayInputStream(
                                audioData);
          AudioFormat audioFormat =
                          getAudioFormat();
          audioInputStream =
            new AudioInputStream(
              byteArrayInputStream,
              audioFormat,
              audioData.length/audioFormat.
                           getFrameSize());
          DataLine.Info dataLineInfo =
                    new DataLine.Info(
                      SourceDataLine.class,
                              audioFormat);
          sourceDataLine = (SourceDataLine)
                       AudioSystem.getLine(
                             dataLineInfo);
          sourceDataLine.open(audioFormat);
          sourceDataLine.start();
    
          //Create a thread to play back
          // the data and start it
          // running.  It will run until
          // all the data has been played
          // back.
          Thread playThread =
              new Thread(new PlayThread());
          playThread.start();
        } catch (Exception e) {
          System.out.println(e);
          System.exit(0);
        }//end catch
      }//end playAudio
    
      //This method creates and returns an
      // AudioFormat object for a given set
      // of format parameters.  If these
      // parameters don't work well for
      // you, try some of the other
      // allowable parameter values, which
      // are shown in comments following
      // the declarations.
      private AudioFormat getAudioFormat(){
        float sampleRate = 8000.0F;
        //8000,11025,16000,22050,44100
        int sampleSizeInBits = 16;
        //8,16
        int channels = 1;
        //1,2
        boolean signed = true;
        //true,false
        boolean bigEndian = false;
        //true,false
        return new AudioFormat(
                          sampleRate,
                          sampleSizeInBits,
                          channels,
                          signed,
                          bigEndian);
      }//end getAudioFormat
    //===================================//
    
    //Inner class to capture data from
    // microphone
    class CaptureThread extends Thread{
      //An arbitrary-size temporary holding
      // buffer
      byte tempBuffer[] = new byte[10000];
      public void run(){
        byteArrayOutputStream =
               new ByteArrayOutputStream();
        stopCapture = false;
        try{//Loop until stopCapture is set
            // by another thread that
            // services the Stop button.
          while(!stopCapture){
            //Read data from the internal
            // buffer of the data line.
            int cnt = targetDataLine.read(
                        tempBuffer,
                        0,
                        tempBuffer.length);
            if(cnt > 0){
              //Save data in output stream
              // object.
              byteArrayOutputStream.write(
                       tempBuffer, 0, cnt);
            }//end if
          }//end while
          byteArrayOutputStream.close();
        }catch (Exception e) {
          System.out.println(e);
          System.exit(0);
        }//end catch
      }//end run
    }//end inner class CaptureThread
    //===================================//
    //Inner class to play back the data
    // that was saved.
    class PlayThread extends Thread{
      byte tempBuffer[] = new byte[10000];
    
      public void run(){
        try{
          int cnt;
          //Keep looping until the input
          // read method returns -1 for
          // empty stream.
          while((cnt = audioInputStream.
            read(tempBuffer, 0,
                tempBuffer.length)) != -1){
            if(cnt > 0){
              //Write data to the internal
              // buffer of the data line
              // where it will be delivered
              // to the speaker.
              sourceDataLine.write(
                       tempBuffer, 0, cnt);
            }//end if
          }//end while
          //Block and wait for internal
          // buffer of the data line to
          // empty.
          sourceDataLine.drain();
          sourceDataLine.close();
        }catch (Exception e) {
          System.out.println(e);
          System.exit(0);
        }//end catch
      }//end run
    }//end inner class PlayThread
    //===================================//
    
    }//end outer class AudioCapture01.java
    Greetings.

  3. #3
    Bojevnik is offline Member
    Join Date
    Aug 2007
    Posts
    13
    Rep Power
    0

    Default

    also try somthing like this:
    Java Code:
    import javax.sound.sampled.*;
    import java.io.*;
    
    class PlaySound{
     Clip clip;
     AudioInputStream sam;
    
      public void main(String[] args){
       File file = new File("something.wav);
       sam = AudioSystem.getAudioInputStream(file);
       clip=AudioSystem.getClip();
       clip.open(sam);
       clip.play();
      }
    }
    I HATE SMURFS!!!!!

Similar Threads

  1. Replies: 1
    Last Post: 08-07-2007, 06:45 AM
  2. how to play MIDI in java application?
    By oregon in forum Advanced Java
    Replies: 1
    Last Post: 08-07-2007, 02:26 AM
  3. How to make a web application as .exe file
    By madhusudhangovindu in forum Advanced Java
    Replies: 1
    Last Post: 08-02-2007, 03:58 PM
  4. MMAPI sound application
    By luisarca in forum CLDC and MIDP
    Replies: 0
    Last Post: 06-18-2007, 06:34 PM
  5. Play sound and Video in a Mobile Phone
    By luisarca in forum Sun Java Wireless Toolkit
    Replies: 2
    Last Post: 05-23-2007, 10:52 AM

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •