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

📄 groove.java

📁 用JAVA实现录音机功能
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
    public void close() {        if (startB.getText().startsWith("Stop")) {            startB.doClick(0);        }        if (sequencer != null) {            sequencer.close();        }        sequencer = null;    }    private JButton makeButton(String bName, Color c) {        JButton b = new JButton(bName);        b.setBackground(c);        b.addActionListener(this);        return b;    }    private void buildTrackThenStartSequencer() {        Sequence sequence = null;        try {           sequence = new Sequence(Sequence.PPQ, 4);        } catch (Exception ex) { ex.printStackTrace(); }        track = sequence.createTrack();        createEvent(PROGRAM, 9, 1, 0);        for (int i = 0; i < data.size(); i++) {            Data d = (Data) data.get(i);            for (int j = 0; j < d.staff.length; j++) {                if (d.staff[j].equals(Color.black)) {                     createEvent(NOTEON, 9, d.id, j);                      createEvent(NOTEOFF, 9, d.id, j+1);                 }            }        }        // so we always have a track from 0 to 15.        createEvent(PROGRAM, 9, 1, 15);        // set and start the sequencer.        try {            sequencer.setSequence(sequence);        } catch (Exception ex) { ex.printStackTrace(); }        sequencer.start();        sequencer.setTempoInBPM(tempoDial.getTempo());    }    private void presetTracks(int num) {        final int ACOUSTIC_BASS = 35;        final int ACOUSTIC_SNARE = 38;        final int HAND_CLAP = 39;        final int PEDAL_HIHAT = 44;        final int LO_TOM = 45;        final int CLOSED_HIHAT = 42;        final int CRASH_CYMBAL1 = 49;        final int HI_TOM = 50;        final int RIDE_BELL = 53;        clearTable();        switch (num) {            case 0 : for (int i = 0; i < 16; i+=2) {                         setCell(CLOSED_HIHAT, i);                      }                     setCell(ACOUSTIC_SNARE, 4);                     setCell(ACOUSTIC_SNARE, 12);                     int bass1[] = { 0, 3, 6, 8 };                     for (int i = 0; i < bass1.length; i++) {                         setCell(ACOUSTIC_BASS, bass1[i]);                      }                     break;            case 1 : for (int i = 0; i < 16; i+=4) {                         setCell(CRASH_CYMBAL1, i);                      }                     for (int i = 0; i < 16; i+=2) {                         setCell(PEDAL_HIHAT, i);                      }                     setCell(ACOUSTIC_SNARE, 4);                     setCell(ACOUSTIC_SNARE, 12);                     int bass2[] = { 0, 2, 3, 7, 9, 10, 15 };                     for (int i = 0; i < bass2.length; i++) {                         setCell(ACOUSTIC_BASS, bass2[i]);                      }                     break;            case 2 : for (int i = 0; i < 16; i+=4) {                         setCell(RIDE_BELL, i);                      }                     for (int i = 2; i < 16; i+=4) {                         setCell(PEDAL_HIHAT, i);                      }                     setCell(HAND_CLAP, 4);                     setCell(HAND_CLAP, 12);                     setCell(HI_TOM, 13);                     setCell(LO_TOM, 14);                     int bass3[] = { 0, 3, 6, 9, 15 };                     for (int i = 0; i < bass3.length; i++) {                         setCell(ACOUSTIC_BASS+1, bass3[i]);                      }                     break;            default :        }        table.tableChanged(new TableModelEvent(dataModel));    }    private void setCell(int id, int tick) {        for (int i = 0; i < data.size(); i++) {            Data d = (Data) data.get(i);            if (d.id == id) {                d.staff[tick] = Color.black;                break;            }        }    }    private void clearTable() {        for (int i = 0; i < data.size(); i++) {            Data d = (Data) data.get(i);            for (int j = 0; j < d.staff.length; j++) {                d.staff[j] = Color.white;            }        }    }    private void createEvent(int type, int chan, int num, long tick) {        ShortMessage message = new ShortMessage();        try {            message.setMessage(type, chan, num, velocity);             MidiEvent event = new MidiEvent( message, tick );            track.add(event);        } catch (Exception ex) { ex.printStackTrace(); }    }    public void meta(MetaMessage message) {        if (message.getType() == 47) {  // 47 is end of track            if (loopB.getBackground().equals(Color.gray)) {                if (sequencer != null && sequencer.isOpen()) {                    sequencer.start();                    sequencer.setTempoInBPM(tempoDial.getTempo());                }            } else {                startB.setText("Start");            }        }    }    public void actionPerformed(ActionEvent e) {        Object object = e.getSource();        if (object instanceof JComboBox) {            presetTracks(((JComboBox) object).getSelectedIndex());            if (startB.getText().startsWith("Stop")) {                sequencer.stop();                buildTrackThenStartSequencer();            }        } else if (object instanceof JButton) {            JButton b = (JButton) object;            if (b.equals(startB)) {                if (b.getText().startsWith("Start")) {                    buildTrackThenStartSequencer();                    b.setText("Stop");                } else {                    sequencer.stop();                    b.setText("Start");                }            } else if (b.equals(loopB)) {                b.setSelected(!b.isSelected());                if (loopB.getBackground().equals(Color.gray)) {                    loopB.setBackground(getBackground());                } else {                    loopB.setBackground(Color.gray);                }            } else if (b.getText().startsWith("Clear")) {                clearTable();                table.tableChanged(new TableModelEvent(dataModel));            }        }    }    /**     * Storage class for instrument and musical staff represented by color.     */    class Data extends Object {        String name; int id; Color staff[] = new Color[16];        public Data(String name, int id) {            this.name = name;            this.id = id;            for (int i = 0; i < staff.length; i++) {                staff[i] = Color.white;            }        }    }    public static void main(String args[]) {        final Groove groove = new Groove();        JFrame f = new JFrame("Rhythm Groove Box");        f.addWindowListener(new WindowAdapter() {            public void windowClosing(WindowEvent e) {System.exit(0);}        });        f.getContentPane().add("Center", groove);        f.pack();        Dimension screenSize = Toolkit.getDefaultToolkit().getScreenSize();        int w = 640;        int h = 440;        f.setLocation(screenSize.width/2 - w/2, screenSize.height/2 - h/2);        f.setSize(w, h);        f.show();        groove.open();    }} 

⌨️ 快捷键说明

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