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

📄 juke.java

📁 用JAVA实现录音机功能
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
        if (currentSound instanceof Clip) {            Clip clip = (Clip) currentSound;            seconds = clip.getFramePosition() / clip.getFormat().getFrameRate();        } else if ( (currentSound instanceof Sequence) || (currentSound instanceof BufferedInputStream) ) {            try {                seconds = sequencer.getMicrosecondPosition() / 1000000.0;            } catch (IllegalStateException e){                System.out.println("TEMP: IllegalStateException "+                    "on sequencer.getMicrosecondPosition(): " + e);            }        }        return seconds;    }    public void update(LineEvent event) {        if (event.getType() == LineEvent.Type.STOP && !paused) {             audioEOM = true;        }    }    public void meta(MetaMessage message) {        if (message.getType() == 47) {  // 47 is end of track            midiEOM = true;        }    }    private void reportStatus(String msg) {        if ((errStr = msg) != null) {            System.out.println(errStr);            playbackMonitor.repaint();        }        if (credits != null && credits.isAlive()) {            credits.interrupt();        }    }    public Thread getThread() {        return thread;    }    public void start() {        thread = new Thread(this);        thread.setName("Juke");        thread.start();    }    public void stop() {        if (thread != null) {            thread.interrupt();        }        thread = null;    }    public void run() {        do {            table.scrollRectToVisible(new Rectangle(0,0,1,1));            for (; num < sounds.size() && thread != null; num++) {                table.scrollRectToVisible(new Rectangle(0,(num+2)*(table.getRowHeight()+table.getRowMargin()),1,1));                table.setRowSelectionInterval(num, num);                if( loadSound(sounds.get(num)) == true ) {                    playSound();		}                // take a little break between sounds                try { thread.sleep(222); } catch (Exception e) {break;}            }            num = 0;        } while (loopB.isSelected() && thread != null);        if (thread != null) {            startB.doClick();        }        thread = null;        currentName = null;        currentSound = null;        playbackMonitor.repaint();    }    public void setPan() {        int value = panSlider.getValue();        if (currentSound instanceof Clip) {            try {                Clip clip = (Clip) currentSound;                FloatControl panControl =                     (FloatControl) clip.getControl(FloatControl.Type.PAN);                panControl.setValue(value/100.0f);            } catch (Exception ex) {                ex.printStackTrace();            }        } else if (currentSound instanceof Sequence || currentSound instanceof BufferedInputStream) {            for (int i = 0; i < channels.length; i++) {                				channels[i].controlChange(10, (int)(((double)value + 100.0) / 200.0 *  127.0));            }										         }    }    public void setGain() {        double value = gainSlider.getValue() / 100.0;        if (currentSound instanceof Clip) {            try {                Clip clip = (Clip) currentSound;                FloatControl gainControl =                   (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);                float dB = (float)                   (Math.log(value==0.0?0.0001:value)/Math.log(10.0)*20.0);                gainControl.setValue(dB);            } catch (Exception ex) {                ex.printStackTrace();            }        } else if (currentSound instanceof Sequence || currentSound instanceof BufferedInputStream) {            for (int i = 0; i < channels.length; i++) {                				channels[i].controlChange(7, (int)(value * 127.0));			}        }    }    /**     * GUI controls for start, stop, previous, next, pan and gain.     */    class JukeControls extends JPanel implements ActionListener, ChangeListener {        public JukeControls() {            setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));            JPanel p1 = new JPanel();            p1.setLayout(new BoxLayout(p1, BoxLayout.Y_AXIS));            p1.setBorder(new EmptyBorder(10,0,5,0));            JPanel p2 = new JPanel();            startB = addButton("Start", p2, sounds.size() != 0);            pauseB = addButton("Pause", p2, false);            p1.add(p2);            JPanel p3 = new JPanel();            prevB = addButton("<<", p3, false);            nextB = addButton(">>", p3, false);            p1.add(p3);            add(p1);                JPanel p4 = new JPanel(new BorderLayout());            EmptyBorder eb = new EmptyBorder(5,20,10,20);            BevelBorder bb = new BevelBorder(BevelBorder.LOWERED);            p4.setBorder(new CompoundBorder(eb,bb));            p4.add(playbackMonitor);            seekSlider = new JSlider(JSlider.HORIZONTAL, 0, 100, 0);            seekSlider.setEnabled(false);            seekSlider.addChangeListener(this);            p4.add("South", seekSlider);            add(p4);            JPanel p5 = new JPanel();            p5.setLayout(new BoxLayout(p5, BoxLayout.X_AXIS));            p5.setBorder(new EmptyBorder(5,5,10,5));            panSlider = new JSlider(-100, 100, 0);            panSlider.addChangeListener(this);            TitledBorder tb = new TitledBorder(new EtchedBorder());            tb.setTitle("Pan = 0.0");            panSlider.setBorder(tb);            p5.add(panSlider);            gainSlider = new JSlider(0, 100, 80);            gainSlider.addChangeListener(this);            tb = new TitledBorder(new EtchedBorder());            tb.setTitle("Gain = 80");            gainSlider.setBorder(tb);            p5.add(gainSlider);            add(p5);        }        private JButton addButton(String name, JPanel panel, boolean state) {            JButton b = new JButton(name);            b.addActionListener(this);            b.setEnabled(state);            panel.add(b);            return b;        }        public void stateChanged(ChangeEvent e) {            JSlider slider = (JSlider) e.getSource();            int value = slider.getValue();            if (slider.equals(seekSlider)) {                if (currentSound instanceof Clip) {                    ((Clip) currentSound).setFramePosition(value);                } else if (currentSound instanceof Sequence) {                    long dur = ((Sequence) currentSound).getMicrosecondLength();					sequencer.setMicrosecondPosition(value * 1000);                } else if (currentSound instanceof BufferedInputStream) {                    long dur = sequencer.getMicrosecondLength();					sequencer.setMicrosecondPosition(value * 1000);                }                playbackMonitor.repaint();                return;            }            TitledBorder tb = (TitledBorder) slider.getBorder();            String s = tb.getTitle();            if (s.startsWith("Pan")) {                s = s.substring(0, s.indexOf('=')+1) + s.valueOf(value/100.0);                if (currentSound != null) {                    setPan();                }            } else if (s.startsWith("Gain")) {                s = s.substring(0, s.indexOf('=')+1) + s.valueOf(value);                if (currentSound != null) {                    setGain();                }            }             tb.setTitle(s);            slider.repaint();        }        public void setComponentsEnabled(boolean state) {            seekSlider.setEnabled(state);            pauseB.setEnabled(state);            prevB.setEnabled(state);            nextB.setEnabled(state);        }        public void actionPerformed(ActionEvent e) {            JButton button = (JButton) e.getSource();            if (button.getText().equals("Start")) {                if (credits != null) {                    credits.interrupt();                }                paused = false;                num = table.getSelectedRow();                num = num == -1 ? 0 : num;                start();                button.setText("Stop");                setComponentsEnabled(true);            } else if (button.getText().equals("Stop")) {                credits = new Credits();                credits.start();                paused = false;                stop();                button.setText("Start");                pauseB.setText("Pause");                setComponentsEnabled(false);            } else if (button.getText().equals("Pause")) {                paused = true;                if (currentSound instanceof Clip) {                    ((Clip) currentSound).stop();                } else if (currentSound instanceof Sequence || currentSound instanceof BufferedInputStream) {                    sequencer.stop();                }                playbackMonitor.stop();                pauseB.setText("Resume");            } else if (button.getText().equals("Resume")) {                paused = false;                if (currentSound instanceof Clip) {                    ((Clip) currentSound).start();                } else if (currentSound instanceof Sequence || currentSound instanceof BufferedInputStream) {                    sequencer.start();                }                playbackMonitor.start();                pauseB.setText("Pause");            } else if (button.getText().equals("<<")) {                paused = false;                pauseB.setText("Pause");                num = num-1 < 0 ? sounds.size()-1 : num-2;                bump = true;            } else if (button.getText().equals(">>")) {                paused = false;                pauseB.setText("Pause");                num = num+1 == sounds.size() ? -1 : num;                bump = true;            }        }    }  // End JukeControls    /**     * Displays current sound and time elapsed.     */    public class PlaybackMonitor extends JPanel implements Runnable {                String welcomeStr = "Welcome to Java Sound";        Thread pbThread;        Color black = new Color(20, 20, 20);         Color jfcBlue = new Color(204, 204, 255);        Color jfcDarkBlue = jfcBlue.darker();        Font font24 = new Font("serif", Font.BOLD, 24);        Font font28 = new Font("serif", Font.BOLD, 28);        Font font42 = new Font("serif", Font.BOLD, 42);        FontMetrics fm28, fm42;        public PlaybackMonitor() {            fm28 = getFontMetrics(font28);            fm42 = getFontMetrics(font42);        }            public void paint(Graphics g) {            Graphics2D g2 = (Graphics2D) g;            Dimension d = getSize();            g2.setBackground(black);            g2.clearRect(0, 0, d.width, d.height);            g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);            g2.setColor(jfcBlue);            if (errStr != null) {                g2.setFont(new Font("serif", Font.BOLD, 18));                g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_OFF);                g2.drawString("ERROR", 5, 20);                AttributedString as = new AttributedString(errStr);                Font font12 = new Font("serif", Font.PLAIN, 12);                as.addAttribute(TextAttribute.FONT, font12, 0, errStr.length());                AttributedCharacterIterator aci = as.getIterator();                FontRenderContext frc = g2.getFontRenderContext();                LineBreakMeasurer lbm = new LineBreakMeasurer(aci, frc);                float x = 5, y = 25;                lbm.setPosition(0);                while (lbm.getPosition() < errStr.length()) {                    TextLayout tl = lbm.nextLayout(d.width-x-5);                    if (!tl.isLeftToRight()) {                        x = d.width - tl.getAdvance();                    }                    tl.draw(g2, x, y += tl.getAscent());                    y += tl.getDescent() + tl.getLeading();                }            } else if (currentName == null) {                FontRenderContext frc = g2.getFontRenderContext();                TextLayout tl = new TextLayout(welcomeStr, font28, frc);                float x = (float) (d.width/2-tl.getBounds().getWidth()/2);                tl.draw(g2, x, d.height/2);                if (credits != null) {                    credits.render(d, g2);                }            } else {

⌨️ 快捷键说明

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