📄 formatcontrols.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 + -