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

📄 formatcontrols.java

📁 接上一个程序 播放器可以实现波形的显示 还可以改变采样点个数和算法
💻 JAVA
字号:
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;
import javax.swing.event.*;
import javax.swing.border.*;
import javax.sound.sampled.*;
import java.util.Vector;    
import java.util.Enumeration;




class FormatControls extends JDialog implements ActionListener
{
	JPanel p;
    Vector groups = new Vector();
    JToggleButton linrB, ulawB, alawB, rate8B, rate11B, rate16B, rate22B, rate44B;
    JToggleButton size8B, size16B, signB, unsignB, litB, bigB, monoB,sterB;
    JButton okB;
   
    public FormatControls(Frame f) 
    {    	
    	super(f,null,true);
    	
    	okB=new JButton("确定");
    	okB.addActionListener(this);
    	JPanel okP=new JPanel();
    	okP.add(okB);
    	
    	p=new JPanel();
        p.setLayout(new GridLayout(0,1));
		p.setBorder(BorderFactory.createCompoundBorder(
			BorderFactory.createTitledBorder(BorderFactory.createEtchedBorder(),"声音格式设置"),
			BorderFactory.createEtchedBorder()
		));
        
        JPanel p1 = new JPanel();
        //p1.setBorder(BorderFactory.createCompoundBorder(BorderFactory.createTitledBorder("格式"));
        ButtonGroup encodingGroup = new ButtonGroup();
        linrB = addToggleButton(p1, encodingGroup, "linear", true);
        ulawB = addToggleButton(p1, encodingGroup, "ulaw", false);
        alawB = addToggleButton(p1, encodingGroup, "alaw", false);
        
        p.add(p1);
        groups.addElement(encodingGroup);
               
        JPanel p2 = new JPanel();
        JPanel p2b = new JPanel();
        ButtonGroup sampleRateGroup = new ButtonGroup();
        rate8B = addToggleButton(p2, sampleRateGroup, "8000", false);
        rate11B = addToggleButton(p2, sampleRateGroup, "11025", false);
        rate16B = addToggleButton(p2b, sampleRateGroup, "16000", false);
        rate22B = addToggleButton(p2b, sampleRateGroup, "22050", false);
        rate44B = addToggleButton(p2b, sampleRateGroup, "44100", true);
        p.add(p2);
	    p.add(p2b);
        groups.addElement(sampleRateGroup);
    
        JPanel p3 = new JPanel();
//      p3.setBorder(BorderFactory.createTitledBorder("采样值"));
        
        ButtonGroup sampleSizeInBitsGroup = new ButtonGroup();
        size8B = addToggleButton(p3, sampleSizeInBitsGroup, "8", false);
        size16B = addToggleButton(p3, sampleSizeInBitsGroup, "16", true);
        p.add(p3);
        groups.addElement(sampleSizeInBitsGroup);
    
        JPanel p4 = new JPanel();
        ButtonGroup signGroup = new ButtonGroup();
        signB = addToggleButton(p4, signGroup, "signed", true);
        unsignB = addToggleButton(p4, signGroup, "unsigned", false);
        p.add(p4);
        groups.addElement(signGroup);

        JPanel p5 = new JPanel();
        ButtonGroup endianGroup = new ButtonGroup();
        litB = addToggleButton(p5, endianGroup, "little endian", false);
        bigB = addToggleButton(p5, endianGroup, "big endian", true);
        p.add(p5);
        groups.addElement(endianGroup);

        JPanel p6 = new JPanel();
        //p6.setBorder(BorderFactory.createTitledBorder("声道"));
        ButtonGroup channelsGroup = new ButtonGroup();
        monoB = addToggleButton(p6, channelsGroup, "单声道", false);
        sterB = addToggleButton(p6, channelsGroup, "双声道", true);
        p.add(p6);
        groups.addElement(channelsGroup);
        
        getContentPane().add(p);
        getContentPane().add(okP,BorderLayout.SOUTH);
        
       	setTitle("格式设置");
		setSize(300,400);
		//setVisible(true);
		
		//窗口打开后在屏幕中央显示
 		int ScreenWidth=getToolkit().getScreenSize().width;
		int ScreenHeight=getToolkit().getScreenSize().height;
		setLocation((ScreenWidth-getWidth())/2,(ScreenHeight-getHeight())/2);
    }
  
    private JToggleButton addToggleButton(JPanel p, ButtonGroup g, 
                                 String name, boolean state) 
    {
    	JToggleButton b = new JToggleButton(name, state);
        p.add(b);
        g.add(b);
        return b;
    }

    public AudioFormat getFormat() 
    {

        Vector v = new Vector(groups.size());
        for (int i = 0; i < groups.size(); i++) 
        {
            ButtonGroup g = (ButtonGroup) groups.get(i);
            for (Enumeration e = g.getElements();e.hasMoreElements();) 
            {
                    AbstractButton b = (AbstractButton) e.nextElement();
                    if (b.isSelected()) 
                    {
                        v.add(b.getText());
                        break;
                    }
            }
        }

        AudioFormat.Encoding encoding = AudioFormat.Encoding.ULAW;
        String encString = (String) v.get(0);
        float rate = Float.valueOf((String) v.get(1)).floatValue();
        int sampleSize = Integer.valueOf((String) v.get(2)).intValue();
        String signedString = (String) v.get(3);
        boolean bigEndian = ((String) v.get(4)).startsWith("big");
        int channels = ((String) v.get(5)).equals("mono") ? 1 : 2;

        if (encString.equals("linear")) 
        {
            if (signedString.equals("signed")) 
            {
                encoding = AudioFormat.Encoding.PCM_SIGNED;
            }
            else 
            {
                encoding = AudioFormat.Encoding.PCM_UNSIGNED;
            }
        }
        else if (encString.equals("alaw")) 
        {
            encoding = AudioFormat.Encoding.ALAW;
        }
        return new AudioFormat(encoding, rate, sampleSize, 
                          channels, (sampleSize/8)*channels, rate, bigEndian);
    }

    public void setFormat(AudioFormat format) 
    {
        AudioFormat.Encoding type = format.getEncoding();
        if (type == AudioFormat.Encoding.ULAW) 
        {
            ulawB.doClick();
        } 
        else if (type == AudioFormat.Encoding.ALAW) 
        {
            alawB.doClick();
        } 
        else if (type == AudioFormat.Encoding.PCM_SIGNED) 
        {
            linrB.doClick(); signB.doClick(); 
        } 
        else if (type == AudioFormat.Encoding.PCM_UNSIGNED) 
        {
            linrB.doClick(); unsignB.doClick(); 
        }
        float rate = format.getFrameRate();
        if (rate == 8000) 
        {
            rate8B.doClick();
        } 
        else if (rate == 11025) 
        {
            rate11B.doClick();
        } 
        else if (rate == 16000) 
        {
            rate16B.doClick();
        } 
        else if (rate == 22050) 
        {
            rate22B.doClick();
        } 
        else if (rate == 44100) 
        {
            rate44B.doClick();
        }
        switch (format.getSampleSizeInBits()) 
        {
            case 8  : size8B.doClick(); break;
            case 16 : size16B.doClick(); break;
        }
        if (format.isBigEndian()) 
        {
            bigB.doClick(); 
        } 
        else 
        { 
            litB.doClick();
        }
        if (format.getChannels() == 1) 
        {
            monoB.doClick(); 
        } 
        else 
        { 
            sterB.doClick();
        }
    }
    
	public void actionPerformed(ActionEvent e)
    {
    	if(e.getSource().equals(okB))
    	{
    		setVisible(false);
    	}
    }
    
}

⌨️ 快捷键说明

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