`

java录音

    博客分类:
  • java
阅读更多

import javax.swing.JFrame;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.awt.Toolkit;
import javax.swing.JPanel;
import java.awt.event.ActionListener;
import javax.sound.sampled.AudioInputStream;
import javax.swing.JButton;
import java.io.File;
import java.util.Vector;
import java.awt.BorderLayout;
import javax.swing.border.EmptyBorder;
import javax.swing.border.SoftBevelBorder;
import javax.swing.BoxLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import javax.sound.sampled.AudioFileFormat;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.TargetDataLine;
import javax.sound.sampled.AudioSystem;
import java.io.IOException;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.LineUnavailableException;
import java.io.ByteArrayOutputStream;
import java.io.ByteArrayInputStream;

public class Test extends JPanel implements ActionListener {
    final int bufSize = 16384;

    Capture capture = new Capture();

    AudioInputStream audioInputStream;

    JButton captB;

    String fileName = "untitled";

    String errStr;

    double duration, seconds;

    File file;

    Vector lines = new Vector();

    public Test() {
        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.setBorder(sbb);
        p1.setLayout(new BoxLayout(p1, BoxLayout.Y_AXIS));

        JPanel buttonsPanel = new JPanel();
        buttonsPanel.setBorder(new EmptyBorder(10, 0, 5, 0));
        captB = addButton("Record", buttonsPanel, true);
        p1.add(buttonsPanel);

        add(p1);
    }

    public void open() {
    }

    public void close() {
        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(captB)) {
            if (captB.getText().startsWith("Record")) {
                file = null;
                capture.start();
                fileName = "untitled";
                captB.setText("Stop");
            } else {
                lines.removeAllElements();
                capture.stop();
                captB.setText("Record");
            }
        }
    }

    public void createAudioInputStream(File file, boolean updateComponents) {
        if (file != null && file.isFile()) {
            try {
                this.file = file;
                errStr = null;
                audioInputStream = AudioSystem.getAudioInputStream(file);
                fileName = file.getName();
                long milliseconds = (long) ((audioInputStream.getFrameLength() * 1000) /

                audioInputStream.getFormat().getFrameRate());
                duration = milliseconds / 1000.0;
                if (updateComponents) {
                }
            } 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);
        }
        // reset to the beginnning of the captured data
        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());
        }
    }

    private void reportStatus(String msg) {
        if ((errStr = msg) != null) {
            System.out.println(errStr);
        }
    }

    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;
                captB.setText("Record");
                System.err.println(errStr);
            }
        }

        public void run() {
            duration = 0;
            audioInputStream = null;

            // get an AudioInputStream of the desired format for playback
            AudioFormat.Encoding encoding = AudioFormat.Encoding.PCM_SIGNED;

            // define the required attributes for our line,
            // and make sure a compatible line is supported.
//            float rate = 44100f;
//            int sampleSize = 16;
//            String signedString = "signed";
//            boolean bigEndian = true;
//            int channels = 2;
            float rate = 8000f;
            int sampleSize = 8;
            String signedString = "signed";
            boolean bigEndian = true;
            int channels = 1;
            AudioFormat format = new AudioFormat(encoding, rate, sampleSize,
                    channels, (sampleSize / 8) * channels, rate, bigEndian);

            DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);

            if (!AudioSystem.isLineSupported(info)) {
                shutDown("Line matching " + info + " not supported.");
                return;
            }

            // get an AudioInputStream of the desired format for playback
            try {
                line = (TargetDataLine) AudioSystem.getLine(info);
                line.open(format, line.getBufferSize());
            } catch (LineUnavailableException ex) {
                shutDown("Unable to open the line: " + ex);
                return;
            } catch (SecurityException ex) {
                shutDown(ex.toString());
                return;
            } catch (Exception ex) {
                shutDown(ex.toString());
                return;
            }

            // play back the captured audio data
            ByteArrayOutputStream out = new ByteArrayOutputStream();
            int frameSizeInBytes = format.getFrameSize();
            int bufferLengthInFrames = line.getBufferSize() / 8;
            int bufferLengthInBytes = bufferLengthInFrames * frameSizeInBytes;
            byte[] data = new byte[bufferLengthInBytes];
            int numBytesRead;

            line.start();
            while (thread != null) {
                if ((numBytesRead = line.read(data, 0, bufferLengthInBytes)) == -1) {
                    break;
                }
                out.write(data, 0, numBytesRead);
            }

            // we reached the end of the stream. stop and close the line.
            line.stop();
            line.close();
            line = null;

            // stop and close the output stream
            try {
                out.flush();
                out.close();
            } catch (IOException ex) {
                ex.printStackTrace();
            }

            // load bytes into the audio input stream for playback
            byte audioBytes[] = out.toByteArray();
            ByteArrayInputStream bais = new ByteArrayInputStream(audioBytes);
            audioInputStream = new AudioInputStream(bais, format,
                    audioBytes.length / frameSizeInBytes);
            long milliseconds = (long) ((audioInputStream.getFrameLength() * 1000) / format
                    .getFrameRate());
            duration = milliseconds / 1000.0;
            try {
                audioInputStream.reset();
            } catch (Exception ex) {
                ex.printStackTrace();
                return;
            }
            saveToFile("untitled.wav", AudioFileFormat.Type.WAVE);
        }
    }

    public static void main(String[] args) {
        Test test = new Test();
        test.open();
        JFrame f = new JFrame("Capture");
        f.addWindowListener(new WindowAdapter() {
            public void windowClosing(WindowEvent e) {
                System.exit(0);
            }
        });
        f.getContentPane().add("Center", test);
        f.pack();
        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();
        int w = 720;
        int h = 340;
        f.setLocation(screenSize.width / 2 - w / 2, screenSize.height / 2 - h
                / 2);
        f.setSize(w, h);
        f.show();
    }
}

分享到:
评论

相关推荐

    Java录音小程序(3)个

    Java录音小程序(3)个Java录音小程序(3)个Java录音小程序(3)个Java录音小程序(3)个Java录音小程序(3)个Java录音小程序(3)个Java录音小程序(3)个Java录音小程序(3)个Java录音小程序(3)个Java录音小...

    java录音(java源码)

    java录音小程序,也是网载的,本人测试录音成功,分享给有需要的人。 提示:如果你使用无法录音,请试试在其它机器上如何,可能是你机器的问题,本人就吃过这样的亏。

    java录音,并调用科大讯飞语音转写实现会议既要

    java调用科大讯飞语音转写接口,实现会议录音,并实现记录会议既要功能!

    java 录音与播放材料

    在Java编程环境中,录音与播放功能是通过Java Sound API实现的。这个API提供了一系列的类和接口,使得开发者能够处理音频输入、输出以及处理。在这个"java 录音与播放材料"的压缩包中,可能包含了相关的代码示例、...

    录音代码.java 录音代码.java

    录音代码.java 录音代码.java 录音代码.java

    java 录音机

    一个用java写的简单的录音机,亲自测试没有问题,可以生成wav声音,格式可调

    java录音程序

    通过java实现的录音功能,可以修改录音存储的位置

    java 录音程序

    Java录音程序是使用Java语言开发的一种能够从计算机的麦克风捕获音频流并将其保存为WAV格式文件的应用。在本文中,我们将深入探讨如何利用Java实现这一功能,以及涉及的相关技术点。 首先,Java提供了Java Sound ...

    java 实现一个录音机

    总的来说,实现一个Java录音机需要对Java Sound API有深入的理解,包括音频格式、数据流的处理以及资源管理。通过上述步骤,你可以创建一个基本的录音程序,根据需求还可以扩展功能,如添加播放、剪辑、音效处理等。

    JAVA语音转文字

    - **录音**:利用Java的`javax.sound.sampled`包来捕获和录制音频。 - **上传音频**:将录制的音频数据转换为API接受的格式,如PCM或WAV,然后上传到语音识别服务。 - **获取结果**:服务返回识别后的文本,你...

    java讯飞语音转文字

    本项目主要关注的是如何在Java环境中利用讯飞的语音转文字(ASR,Automatic Speech Recognition)服务。下面我们将详细探讨相关的知识点。 1. **Java编程基础**: - Java是一种跨平台的面向对象的编程语言,广泛...

    java版WAV录音器

    有需要的请留下您的评论,如果需要更加丰富的功能,大家讨论一起学习下,呵呵

    基于Java的录音与音频播放设计源码

    本设计源码提供了一个基于Java的录音与音频播放demo。项目包含39个文件,主要使用Java编程语言。文件类型包括10个XML配置文件、10个WEBP图片文件、9个Java源代码文件、3个Gradle文件、2个GIT忽略文件、2个Properties...

    java实现麦克风自动录音

    java实现麦克风自动录音 获取麦克风音频数据,在控制台输入字母end按回车,则结束录音;

    Java+FlashWavRecorder实现网页录音并上传

    本篇文章将深入探讨如何使用Java与FlashWavRecorder技术实现网页录音并上传的功能。 首先,我们要明白Java和FlashWavRecorder在这一过程中的角色。Java是一种广泛使用的后端编程语言,它能够处理服务器端的逻辑,...

    Java再现WINDOWS录音机

     在这个Java录音机程序中,主要是通过创建一个处理器来捕捉声音数据,并将捕捉到的数据通过一个DataSink 对象发送到指定的目的地,如网络上,具体到本例中将是一个指定的本地文件。 运行环境:Java/Eclipse

    基于Java Sound的简单录音(音频采集)代码

    本篇将深入探讨如何利用Java Sound API实现简单的录音(音频采集)功能。 首先,我们关注的是"SimpleRecord.java"文件,这是实现录音功能的核心代码。在这个文件中,我们将看到如何创建一个AudioInputStream对象,...

    Android MP3录音实现

    在Android平台上实现MP3录音,通常涉及到音频采集、编码以及保存等多个步骤。在这个过程中,我们需要用到特定的库,如LAME,它是一个高效的MP3编码器。LAME库的最新版本是lame-3.99.5,这个版本在处理音频质量和效率...

    Java数字音频识别程序.pdf

    Java数字音频识别程序.pdf

Global site tag (gtag.js) - Google Analytics