亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? midisynth.java

?? java midi 鋼琴界面 利用鼠標指針拖動 可以模仿鋼琴 風琴 吉他 等等西洋樂器 需編譯!
?? JAVA
?? 第 1 頁 / 共 2 頁
字號:
/* * Copyright 2002 Sun Microsystems, Inc. All rights reserved. * SUN PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. */package xiyou.wangbo;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.border.*;import javax.swing.table.*;import javax.swing.event.*;import javax.sound.midi.*;import java.util.Vector;import java.io.File;import java.io.IOException;/** * Illustrates general MIDI melody instruments and MIDI controllers. * * @version @(#)MidiSynth.java	1.16 02/02/06 * @author Brian Lichtenwalter   */public class MidiSynth extends JPanel implements ControlContext {    final int PROGRAM = 192;    final int NOTEON = 144;    final int NOTEOFF = 128;    final int SUSTAIN = 64;    final int REVERB = 91;    final int ON = 0, OFF = 1;    final Color jfcBlue = new Color(204, 204, 255);    final Color pink = new Color(255, 175, 175);    Sequencer sequencer;    Sequence sequence;    Synthesizer synthesizer;    Instrument instruments[];    ChannelData channels[];    ChannelData cc;    // current channel    JCheckBox mouseOverCB = new JCheckBox("mouseOver", true);    JSlider veloS, presS, bendS, revbS;    JCheckBox soloCB, monoCB, muteCB, sustCB;     Vector keys = new Vector();    Vector whiteKeys = new Vector();    JTable table;    Piano piano;    boolean record;    Track track;    long startTime;    RecordFrame recordFrame;    Controls controls;    public MidiSynth() {        setLayout(new BorderLayout());        JPanel p = new JPanel();        p.setLayout(new BoxLayout(p, BoxLayout.Y_AXIS));        EmptyBorder eb = new EmptyBorder(5,5,5,5);        BevelBorder bb = new BevelBorder(BevelBorder.LOWERED);        CompoundBorder cb = new CompoundBorder(eb,bb);        p.setBorder(new CompoundBorder(cb,eb));        JPanel pp = new JPanel(new BorderLayout());        pp.setBorder(new EmptyBorder(10,20,10,5));        pp.add(piano = new Piano());        p.add(pp);        p.add(controls = new Controls());        p.add(new InstrumentsTable());        add(p);    }    public void open() {        try {            if (synthesizer == null) {                if ((synthesizer = MidiSystem.getSynthesizer()) == null) {                    System.out.println("getSynthesizer() failed!");                    return;                }            }             synthesizer.open();            sequencer = MidiSystem.getSequencer();            sequence = new Sequence(Sequence.PPQ, 10);        } catch (Exception ex) { ex.printStackTrace(); return; }        Soundbank sb = synthesizer.getDefaultSoundbank();	if (sb != null) {            instruments = synthesizer.getDefaultSoundbank().getInstruments();            synthesizer.loadInstrument(instruments[0]);        }        MidiChannel midiChannels[] = synthesizer.getChannels();        channels = new ChannelData[midiChannels.length];        for (int i = 0; i < channels.length; i++) {            channels[i] = new ChannelData(midiChannels[i], i);        }        cc = channels[0];        ListSelectionModel lsm = table.getSelectionModel();        lsm.setSelectionInterval(0,0);        lsm = table.getColumnModel().getSelectionModel();        lsm.setSelectionInterval(0,0);    }    public void close() {        if (synthesizer != null) {            synthesizer.close();        }        if (sequencer != null) {            sequencer.close();        }        sequencer = null;        synthesizer = null;        instruments = null;        channels = null;        if (recordFrame != null) {            recordFrame.dispose();            recordFrame = null;        }    }    /**     * given 120 bpm:     *   (120 bpm) / (60 seconds per minute) = 2 beats per second     *   2 / 1000 beats per millisecond     *   (2 * resolution) ticks per second     *   (2 * resolution)/1000 ticks per millisecond, or      *      (resolution / 500) ticks per millisecond     *   ticks = milliseconds * resolution / 500     */    public void createShortEvent(int type, int num) {        ShortMessage message = new ShortMessage();        try {            long millis = System.currentTimeMillis() - startTime;            long tick = millis * sequence.getResolution() / 500;            message.setMessage(type+cc.num, num, cc.velocity);             MidiEvent event = new MidiEvent(message, tick);            track.add(event);        } catch (Exception ex) { ex.printStackTrace(); }    }    /**     * Black and white keys or notes on the piano.     */    class Key extends Rectangle {        int noteState = OFF;        int kNum;        public Key(int x, int y, int width, int height, int num) {            super(x, y, width, height);            kNum = num;        }        public boolean isNoteOn() {            return noteState == ON;        }        public void on() {            setNoteState(ON);            cc.channel.noteOn(kNum, cc.velocity);            if (record) {                createShortEvent(NOTEON, kNum);            }        }        public void off() {            setNoteState(OFF);            cc.channel.noteOff(kNum, cc.velocity);            if (record) {                createShortEvent(NOTEOFF, kNum);            }        }        public void setNoteState(int state) {            noteState = state;        }    } // End class Key    /**     * Piano renders black & white keys and plays the notes for a MIDI      * channel.       */    class Piano extends JPanel implements MouseListener {        Vector blackKeys = new Vector();        Key prevKey;        final int kw = 16, kh = 80;        public Piano() {            setLayout(new BorderLayout());            setPreferredSize(new Dimension(42*kw, kh+1));            int transpose = 24;              int whiteIDs[] = { 0, 2, 4, 5, 7, 9, 11 };                       for (int i = 0, x = 0; i < 6; i++) {                for (int j = 0; j < 7; j++, x += kw) {                    int keyNum = i * 12 + whiteIDs[j] + transpose;                    whiteKeys.add(new Key(x, 0, kw, kh, keyNum));                }            }            for (int i = 0, x = 0; i < 6; i++, x += kw) {                int keyNum = i * 12 + transpose;                blackKeys.add(new Key((x += kw)-4, 0, kw/2, kh/2, keyNum+1));                blackKeys.add(new Key((x += kw)-4, 0, kw/2, kh/2, keyNum+3));                x += kw;                blackKeys.add(new Key((x += kw)-4, 0, kw/2, kh/2, keyNum+6));                blackKeys.add(new Key((x += kw)-4, 0, kw/2, kh/2, keyNum+8));                blackKeys.add(new Key((x += kw)-4, 0, kw/2, kh/2, keyNum+10));            }            keys.addAll(blackKeys);            keys.addAll(whiteKeys);            addMouseMotionListener(new MouseMotionAdapter() {                public void mouseMoved(MouseEvent e) {                    if (mouseOverCB.isSelected()) {                        Key key = getKey(e.getPoint());                        if (prevKey != null && prevKey != key) {                            prevKey.off();                        }                         if (key != null && prevKey != key) {                            key.on();                        }                        prevKey = key;                        repaint();                    }                }            });            addMouseListener(this);        }        public void mousePressed(MouseEvent e) {             prevKey = getKey(e.getPoint());            if (prevKey != null) {                prevKey.on();                repaint();            }        }        public void mouseReleased(MouseEvent e) {             if (prevKey != null) {                prevKey.off();                repaint();            }        }        public void mouseExited(MouseEvent e) {             if (prevKey != null) {                prevKey.off();                repaint();                prevKey = null;            }        }        public void mouseClicked(MouseEvent e) { }        public void mouseEntered(MouseEvent e) { }        public Key getKey(Point point) {            for (int i = 0; i < keys.size(); i++) {                if (((Key) keys.get(i)).contains(point)) {                    return (Key) keys.get(i);                }            }            return null;        }        public void paint(Graphics g) {            Graphics2D g2 = (Graphics2D) g;            Dimension d = getSize();            g2.setBackground(getBackground());            g2.clearRect(0, 0, d.width, d.height);            g2.setColor(Color.white);            g2.fillRect(0, 0, 42*kw, kh);            for (int i = 0; i < whiteKeys.size(); i++) {                Key key = (Key) whiteKeys.get(i);                if (key.isNoteOn()) {                    g2.setColor(record ? pink : jfcBlue);                    g2.fill(key);                }                g2.setColor(Color.black);                g2.draw(key);            }            for (int i = 0; i < blackKeys.size(); i++) {                Key key = (Key) blackKeys.get(i);                if (key.isNoteOn()) {                    g2.setColor(record ? pink : jfcBlue);                    g2.fill(key);                    g2.setColor(Color.black);                    g2.draw(key);                } else {                    g2.setColor(Color.black);                    g2.fill(key);                }            }        }    } // End class Piano    /**     * Stores MidiChannel information.     */    class ChannelData {        MidiChannel channel;        boolean solo, mono, mute, sustain;        int velocity, pressure, bend, reverb;        int row, col, num;         public ChannelData(MidiChannel channel, int num) {            this.channel = channel;            this.num = num;            velocity = pressure = bend = reverb = 64;        }        public void setComponentStates() {            table.setRowSelectionInterval(row, row);            table.setColumnSelectionInterval(col, col);            soloCB.setSelected(solo);            monoCB.setSelected(mono);            muteCB.setSelected(mute);            //sustCB.setSelected(sustain);            JSlider slider[] = { veloS, presS, bendS, revbS };            int v[] = { velocity, pressure, bend, reverb };            for (int i = 0; i < slider.length; i++) {                TitledBorder tb = (TitledBorder) slider[i].getBorder();                String s = tb.getTitle();                tb.setTitle(s.substring(0, s.indexOf('=')+1)+s.valueOf(v[i]));                slider[i].repaint();            }        }    } // End class ChannelData    /**     * Table for 128 general MIDI melody instuments.     */    class InstrumentsTable extends JPanel {        private String names[] = {            "Piano", "Chromatic Perc.", "Organ", "Guitar",            "Bass", "Strings", "Ensemble", "Brass",            "Reed", "Pipe", "Synth Lead", "Synth Pad",           "Synth Effects", "Ethnic", "Percussive", "Sound Effects" };        private int nRows = 8;        private int nCols = names.length; // just show 128 instruments        public InstrumentsTable() {            setLayout(new BorderLayout());            TableModel dataModel = new AbstractTableModel() {                public int getColumnCount() { return nCols; }                public int getRowCount() { return nRows;}                public Object getValueAt(int r, int c) {                     if (instruments != null) {                        return instruments[c*nRows+r].getName();                    } else {                        return Integer.toString(c*nRows+r);                    }                }                public String getColumnName(int c) {                     return names[c];                }                public Class getColumnClass(int c) {                    return getValueAt(0, c).getClass();                }                public boolean isCellEditable(int r, int c) {return false;}                public void setValueAt(Object obj, int r, int c) {}            };                table = new JTable(dataModel);            table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);            // Listener for row changes            ListSelectionModel lsm = table.getSelectionModel();            lsm.addListSelectionListener(new ListSelectionListener() {                public void valueChanged(ListSelectionEvent e) {                    ListSelectionModel sm = (ListSelectionModel) e.getSource();                    if (!sm.isSelectionEmpty()) {                        cc.row = sm.getMinSelectionIndex();                    }                    programChange(cc.col*nRows+cc.row);                }            });            // Listener for column changes            lsm = table.getColumnModel().getSelectionModel();            lsm.addListSelectionListener(new ListSelectionListener() {                public void valueChanged(ListSelectionEvent e) {                    ListSelectionModel sm = (ListSelectionModel) e.getSource();                    if (!sm.isSelectionEmpty()) {                        cc.col = sm.getMinSelectionIndex();                    }                    programChange(cc.col*nRows+cc.row);                }            });

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
制服丝袜亚洲精品中文字幕| 亚洲高清在线精品| 欧美在线看片a免费观看| 91最新地址在线播放| 另类欧美日韩国产在线| 亚洲乱码日产精品bd| 久久精品欧美一区二区三区麻豆| 高清国产一区二区三区| 极品少妇xxxx偷拍精品少妇| 亚洲第一福利视频在线| 亚洲欧美日韩精品久久久久| 欧美一级精品大片| 欧美日韩www| 欧美亚洲一区三区| 97精品视频在线观看自产线路二| 欧美成人精品1314www| 久久综合五月天婷婷伊人| 欧美一区二区不卡视频| 欧美高清www午色夜在线视频| 在线观看亚洲成人| 91久久精品日日躁夜夜躁欧美| av中文字幕不卡| 国产精品99久| 国产在线日韩欧美| 另类欧美日韩国产在线| 久久99日本精品| 免费成人美女在线观看.| 蜜桃一区二区三区在线| 东方欧美亚洲色图在线| 国产精品资源在线观看| 国产成人精品午夜视频免费| 国产精品1区二区.| 欧美日韩国产另类不卡| 欧美中文字幕一二三区视频| 色哟哟一区二区在线观看 | 99精品在线免费| 日韩va欧美va亚洲va久久| 国产在线不卡一区| 欧美性生活影院| 91精品福利在线| 国产精品丝袜在线| 7777精品伊人久久久大香线蕉最新版 | 五月天激情综合| 国产乱国产乱300精品| 91精品视频网| 一片黄亚洲嫩模| 成人免费视频视频| 欧美一区二区免费观在线| 中文字幕精品三区| 国产欧美日韩综合精品一区二区 | 日韩国产在线观看| 欧美年轻男男videosbes| 99免费精品视频| 国产欧美一二三区| 性欧美疯狂xxxxbbbb| 亚洲精品亚洲人成人网| 亚洲男人的天堂网| 国产欧美精品国产国产专区| 99久久精品国产观看| 国产专区综合网| 欧美无砖砖区免费| 青草国产精品久久久久久| 免费一级欧美片在线观看| 亚洲国产一区二区三区青草影视| 欧洲精品一区二区三区在线观看| 国产98色在线|日韩| 91一区二区三区在线观看| 国产精品国产自产拍高清av王其 | 国产欧美一区二区三区在线老狼| 粉嫩av亚洲一区二区图片| 麻豆精品视频在线| 国产高清不卡一区| 懂色一区二区三区免费观看| 精品久久五月天| 国产精品日日摸夜夜摸av| 国产日本亚洲高清| 国产精品三级av| 国产精品成人在线观看| 一区二区免费视频| 亚洲一区在线电影| 精品免费国产二区三区| 久久精品无码一区二区三区| 亚洲国产日韩综合久久精品| 成人免费高清在线| 国产主播一区二区| 国产激情一区二区三区四区| 在线国产亚洲欧美| 欧美精品免费视频| 欧美大胆人体bbbb| 91精品在线免费观看| 国产日韩亚洲欧美综合| 欧美日韩综合色| 精品三级在线观看| 亚洲欧洲日韩av| 日韩欧美国产系列| 亚洲在线视频免费观看| 日本高清不卡视频| 日韩一区二区不卡| 一区二区三区91| 日本一区二区三区在线观看| 香蕉影视欧美成人| 国产精品久久久久一区二区三区| 欧美国产丝袜视频| 日本91福利区| 日韩av中文在线观看| 亚洲天堂网中文字| 91精品婷婷国产综合久久 | 中文字幕国产一区| 麻豆精品视频在线观看视频| 国产精品素人一区二区| 国产精品一区二区视频| 亚洲综合丁香婷婷六月香| 亚洲欧美另类综合偷拍| 国产一区在线观看视频| 日本不卡视频在线| 欧美亚日韩国产aⅴ精品中极品| 成人视屏免费看| 久久综合国产精品| 日韩中文字幕麻豆| 欧美日本不卡视频| 亚洲欧美成aⅴ人在线观看| 99亚偷拍自图区亚洲| 高清视频一区二区| 国产精品免费人成网站| 不卡一区二区在线| 制服丝袜中文字幕一区| 日韩制服丝袜av| 欧美日韩久久久| 日本中文字幕一区| 色狠狠一区二区| 亚洲大片一区二区三区| 亚洲丰满少妇videoshd| 欧美日韩一区二区三区高清| 欧美丰满少妇xxxbbb| 国产午夜精品福利| 国产在线播放一区三区四| 国产一区二区精品在线观看| 久久精品视频网| 艳妇臀荡乳欲伦亚洲一区| 亚洲丰满少妇videoshd| 日韩在线卡一卡二| 亚洲女人的天堂| 国产福利一区二区| 99久久久精品| 亚洲美女偷拍久久| 成人免费的视频| 亚洲免费av在线| 久久国产三级精品| 在线观看网站黄不卡| 欧美日韩三级视频| 国产综合一区二区| 色欧美乱欧美15图片| 精品日韩一区二区三区| 色8久久精品久久久久久蜜| 日本视频中文字幕一区二区三区| 色综合久久久久综合99| 日韩精品欧美成人高清一区二区| 国产精品一区2区| 激情小说欧美图片| 久久老女人爱爱| 亚洲精品久久久蜜桃| 日韩不卡一二三区| 精品视频在线免费| 色欧美88888久久久久久影院| 亚洲国产成人自拍| 久久精品在线免费观看| 成人精品在线视频观看| 欧美一级黄色片| 亚洲成在线观看| 美女网站在线免费欧美精品| 欧美美女视频在线观看| 国产精品99久久不卡二区| 日韩在线播放一区二区| 国产精品你懂的在线欣赏| 欧美一区三区四区| 极品少妇一区二区三区精品视频| 欧美日韩一区二区三区在线| 欧美成人三级在线| 一区二区三区精品在线| 日韩av成人高清| 精品免费日韩av| 北岛玲一区二区三区四区| 午夜精品免费在线| 欧美一区永久视频免费观看| 亚洲欧洲精品一区二区精品久久久| 久久九九99视频| 欧美色综合久久| 91丨九色丨蝌蚪丨老版| 欧美成人激情免费网| 欧美激情一区在线| 久久精品在这里| 日韩综合小视频| 日本aⅴ亚洲精品中文乱码| 国产色婷婷亚洲99精品小说| 欧美国产1区2区| 亚洲综合清纯丝袜自拍| 99国产精品久久久久久久久久久| 成人av电影免费在线播放| 日韩欧美中文字幕公布| 亚洲成人第一页|