⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 captureplayback.java

📁 java程序中关于多媒体编程 既有文件说明 更有例子 希望大家可以一起学习交流
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
package javasound;import java.awt.*;import java.awt.event.*;import java.awt.geom.Line2D;import javax.swing.*;import javax.swing.event.*;import javax.swing.border.*;import java.util.Vector;import java.util.Enumeration;import java.io.*;import javax.sound.sampled.*;import java.awt.font.*;import java.text.*;public class CapturePlayback extends JPanel implements ActionListener, ControlContext {    final int bufSize = 16384;    FormatControls formatControls = new FormatControls();    Capture capture = new Capture();    Playback playback = new Playback();    AudioInputStream audioInputStream;    SamplingGraph samplingGraph;    JButton playB, captB, pausB, loadB;    JButton auB, aiffB, waveB;    JTextField textField;    String fileName = "untitled";    String errStr;    double duration, seconds;    File file;    Vector lines = new Vector();    public CapturePlayback() {        setLayout(new BorderLayout());        EmptyBorder eb = new EmptyBorder(5,5,5,5);        SoftBevelBorder sbb = new SoftBevelBorder(SoftBevelBorder.LOWERED);        setBorder(new EmptyBorder(5,5,5,5));        JPanel p1 = new JPanel();        p1.setLayout(new BoxLayout(p1, BoxLayout.X_AXIS));        p1.add(formatControls);        JPanel p2 = new JPanel();        p2.setBorder(sbb);        p2.setLayout(new BoxLayout(p2, BoxLayout.Y_AXIS));        JPanel buttonsPanel = new JPanel();        buttonsPanel.setBorder(new EmptyBorder(10,0,5,0));        playB = addButton("Play", buttonsPanel, false);        captB = addButton("Record", buttonsPanel, true);        pausB = addButton("Pause", buttonsPanel, false);        loadB = addButton("Load...", buttonsPanel, true);        p2.add(buttonsPanel);        JPanel samplingPanel = new JPanel(new BorderLayout());        eb = new EmptyBorder(10,20,20,20);        samplingPanel.setBorder(new CompoundBorder(eb, sbb));        samplingPanel.add(samplingGraph = new SamplingGraph());        p2.add(samplingPanel);        JPanel savePanel = new JPanel();        savePanel.setLayout(new BoxLayout(savePanel, BoxLayout.Y_AXIS));        JPanel saveTFpanel = new JPanel();        saveTFpanel.add(new JLabel("File to save:  "));        saveTFpanel.add(textField = new JTextField(fileName));        textField.setPreferredSize(new Dimension(140,25));        savePanel.add(saveTFpanel);        JPanel saveBpanel = new JPanel();        auB = addButton("Save AU", saveBpanel, false);        aiffB = addButton("Save AIFF", saveBpanel, false);        waveB = addButton("Save WAVE", saveBpanel, false);        savePanel.add(saveBpanel);        p2.add(savePanel);        p1.add(p2);        add(p1);    }    public void open() { }    public void close() {        if (playback.thread != null) {            playB.doClick(0);        }        if (capture.thread != null) {            captB.doClick(0);        }    }    private JButton addButton(String name, JPanel p, boolean state) {        JButton b = new JButton(name);        b.addActionListener(this);        b.setEnabled(state);        p.add(b);        return b;    }    public void actionPerformed(ActionEvent e) {        Object obj = e.getSource();        if (obj.equals(auB)) {            saveToFile(textField.getText().trim(), AudioFileFormat.Type.AU);        } else if (obj.equals(aiffB)) {            saveToFile(textField.getText().trim(), AudioFileFormat.Type.AIFF);        } else if (obj.equals(waveB)) {            saveToFile(textField.getText().trim(), AudioFileFormat.Type.WAVE);        } else if (obj.equals(playB)) {            if (playB.getText().startsWith("Play")) {                playback.start();                samplingGraph.start();                captB.setEnabled(false);                pausB.setEnabled(true);                playB.setText("Stop");            } else {                playback.stop();                samplingGraph.stop();                captB.setEnabled(true);                pausB.setEnabled(false);                playB.setText("Play");            }        } else if (obj.equals(captB)) {            if (captB.getText().startsWith("Record")) {                file = null;                capture.start();                fileName = "untitled";                samplingGraph.start();                loadB.setEnabled(false);                playB.setEnabled(false);                pausB.setEnabled(true);                auB.setEnabled(false);                aiffB.setEnabled(false);                waveB.setEnabled(false);                captB.setText("Stop");            } else {                lines.removeAllElements();                capture.stop();                samplingGraph.stop();                loadB.setEnabled(true);                playB.setEnabled(true);                pausB.setEnabled(false);                auB.setEnabled(true);                aiffB.setEnabled(true);                waveB.setEnabled(true);                captB.setText("Record");            }        } else if (obj.equals(pausB)) {            if (pausB.getText().startsWith("Pause")) {                if (capture.thread != null) {                    capture.line.stop();                } else {                    if (playback.thread != null) {                        playback.line.stop();                    }                }                pausB.setText("Resume");            } else {                if (capture.thread != null) {                    capture.line.start();                } else {                    if (playback.thread != null) {                        playback.line.start();                    }                }                pausB.setText("Pause");            }        } else if (obj.equals(loadB)) {            try {                File file = new File(System.getProperty("user.dir"));                JFileChooser fc = new JFileChooser(file);                fc.setFileFilter(new javax.swing.filechooser.FileFilter () {                    public boolean accept(File f) {                        if (f.isDirectory()) {                            return true;                        }                        String name = f.getName();                        if (name.endsWith(".au") || name.endsWith(".wav") || name.endsWith(".aiff") || name.endsWith(".aif")) {                            return true;                        }                        return false;                    }                    public String getDescription() {                        return ".au, .wav, .aif";                    }                });                if (fc.showOpenDialog(null) == JFileChooser.APPROVE_OPTION) {                    createAudioInputStream(fc.getSelectedFile(), true);                }            } catch (SecurityException ex) {                JavaSound.showInfoDialog();                ex.printStackTrace();            } catch (Exception ex) {                ex.printStackTrace();            }        }    }    public void createAudioInputStream(File file, boolean updateComponents) {        if (file != null && file.isFile()) {            try {                this.file = file;                errStr = null;                audioInputStream = AudioSystem.getAudioInputStream(file);                playB.setEnabled(true);                fileName = file.getName();                long milliseconds = (long)((audioInputStream.getFrameLength() * 1000) / audioInputStream.getFormat().getFrameRate());                duration = milliseconds / 1000.0;                auB.setEnabled(true);                aiffB.setEnabled(true);                waveB.setEnabled(true);                if (updateComponents) {                    formatControls.setFormat(audioInputStream.getFormat());                    samplingGraph.createWaveForm(null);                }            } catch (Exception ex) {                reportStatus(ex.toString());            }        } else {            reportStatus("Audio file required.");        }    }    public void saveToFile(String name, AudioFileFormat.Type fileType) {        if (audioInputStream == null) {            reportStatus("No loaded audio to save");            return;        } else if (file != null) {            createAudioInputStream(file, false);        }        try {            audioInputStream.reset();        } catch (Exception e) {            reportStatus("Unable to reset stream " + e);            return;        }        File file = new File(fileName = name);        try {            if (AudioSystem.write(audioInputStream, fileType, file) == -1) {                throw new IOException("Problems writing to file");            }        } catch (Exception ex) { reportStatus(ex.toString()); }        samplingGraph.repaint();    }    private void reportStatus(String msg) {        if ((errStr = msg) != null) {            System.out.println(errStr);            samplingGraph.repaint();        }    }    public class Playback implements Runnable {        SourceDataLine line;        Thread thread;        public void start() {            errStr = null;            thread = new Thread(this);            thread.setName("Playback");            thread.start();        }        public void stop() {            thread = null;        }        private void shutDown(String message) {            if ((errStr = message) != null) {                System.err.println(errStr);                samplingGraph.repaint();            }            if (thread != null) {                thread = null;                samplingGraph.stop();                captB.setEnabled(true);                pausB.setEnabled(false);                playB.setText("Play");            }        }        public void run() {            if (file != null) {                createAudioInputStream(file, false);            }            if (audioInputStream == null) {                shutDown("No loaded audio to play back");                return;            }            try {                audioInputStream.reset();            } catch (Exception e) {                shutDown("Unable to reset the stream\n" + e);                return;            }            AudioFormat format = formatControls.getFormat();            AudioInputStream playbackInputStream = AudioSystem.getAudioInputStream(format, audioInputStream);            if (playbackInputStream == null) {                shutDown("Unable to convert stream of format " + audioInputStream + " to format " + format);                return;            }            DataLine.Info info = new DataLine.Info(SourceDataLine.class,                format);            if (!AudioSystem.isLineSupported(info)) {                shutDown("Line matching " + info + " not supported.");                return;            }            try {                line = (SourceDataLine) AudioSystem.getLine(info);                line.open(format, bufSize);            } catch (LineUnavailableException ex) {                shutDown("Unable to open the line: " + ex);                return;            }            int frameSizeInBytes = format.getFrameSize();            int bufferLengthInFrames = line.getBufferSize() / 8;            int bufferLengthInBytes = bufferLengthInFrames * frameSizeInBytes;            byte[] data = new byte[bufferLengthInBytes];            int numBytesRead = 0;            line.start();            while (thread != null) {                try {                    if ((numBytesRead = playbackInputStream.read(data)) == -1) {                        break;                    }                    int numBytesRemaining = numBytesRead;                    while (numBytesRemaining > 0 ) {                        numBytesRemaining -= line.write(data, 0, numBytesRemaining);                    }                } catch (Exception e) {                    shutDown("Error during playback: " + e);                    break;                }            }            if (thread != null) {                line.drain();            }            line.stop();            line.close();            line = null;            shutDown(null);        }    }    class Capture implements Runnable {        TargetDataLine line;        Thread thread;        public void start() {            errStr = null;            thread = new Thread(this);            thread.setName("Capture");            thread.start();        }        public void stop() {            thread = null;        }        private void shutDown(String message) {            if ((errStr = message) != null && thread != null) {                thread = null;                samplingGraph.stop();                loadB.setEnabled(true);                playB.setEnabled(true);                pausB.setEnabled(false);                auB.setEnabled(true);                aiffB.setEnabled(true);                waveB.setEnabled(true);                captB.setText("Record");                System.err.println(errStr);                samplingGraph.repaint();            }        }        public void run() {            duration = 0;            audioInputStream = null;            AudioFormat format = formatControls.getFormat();            DataLine.Info info = new DataLine.Info(TargetDataLine.class,                format);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -