-1

I am trying to get a button to play audio when pressed matching to a value. This is what i have got so far but it isnt working. I followed this tutorial: https://www.youtube.com/watch?v=3q4f6I5zi2w&list=PLrqwM2iFaguigFGMfG4f4H516zVByp97N but as it isnt for Swing i think thats the problem.

import javax.swing.ImageIcon;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import javax.swing.JOptionPane;
import  sun.audio.*; 

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */

/**
 *
 * @author 25555
 */
public class javaOrchestraGui extends javax.swing.JFrame {

    /**
     * Creates new form javaOrchestraGui
     */
    public javaOrchestraGui() {
        initComponents();
        //Trombone trombone = new Trombone();//creating trombone object

    }

    /**
     * This method is called from within the constructor to initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is always
     * regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        jButton1 = new javax.swing.JButton();
        area_selection_info_panel = new javax.swing.JPanel();
        comboBrass = new javax.swing.JComboBox<>();
        comboWoodwind = new javax.swing.JComboBox<>();
        panelInfo = new javax.swing.JPanel();
        paneInfo = new javax.swing.JScrollPane();
        textInfo = new javax.swing.JTextArea();
        panelImageInter = new javax.swing.JPanel();
        labelBrass = new javax.swing.JLabel();
        labelString = new javax.swing.JLabel();
        labelWoodwind = new javax.swing.JLabel();
        labelImage = new javax.swing.JLabel();
        butSound = new javax.swing.JButton();
        labelTitle = new javax.swing.JLabel();

        jButton1.setText("jButton1");

        setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
        setBackground(new java.awt.Color(204, 204, 255));

        comboBrass.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Trumpet", "Trombone" }));
        comboBrass.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                comboBrassActionPerformed(evt);
            }
        });

        comboWoodwind.setModel(new javax.swing.DefaultComboBoxModel<>(new String[] { "Alto Saxaphone", "Clarinet" }));
        comboWoodwind.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                comboWoodwindActionPerformed(evt);
            }
        });

        textInfo.setColumns(20);
        textInfo.setLineWrap(true);
        textInfo.setRows(5);
        paneInfo.setViewportView(textInfo);

        javax.swing.GroupLayout panelImageInterLayout = new javax.swing.GroupLayout(panelImageInter);
        panelImageInter.setLayout(panelImageInterLayout);
        panelImageInterLayout.setHorizontalGroup(
            panelImageInterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 241, Short.MAX_VALUE)
        );
        panelImageInterLayout.setVerticalGroup(
            panelImageInterLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGap(0, 274, Short.MAX_VALUE)
        );

        javax.swing.GroupLayout panelInfoLayout = new javax.swing.GroupLayout(panelInfo);
        panelInfo.setLayout(panelInfoLayout);
        panelInfoLayout.setHorizontalGroup(
            panelInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelInfoLayout.createSequentialGroup()
                .addContainerGap()
                .addComponent(paneInfo, javax.swing.GroupLayout.PREFERRED_SIZE, 414, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(521, 521, 521)
                .addComponent(panelImageInter, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        panelInfoLayout.setVerticalGroup(
            panelInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelInfoLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelInfoLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(panelImageInter, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(paneInfo, javax.swing.GroupLayout.PREFERRED_SIZE, 180, javax.swing.GroupLayout.PREFERRED_SIZE))
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );

        labelBrass.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        labelBrass.setText("Brass");

        labelString.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        labelString.setText("String");

        labelWoodwind.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        labelWoodwind.setText("Woodwind");

        labelImage.setIcon(new javax.swing.ImageIcon(getClass().getResource("/trumpet.jpg"))); // NOI18N

        butSound.setText("play sound");

        javax.swing.GroupLayout area_selection_info_panelLayout = new javax.swing.GroupLayout(area_selection_info_panel);
        area_selection_info_panel.setLayout(area_selection_info_panelLayout);
        area_selection_info_panelLayout.setHorizontalGroup(
            area_selection_info_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(area_selection_info_panelLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(area_selection_info_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(comboWoodwind, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                    .addGroup(area_selection_info_panelLayout.createSequentialGroup()
                        .addGroup(area_selection_info_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addComponent(comboBrass, javax.swing.GroupLayout.PREFERRED_SIZE, 101, javax.swing.GroupLayout.PREFERRED_SIZE)
                            .addGroup(area_selection_info_panelLayout.createSequentialGroup()
                                .addGap(35, 35, 35)
                                .addComponent(labelBrass))
                            .addGroup(area_selection_info_panelLayout.createSequentialGroup()
                                .addGap(21, 21, 21)
                                .addComponent(labelWoodwind))
                            .addGroup(area_selection_info_panelLayout.createSequentialGroup()
                                .addGap(31, 31, 31)
                                .addComponent(labelString)))
                        .addGap(0, 0, Short.MAX_VALUE)))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(panelInfo, javax.swing.GroupLayout.PREFERRED_SIZE, 438, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(area_selection_info_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(labelImage, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(butSound))
                .addContainerGap())
        );
        area_selection_info_panelLayout.setVerticalGroup(
            area_selection_info_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(area_selection_info_panelLayout.createSequentialGroup()
                .addGroup(area_selection_info_panelLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(area_selection_info_panelLayout.createSequentialGroup()
                        .addComponent(labelBrass)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(comboBrass, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(42, 42, 42)
                        .addComponent(labelString)
                        .addGap(59, 59, 59)
                        .addComponent(labelWoodwind)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(comboWoodwind, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
                    .addGroup(area_selection_info_panelLayout.createSequentialGroup()
                        .addComponent(labelImage, javax.swing.GroupLayout.PREFERRED_SIZE, 201, javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                        .addComponent(butSound))
                    .addGroup(area_selection_info_panelLayout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(panelInfo, javax.swing.GroupLayout.PREFERRED_SIZE, 203, javax.swing.GroupLayout.PREFERRED_SIZE)))
                .addContainerGap(33, Short.MAX_VALUE))
        );

        labelTitle.setForeground(new java.awt.Color(153, 0, 153));
        labelTitle.setHorizontalAlignment(javax.swing.SwingConstants.CENTER);
        labelTitle.setText("The Orchestra Info Informater");

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                .addComponent(labelTitle, javax.swing.GroupLayout.PREFERRED_SIZE, 356, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addGap(239, 239, 239))
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(area_selection_info_panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addContainerGap(javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap(16, Short.MAX_VALUE)
                .addComponent(labelTitle, javax.swing.GroupLayout.PREFERRED_SIZE, 44, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addComponent(area_selection_info_panel, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
        );

        pack();
    }// </editor-fold>                        

    public static void playMusic(String filepath)
    {
    InputStream music;
            try
            {
            music = new FileInputStream(new File(filepath));
            AudioStream audios= new AudioStream(music);
            AudioPlayer.player.start(audios);

            }
            catch(Exception E)
            {
            JOptionPane.showMessageDialog(null, "Error");
            }
    }

    private void comboBrassActionPerformed(java.awt.event.ActionEvent evt) {                                           

        int instrumentChoice;
        Trombone trombone = new Trombone();
        Trumpet trumpet = new Trumpet();

        instrumentChoice = comboBrass.getSelectedIndex();
        System.out.println(instrumentChoice);
        switch (instrumentChoice){
            case 0:
                textInfo.setText("Trumpet");
                textInfo.setText(trumpet.newInfo());
                labelImage.setIcon(new ImageIcon(getClass().getResource("/trumpet.jpg")));
                playMusic("D:\\myOrchestraGUI_FH\\Music\\trumpet.wav");
                break;
            case 1:
                textInfo.setText("Trombone");
                textInfo.setText(trombone.newInfo());
                labelImage.setIcon(new ImageIcon(getClass().getResource("/trombone.png")));
                break;
        }

    }                                          

    private void butSound(java.awt.event.ActionEvent evt) {
    int instrumentChoice;
    instrumentChoice = comboBrass.getSelectedIndex();
    switch (instrumentChoice){

        case 0:  
            playMusic("D:\\myOrchestraGUI_FH\\Music\\trumpet.wav");

            break;
        case 1:

            break;

    }

    }

    private void comboWoodwindActionPerformed(java.awt.event.ActionEvent evt) {                                              
        Clarinet clarinet = new Clarinet();
        AltoSax altosax = new AltoSax();

        int instrumentChoice;
        instrumentChoice = comboWoodwind.getSelectedIndex();
        switch (instrumentChoice){
            case 0:
                textInfo.setText("Alto Saxaphone");
                textInfo.setText(altosax.newInfo());
                labelImage.setIcon(new ImageIcon(getClass().getResource("/altosax.jpg")));
                break;

            case 1:
                textInfo.setText("Clarinet");  
                textInfo.setText(clarinet.newInfo());
                labelImage.setIcon(new ImageIcon(getClass().getResource("/clarinet.jpg")));
                break;// TODO add your handling code here:

    }                                             
    }
    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        /* Set the Nimbus look and feel */
        //<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) ">
        /* If Nimbus (introduced in Java SE 6) is not available, stay with the default look and feel.
         * For details see http://download.oracle.com/javase/tutorial/uiswing/lookandfeel/plaf.html 
         */
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(javaOrchestraGui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(javaOrchestraGui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (IllegalAccessException ex) {
            java.util.logging.Logger.getLogger(javaOrchestraGui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(javaOrchestraGui.class.getName()).log(java.util.logging.Level.SEVERE, null, ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokeLater(new Runnable() {
            public void run() {
                new javaOrchestraGui().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JPanel area_selection_info_panel;
    private javax.swing.JButton butSound;
    private javax.swing.JComboBox<String> comboBrass;
    private javax.swing.JComboBox<String> comboWoodwind;
    private javax.swing.JButton jButton1;
    private javax.swing.JLabel labelBrass;
    private javax.swing.JLabel labelImage;
    private javax.swing.JLabel labelString;
    private javax.swing.JLabel labelTitle;
    private javax.swing.JLabel labelWoodwind;
    private javax.swing.JScrollPane paneInfo;
    private javax.swing.JPanel panelImageInter;
    private javax.swing.JPanel panelInfo;
    private javax.swing.JTextArea textInfo;
    // End of variables declaration                   
}

If it helps here is the full project on a google drive link: https://drive.google.com/file/d/1Czwhmw1X4oQh2dH39mbRv7d-a0Xc1DFZ/view?usp=sharing

sorry for formatting problems as this is my first post.

Andrew Thompson
  • 168,117
  • 40
  • 217
  • 433
jlewn01
  • 15
  • 4
  • 1
    You don't need to write hundreds of lines of code to play a sound (and nobody is going to read all the code). Frist you learn the basics and then you write the application to use the knowledge you learned. For example you can play sound in about 10 lines of code. See: https://stackoverflow.com/questions/44500043/how-to-attribute-sound-through-array-and-play-it-using-jbutton/44500689#44500689 for a basic example to get you started. – camickr Nov 03 '19 at 05:31
  • Note that an even *shorter* code to run a clip (as linked by @camickr) can be seen in the [Java Sound info page](https://stackoverflow.com/tags/javasound/info). – Andrew Thompson Nov 03 '19 at 07:18

1 Answers1

0

Utilize the Clip class with AudioStream, for example:

private void playWav(String soundFilePath) {
    File sFile = new File(soundFilePath);
    if (!sFile.exists()) {
        String ls = System.lineSeparator();
        System.err.println("Can not locate the supplied sound file!" + 
                ls + "(" + soundFilePath + ")" + ls);
        return;
    }
    try {
        Clip clip;
        try (AudioInputStream audioInputStream = AudioSystem.
                getAudioInputStream(sFile.getAbsoluteFile())) {
            clip = AudioSystem.getClip();
            // Rewind clip to beginning. 
            // Not really required in this example!
            // It's just good to know.
            clip.setFramePosition(0); 
            clip.open(audioInputStream);
        }
        clip.start();
    }
    catch (UnsupportedAudioFileException | IOException | LineUnavailableException ex) {
        Logger.getLogger("playWav()").log(Level.SEVERE, null, ex);
    }
}
DevilsHnd - 退職した
  • 8,739
  • 2
  • 19
  • 22