Motion detection system in java : alert when any one pass before system camera
Description : This is a small example for security system in java which send alert through mail and sound while any trespassers pass before your camera connected to system (computer). The program is developed in java media framework. You need jmf.jar and mds.jar to run that code. For sending mail using java mail service application you need to download mail.jar file. The project consist of only 3 packages. Only you have to do is to create a java application in eclipse. copy and paste the following code to your project. compile it and run. Make sure you had added all the jar files to your project. Create a javasecurityalert wave file. Please provide your feed back through comments. Please rate the post.MainFrame.java
package com.mds.frames;
import java.awt.Container;
import java.awt.Image;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.io.File;
import javax.swing.JButton;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import com.mds.serv.AePlayWave;
import com.mds.serv.AlarmSound;
import com.mds.serv.ImageCompare;
import com.mds.serv.MDSMailer;
import com.mds.serv.SwingCapture;
public class MainFrame extends JFrame implements Runnable {
private static final long serialVersionUID = 1L;
private java.awt.Container c = null;
private com.mds.serv.SwingCapture sc = null;
private JPanel videoPanel = null;
private Image refImg = null;
private Image currentImg = null;
private File saveImgDir = null;
private ImageCompare imc = null;
private AlarmSound as = null;
private static boolean alarm = true;
private AePlayWave playWave = null;
private Thread t2 = null;
private Thread t1 = null;
private JButton captureButton = null;
private static int num = 0;
private File saveCaptureDir = null;
private Thread t3 = null;
private JButton imgSet = null;
private JButton start = null;
private JFileChooser jf = null;
private Thread mainThread = null;
private JButton stop = null;
/**
* This is the default constructor
*/
public MainFrame() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(900, 550);
this.setContentPane(getContainer());
this.setTitle("Motion Detection System");
this.addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e)
{
// playerclose();
System.exit(0);
}
});
}
private Container getContainer()
{
c = new Container();
imgSet = new JButton();
imgSet.setText("Set Reference Image");
imgSet.setBounds(680,180,200,25);
imgSet.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
videoPanel.setEnabled(true);
refImg = sc.imageCapture();
// sc.saveJPG(refImg, s)
}
});
c.add(imgSet);
jf = new JFileChooser();
start = new JButton("Start Detection");
start.setBounds(680,230,200,25);
start.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
saveImgDir = chooseSaveImgDir().getParentFile();
if(refImg!=null)
{
if(mainThread == null)
{
startNewThread();
// System.out.println("MainThread Started");
}
else if(mainThread.isAlive())
mainThread.resume();
}
else
showDialog("Set Reference Image");
}
});
c.add(start);
stop = new JButton("Stop");
stop.setBounds(680,280,200,25);
stop.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e)
{
try {
// if(mainThread == null)
if(mainThread.isAlive())
mainThread.suspend();
} catch(NullPointerException e1) {
showDialog("Detection Not Started Yet");
}
}
});
c.add(stop);
sc = new SwingCapture();
videoPanel = sc.getPlayerPanel();
videoPanel.setEnabled(false);
c.add(videoPanel);
playWave = new AePlayWave("alarm.wav");
t2 = new Thread(playWave);
try {
Thread.sleep(10000);
// refImg = sc.imageCapture();
// sc.saveJPG(currentImg, "D:\\Backups\\Saved\\img.jpg");
// sc.saveJPG(refImg, "c:\\RefImg.jpg");
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
captureButton = new JButton();
captureButton.setText("Capture Frame");
captureButton.setBounds(680,330,200,25);
captureButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e)
{
saveCaptureDir = chooseSaveImgDir();
System.out.println(saveCaptureDir.getAbsolutePath()+saveCaptureDir.getName());
// if(!saveCaptureDir.exists())
// saveCaptureDir.mkdirs();
SwingCapture.saveJPG(sc.imageCapture(),saveCaptureDir.getAbsolutePath());
num++;
}
});
c.add(captureButton);
return c;
}
private void startNewThread()
{
mainThread = new Thread(this);
mainThread.start();
}
private void showDialog(String message)
{
JOptionPane.showMessageDialog(this, message);
}
private File chooseSaveImgDir()
{
File file = null;
if(jf.showSaveDialog(this)==JFileChooser.APPROVE_OPTION)
{
file = jf.getSelectedFile();
// System.out.println(saveImgDir.getName());
}
return file;
}
@Override
public void run() {
// TODO Auto-generated method stub
int i =0;
// saveImgDir = new File("D:\\Backups\\Saved");
if(saveImgDir==null)
{
chooseSaveImgDir();
}
// if(!saveImgDir.exists())
// saveImgDir.mkdirs();
while(true)
{
try {
// Thread.sleep(250);
currentImg = sc.imageCapture();
imc = new ImageCompare(refImg,currentImg);
// t3 = new Thread(imc);
// t3.run();
if(!imc.compare())
{
System.out.println("hi");
t2.run();
SwingCapture.saveJPG(currentImg, saveImgDir+"\\img"+i+".jpg");
MDSMailer m = new MDSMailer(saveImgDir+"\\img"+i+".jpg");
t3 = new Thread(m);
t3.start();
refImg = currentImg;
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
i++;
}
}
public static void main(String[] args) {
MainFrame m = new MainFrame();
m.setVisible(true);
// Thread t = new Thread(m);
// t.start();
}
}
-------------------------------------
LoginFrame.java
package com.mds.frames;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JFrame;
import javax.swing.JLabel;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JTextField;
import javax.swing.JPasswordField;
import javax.swing.JButton;
public class LoginFrame extends JFrame {
private static final long serialVersionUID = 1L;
private JPanel jContentPane = null;
private JLabel NameLabel = null;
private JLabel PassLabel = null;
private JTextField NameTextField = null;
private JPasswordField PasswordField = null;
private JButton LoginButton = null;
private JButton ClearButton = null;
/**
* This is the default constructor
*/
public LoginFrame() {
super();
initialize();
}
/**
* This method initializes this
*
* @return void
*/
private void initialize() {
this.setSize(500, 400);
this.setContentPane(getJContentPane());
this.setTitle("Login");
}
/**
* This method initializes jContentPane
*
* @return javax.swing.JPanel
*/
private JPanel getJContentPane() {
if (jContentPane == null) {
PassLabel = new JLabel();
PassLabel.setBounds(new Rectangle(75, 170, 100, 30));
PassLabel.setText("Password : ");
NameLabel = new JLabel();
NameLabel.setBounds(new Rectangle(75, 120, 100, 30));
NameLabel.setText("Name : ");
jContentPane = new JPanel();
jContentPane.setLayout(null);
jContentPane.add(NameLabel, null);
jContentPane.add(PassLabel, null);
jContentPane.add(getNameTextField(), null);
jContentPane.add(getPasswordField(), null);
jContentPane.add(getLoginButton(), null);
jContentPane.add(getClearButton(), null);
}
return jContentPane;
}
/**
* This method initializes NameTextField
*
* @return javax.swing.JTextField
*/
private JTextField getNameTextField() {
if (NameTextField == null) {
NameTextField = new JTextField();
NameTextField.setBounds(new Rectangle(225, 120, 180, 30));
}
return NameTextField;
}
/**
* This method initializes PasswordField
*
* @return javax.swing.JPasswordField
*/
private JPasswordField getPasswordField() {
if (PasswordField == null) {
PasswordField = new JPasswordField();
PasswordField.setBounds(new Rectangle(225, 170, 180, 30));
}
return PasswordField;
}
/**
* This method initializes LoginButton
*
* @return javax.swing.JButton
*/
private JButton getLoginButton() {
if (LoginButton == null) {
LoginButton = new JButton();
LoginButton.setBounds(new Rectangle(140, 230, 80, 25));
LoginButton.setText("Login");
LoginButton.addActionListener(new ActionListener () {
public void actionPerformed(ActionEvent e) {
if(NameTextField.getText().compareTo("admin")==0)
{
// System.out.println("clicked");
if(String.valueOf(PasswordField.getPassword()).equals("mds"))
{
MainFrame m = new MainFrame();
// m.setBounds(0,0,900,600);
m.setVisible(true);
closeWindow();
}
else
showMessageDialog("Invalid Username or Password");
}
}
});
}
return LoginButton;
}
private void showMessageDialog(String message)
{
JOptionPane.showMessageDialog(this, message);
}
private void closeWindow()
{
setVisible(false);
dispose();
}
/**
* This method initializes ClearButton
*
* @return javax.swing.JButton
*/
private JButton getClearButton() {
if (ClearButton == null) {
ClearButton = new JButton();
ClearButton.setBounds(new Rectangle(240, 230, 80, 25));
ClearButton.setText("Clear");
ClearButton.addActionListener(new ActionListener () {
public void actionPerformed(ActionEvent e) {
NameTextField.setText("");
PasswordField.setText("");
}
});
}
return ClearButton;
}
public static void main(String[] args) {
LoginFrame l = new LoginFrame();
l.setVisible(true);
}}
-------------------
AePlayWave
.java
package com.mds.serv;
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;
public class AePlayWave extends Thread {
private String filename;
private Position curPosition;
private final int EXTERNAL_BUFFER_SIZE = 524288; // 128Kb
enum Position {
LEFT, RIGHT, NORMAL
};
public AePlayWave(String wavfile) {
filename = wavfile;
curPosition = Position.NORMAL;
}
public AePlayWave(String wavfile, Position p) {
filename = wavfile;
curPosition = p;
}
@Override
public void run() {
File soundFile = new File(filename);
if (!soundFile.exists()) {
System.err.println("Wave file not found File not found exception in java: " + filename);
return;
}
AudioInputStream audioInputStream = null;
try {
audioInputStream = AudioSystem.getAudioInputStream(soundFile);
} catch (UnsupportedAudioFileException e1) {
e1.printStackTrace();
return;
} catch (IOException e1) {
e1.printStackTrace();
return;
}
AudioFormat format = audioInputStream.getFormat();
SourceDataLine auline = null;
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
try {
auline = (SourceDataLine) AudioSystem.getLine(info);
auline.open(format);
} catch (LineUnavailableException e) {
e.printStackTrace();
return;
} catch (Exception e) {
e.printStackTrace();
return;
}
if (auline.isControlSupported(FloatControl.Type.PAN)) {
FloatControl pan = (FloatControl) auline
.getControl(FloatControl.Type.PAN);
if (curPosition == Position.RIGHT)
pan.setValue(1.0f);
else if (curPosition == Position.LEFT)
pan.setValue(-1.0f);
}
auline.start();
int nBytesRead = 0;
byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];
try {
while (nBytesRead != -1) {
nBytesRead = audioInputStream.read(abData, 0, abData.length);
if (nBytesRead >= 0)
auline.write(abData, 0, nBytesRead);
}
} catch (IOException e) {
e.printStackTrace();
return;
} finally {
auline.drain();
auline.close();
}
}
public static void main(String[] args) {
new AePlayWave("alarm.wav").start();
}
}
------------------------------------
Alarmsound.java
package com.mds.serv;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
public class AlarmSound implements Runnable {
int hz=200;
int msecs=200;
int volume=20;
boolean addHarmonic=true;
/** Generates a tone.
@param hz Base frequency (neglecting harmonic) of the tone in cycles per second
@param msecs The number of milliseconds to play the tone.
@param volume Volume, form 0 (mute) to 100 (max).
@param addHarmonic Whether to add an harmonic, one octave up. */
public void generateTone()
throws LineUnavailableException {
float frequency = 44100;
byte[] buf;
AudioFormat af;
if (addHarmonic) {
buf = new byte[2];
af = new AudioFormat(frequency,8,2,true,false);
} else {
buf = new byte[1];
af = new AudioFormat(frequency,8,1,true,false);
}
SourceDataLine sdl = AudioSystem.getSourceDataLine(af);
sdl = AudioSystem.getSourceDataLine(af);
sdl.open(af);
sdl.start();
for(int i=0; i<msecs*frequency/1000; i++){
double angle = i/(frequency/hz)*2.0*Math.PI;
buf[0]=(byte)(Math.sin(angle)*volume);
if(addHarmonic) {
double angle2 = (i)/(frequency/hz)*2.0*Math.PI;
buf[1]=(byte)(Math.sin(2*angle2)*volume*0.6);
sdl.write(buf,0,2);
} else {
sdl.write(buf,0,1);
}
}
sdl.drain();
sdl.stop();
sdl.close();
}
public static void main(String[] args) {
AlarmSound as = new AlarmSound();
try {
as.generateTone();
} catch (LineUnavailableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
@Override
public void run() {
// TODO Auto-generated method stub
try {
generateTone();
} catch (LineUnavailableException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
--------------------------------
ImageCompare.java
package com.mds.serv;
import javax.swing.*;
import java.io.*;
//import java.util.*;
import java.awt.*;
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;
public class ImageCompare{
protected BufferedImage img1 = null;
protected BufferedImage img2 = null;
protected BufferedImage imgc = null;
protected int comparex = 0;
protected int comparey = 0;
protected int factorA = 0;
protected int factorD = 10;
protected File saveImgDir = null;
protected boolean match = false;
protected static int i=0;
protected int debugMode = 0; // 1: textual indication of change, 2: difference of factors
/* create a runable demo thing. */
public static void main(String[] args) {
// Create a compare object specifying the 2 images for comparison.
ImageCompare ic = new ImageCompare("c:\\test1.jpg", "c:\\test2.jpg");
// Set the comparison parameters.
// (num vertical regions, num horizontal regions, sensitivity, stabilizer)
ic.setParameters(8, 6, 5, 10);
// Display some indication of the differences in the image.
ic.setDebugMode(2);
// Compare.
ic.compare();
// Display if these images are considered a match according to our parameters.
System.out.println("Match: " + ic.match());
// If its not a match then write a file to show changed regions.
if (!ic.match()) {
saveJPG(ic.getChangeIndicator(), "c:\\changes.jpg");
}
}
// constructor 1. use filenames
public ImageCompare(String file1, String file2) {
this(loadJPG(file1), loadJPG(file2));
}
// constructor 2. use awt images.
public ImageCompare(Image img1, Image img2) {
this(imageToBufferedImage(img1), imageToBufferedImage(img2));
autoSetParameters();
}
// constructor 3. use buffered images. all roads lead to the same place. this place.
public ImageCompare(BufferedImage img1, BufferedImage img2) {
this.img1 = img1;
this.img2 = img2;
autoSetParameters();
}
// like this to perhaps be upgraded to something more heuristic in the future.
protected void autoSetParameters() {
comparex = 10;
comparey = 10;
factorA = 10;
factorD = 10;
}
// set the parameters for use during change detection.
public void setParameters(int x, int y, int factorA, int factorD) {
this.comparex = x;
this.comparey = y;
this.factorA = factorA;
this.factorD = factorD;
}
// want to see some stuff in the console as the comparison is happening?
public void setDebugMode(int m) {
this.debugMode = m;
}
// compare the two images in this object.
public boolean compare() {
// setup change display image
imgc = imageToBufferedImage(img2);
Graphics2D gc = imgc.createGraphics();
gc.setColor(Color.RED);
// convert to gray images.
img1 = imageToBufferedImage(GrayFilter.createDisabledImage(img1));
img2 = imageToBufferedImage(GrayFilter.createDisabledImage(img2));
// how big are each section
int blocksx = (img1.getWidth() / comparex);
int blocksy = (img1.getHeight() / comparey);
// set to a match by default, if a change is found then flag non-match
this.match = true;
// loop through whole image and compare individual blocks of images
for (int y = 0; y < comparey; y++) {
if (debugMode > 0) System.out.print("|");
for (int x = 0; x < comparex; x++) {
int b1 = getAverageBrightness(img1.getSubimage(x*blocksx, y*blocksy, blocksx - 1, blocksy - 1));
int b2 = getAverageBrightness(img2.getSubimage(x*blocksx, y*blocksy, blocksx - 1, blocksy - 1));
int diff = Math.abs(b1 - b2);
if (diff > factorA) { // the difference in a certain region has passed the threshold value of factorA
// draw an indicator on the change image to show where change was detected.
gc.drawRect(x*blocksx, y*blocksy, blocksx - 1, blocksy - 1);
this.match = false;
}
if (debugMode == 1) System.out.print((diff > factorA ? "X" : " "));
if (debugMode == 2) System.out.print(diff + (x < comparex - 1 ? "," : ""));
}
if (debugMode > 0) System.out.println("|");
}
return this.match;
}
// return the image that indicates the regions where changes where detected.
public BufferedImage getChangeIndicator() {
return imgc;
}
// returns a value specifying some kind of average brightness in the image.
protected int getAverageBrightness(BufferedImage img) {
Raster r = img.getData();
int total = 0;
for (int y = 0; y < r.getHeight(); y++) {
for (int x = 0; x < r.getWidth(); x++) {
total += r.getSample(r.getMinX() + x, r.getMinY() + y, 0);
}
}
return (total / ((r.getWidth()/factorD)*(r.getHeight()/factorD)));
}
// returns true if image pair is considered a match
public boolean match() {
return this.match;
}
// buffered images are just better.
protected static BufferedImage imageToBufferedImage(Image img) {
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bi.createGraphics();
g2.drawImage(img, null, null);
return bi;
}
// write a buffered image to a jpeg file.
protected static void saveJPG(Image img, String filename) {
BufferedImage bi = imageToBufferedImage(img);
FileOutputStream out = null;
try {
out = new FileOutputStream(filename);
} catch (java.io.FileNotFoundException io) {
System.out.println("File Not Found");
}
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(0.8f,false);
encoder.setJPEGEncodeParam(param);
try {
encoder.encode(bi);
out.close();
} catch (java.io.IOException io) {
System.out.println("IOException");
}
}
// read a jpeg file into a buffered image
protected static Image loadJPG(String filename) {
FileInputStream in = null;
try {
in = new FileInputStream(filename);
} catch (java.io.FileNotFoundException io) {
System.out.println("File Not Found");
}
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
BufferedImage bi = null;
try {
bi = decoder.decodeAsBufferedImage();
in.close();
} catch (java.io.IOException io) {
System.out.println("IOException");
}
return bi;
}
// @Override
// public void run() {
// // TODO Auto-generated method stub
// saveImgDir = new File("D:\\Backups\\Saved");
// if(!saveImgDir.exists())
// saveImgDir.mkdirs();
// this.compare();
// if(!this.match)
// {
// saveJPG(this.img2, "D:\\Backups\\Saved\\img"+i+".jpg");
// i++;
// }
// }
}
----------------------------
MDSMailer.java
package com.mds.serv;
import java.security.Security;
import java.util.Properties;
import javax.activation.DataHandler;
import javax.activation.DataSource;
import javax.activation.FileDataSource;
import javax.mail.Message;
import javax.mail.Multipart;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeBodyPart;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
public class MDSMailer extends Thread {
private String recipient="mdsmailer@gmail.com";
private String from="mdsmailer@gmail.com";
// private String subject="MDS PIC";
// private String msg;
private String fileAttachment = "C:\\test1.jpg";
// public void send( String subject, String msg, String recipient) throws Exception
// {
// this.recipient=recipient;
// this.msg=msg;
// this.subject=subject;
// start();
// }
public MDSMailer(String file)
{
this.fileAttachment = file;
}
@Override
public void run(){
Security.addProvider(new com.sun.net.ssl.internal.ssl.Provider());
Properties props = new Properties();
props.put("mail.smtp.host", "smtp.gmail.com");
props.put("mail.smtp.auth", "true");
props.put("mail.smtp.quitwait", "false");
props.put("mail.debug", "true");
props.put("mail.smtp.port", "465");
props.put("mail.smtp.socketFactory.port", "465");
props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.put("mail.smtp.socketFactory.fallback", "false");
Session session = Session.getInstance(props,
new javax.mail.Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication("mdsmailer@gmail.com", "mdsproject");
}
});
try {
// Define message
MimeMessage message =
new MimeMessage(session);
message.setFrom(
new InternetAddress(from));
message.addRecipient(
Message.RecipientType.TO,
new InternetAddress(recipient));
message.setSubject(
"MDS Picture Attachment");
// create the message part
MimeBodyPart messageBodyPart =
new MimeBodyPart();
//fill message
messageBodyPart.setText("Hi");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
// Part two is attachment
messageBodyPart = new MimeBodyPart();
DataSource source =
new FileDataSource(fileAttachment);
messageBodyPart.setDataHandler(
new DataHandler(source));
messageBodyPart.setFileName(fileAttachment);
multipart.addBodyPart(messageBodyPart);
// Put parts in message
message.setContent(multipart);
// Send message
Transport.send(message);
} catch(Exception e){}
finally{}
}
public static void main(String[] args) {
MDSMailer r = new MDSMailer("C:\\test1.jpg");
Thread t = new Thread(r);
r.start();
}
}
----------------
Run.java
+Nidhin Sasankan
package com.mds.serv;
import java.awt.Component;
import javax.media.Player;
public class Run {
private SwingCapture sc = null;
private Player p = null;
public Run()
{
sc = new SwingCapture();
}
public void grabFrame()
{
p = sc.getPlayer();
// sc.
}
public static void main(String[] args) {
SwingCapture sc = new SwingCapture();
Player p = sc.getPlayer();
Component c = null;
try {
Thread.sleep(10000);
c = p.getVisualComponent();
sc.imageCapture();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
----------------------
SwingCapture.java
package com.mds.serv;
import javax.swing.*;
//import javax.swing.event.*;
import java.io.*;
import javax.media.*;
import javax.media.format.*;
import javax.media.util.*;
import javax.media.control.*;
//import javax.media.protocol.*;
//import java.util.*;
import java.awt.*;
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;
public class SwingCapture
{
public static Player p = null;
public CaptureDeviceInfo di = null;
public MediaLocator ml = null;
public JButton capture = null;
public Buffer buf = null;
public Image img = null;
public VideoFormat vf = null;
public BufferToImage btoi = null;
public JPanel panel = null;
public JPanel getPlayerPanel()
{
if(panel == null)
{
panel = new JPanel();
panel.setBounds(10, 10, 400, 300);
panel.setLayout(null);
Component comp;
p = getPlayer();
if ((comp = p.getVisualComponent()) != null)
{
// comp.setBounds(120, 100, 400, 300);
comp.setSize(400,300);
panel.add(comp);
}
}
return panel;
}
public Player getPlayer()
{
Player player = null;
String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
di = CaptureDeviceManager.getDevice(str2);
ml = di.getLocator();
try {
player = Manager.createRealizedPlayer(ml);
player.start();
} catch (NoPlayerException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (CannotRealizeException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return player;
}
public static void playerclose()
{
p.close();
p.deallocate();
}
public Image imageCapture()
{
// Grab a frame
FrameGrabbingControl fgc = (FrameGrabbingControl)
p.getControl("javax.media.control.FrameGrabbingControl");
buf = fgc.grabFrame();
// Convert it to an image
btoi = new BufferToImage((VideoFormat)buf.getFormat());
img = btoi.createImage(buf);
return img;
}
public static void saveJPG(Image img, String s)
{
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bi.createGraphics();
g2.drawImage(img, null, null);
FileOutputStream out = null;
try
{
out = new FileOutputStream(s);
}
catch (java.io.FileNotFoundException io)
{
System.out.println("File Not Found");
}
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(0.5f,false);
encoder.setJPEGEncodeParam(param);
try
{
encoder.encode(bi);
out.close();
}
catch (java.io.IOException io)
{
System.out.println("IOException");
}
}
}
----------------------
AttachedMail.java
package com.mds.tryout;
import java.util.Properties;
import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
public class AttachedMail {
public static void main (String args[])
throws Exception {
String host = args[0];
String from = args[1];
String to = args[2];
String fileAttachment = args[3];
// Get system properties
Properties props = System.getProperties();
// Setup mail server
props.put("mail.smtp.host", host);
// Get session
Session session =
Session.getInstance(props, null);
// Define message
MimeMessage message =
new MimeMessage(session);
message.setFrom(
new InternetAddress(from));
message.addRecipient(
Message.RecipientType.TO,
new InternetAddress(to));
message.setSubject(
"Hello JavaMail Attachment");
// create the message part
MimeBodyPart messageBodyPart =
new MimeBodyPart();
//fill message
messageBodyPart.setText("Hi");
Multipart multipart = new MimeMultipart();
multipart.addBodyPart(messageBodyPart);
// Part two is attachment
messageBodyPart = new MimeBodyPart();
DataSource source =
new FileDataSource(fileAttachment);
messageBodyPart.setDataHandler(
new DataHandler(source));
messageBodyPart.setFileName(fileAttachment);
multipart.addBodyPart(messageBodyPart);
// Put parts in message
message.setContent(multipart);
// Send the message
Transport.send( message );
}
}
-----------------------
Camagain.java
package com.mds.tryout;
import javax.swing.*;
import java.io.*;
import javax.media.*;
import javax.media.format.*;
import javax.media.util.*;
import javax.media.control.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import com.sun.image.codec.jpeg.*;
public class Camagain extends Panel implements ActionListener
{
public static Player player;
public CaptureDeviceInfo DI;
public MediaLocator ML;
public JButton CAPTURE;
public Buffer BUF;
public Image img;
public VideoFormat VF;
public BufferToImage BtoI;
public ImagePanel imgpanel;
public Camagain()
{
setLayout(new BorderLayout());
setSize(320,550);
imgpanel = new ImagePanel();
CAPTURE = new JButton("Capture");
CAPTURE.addActionListener(this);
String str1 = "vfw:Logitech USB Video Camera:0";
String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
DI = CaptureDeviceManager.getDevice(str2);
ML = new MediaLocator("vfw://0");
try
{
player = Manager.createRealizedPlayer(ML);
player.start();
Component comp;
if( (comp = player.getVisualComponent()) != null )
{
add(comp,BorderLayout.NORTH);
}
add(CAPTURE,BorderLayout.CENTER);
add(imgpanel,BorderLayout.SOUTH);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
Frame f = new Frame("SwingCapture");
SwingCapture cf = new SwingCapture();
f.addWindowListener(new WindowAdapter()
{
@Override
public void windowClosing(WindowEvent e)
{
playerclose();
System.exit(0);
}
});
f.add("Center",cf);
f.pack();
f.setSize(new Dimension(320,550));
f.setVisible(true);
}
public static void playerclose()
{
player.close();
player.deallocate();
}
public void actionPerformed(ActionEvent e)
{
JComponent c = (JComponent) e.getSource();
if(c == CAPTURE)
{
// Grab a frame
FrameGrabbingControl fgc = (FrameGrabbingControl)
player.getControl("javax.media.control.FrameGrabbingControl");
BUF = fgc.grabFrame();
// Convert it to an image
BtoI = new BufferToImage((VideoFormat)BUF.getFormat());
img = BtoI.createImage(BUF);
// show the image
imgpanel.setImage(img);
// save image
saveJPG(img,"c:\\test.jpg");
}
}
class ImagePanel extends Panel
{
public Image myimg = null;
public ImagePanel()
{
setLayout(null);
setSize(320,240);
}
public void setImage(Image img)
{
this.myimg = img;
//repaint();
}
@Override
public void paint(Graphics g)
{
g.drawImage(myimg, 0, 0, this);
}
}
public static void saveJPG(Image img, String s)
{
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bi.createGraphics();
g2.drawImage(img, null, null);
FileOutputStream out = null;
try
{
out = new FileOutputStream(s);
}
catch (java.io.FileNotFoundException io)
{
System.out.println("File Not Found");
}
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(0.5f,false);
encoder.setJPEGEncodeParam(param);
try
{
encoder.encode(bi);
out.close();
}
catch (java.io.IOException io)
{
System.out.println("IOException");
}
}
}
------------------------------
MainFrame.java
package com.mds.tryout;
import javax.swing.*;
import java.io.*;
import java.awt.*;
import java.awt.image.*;
import com.sun.image.codec.jpeg.*;
public class ImageCompare {
protected BufferedImage img1 = null;
protected BufferedImage img2 = null;
protected BufferedImage imgc = null;
protected int comparex = 0;
protected int comparey = 0;
protected int factorA = 0;
protected int factorD = 10;
protected boolean match = false;
protected int debugMode = 0; // 1: textual indication of change, 2: difference of factors
/* create a runable demo thing. */
public static void main(String[] args) {
// Create a compare object specifying the 2 images for comparison.
ImageCompare ic = new ImageCompare("c:\\test1.jpg", "c:\\test2.jpg");
// Set the comparison parameters.
// (num vertical regions, num horizontal regions, sensitivity, stabilizer)
ic.setParameters(8, 6, 5, 10);
// Display some indication of the differences in the image.
ic.setDebugMode(2);
// Compare.
ic.compare();
// Display if these images are considered a match according to our parameters.
System.out.println("Match: " + ic.match());
// If its not a match then write a file to show changed regions.
if (!ic.match()) {
saveJPG(ic.getChangeIndicator(), "c:\\changes.jpg");
}
}
// constructor 1. use filenames
public ImageCompare(String file1, String file2) {
this(loadJPG(file1), loadJPG(file2));
}
// constructor 2. use awt images.
public ImageCompare(Image img1, Image img2) {
this(imageToBufferedImage(img1), imageToBufferedImage(img2));
}
// constructor 3. use buffered images. all roads lead to the same place. this place.
public ImageCompare(BufferedImage img1, BufferedImage img2) {
this.img1 = img1;
this.img2 = img2;
autoSetParameters();
}
// like this to perhaps be upgraded to something more heuristic in the future.
protected void autoSetParameters() {
comparex = 10;
comparey = 10;
factorA = 10;
factorD = 10;
}
// set the parameters for use during change detection.
public void setParameters(int x, int y, int factorA, int factorD) {
this.comparex = x;
this.comparey = y;
this.factorA = factorA;
this.factorD = factorD;
}
// want to see some stuff in the console as the comparison is happening?
public void setDebugMode(int m) {
this.debugMode = m;
}
// compare the two images in this object.
public void compare() {
// setup change display image
imgc = imageToBufferedImage(img2);
Graphics2D gc = imgc.createGraphics();
gc.setColor(Color.RED);
// convert to gray images.
img1 = imageToBufferedImage(GrayFilter.createDisabledImage(img1));
img2 = imageToBufferedImage(GrayFilter.createDisabledImage(img2));
// how big are each section
int blocksx = (img1.getWidth() / comparex);
int blocksy = (img1.getHeight() / comparey);
// set to a match by default, if a change is found then flag non-match
this.match = true;
// loop through whole image and compare individual blocks of images
for (int y = 0; y < comparey; y++) {
if (debugMode > 0) System.out.print("|");
for (int x = 0; x < comparex; x++) {
int b1 = getAverageBrightness(img1.getSubimage(x*blocksx, y*blocksy, blocksx - 1, blocksy - 1));
int b2 = getAverageBrightness(img2.getSubimage(x*blocksx, y*blocksy, blocksx - 1, blocksy - 1));
int diff = Math.abs(b1 - b2);
if (diff > factorA) { // the difference in a certain region has passed the threshold value of factorA
// draw an indicator on the change image to show where change was detected.
gc.drawRect(x*blocksx, y*blocksy, blocksx - 1, blocksy - 1);
this.match = false;
}
if (debugMode == 1) System.out.print((diff > factorA ? "X" : " "));
if (debugMode == 2) System.out.print(diff + (x < comparex - 1 ? "," : ""));
}
if (debugMode > 0) System.out.println("|");
}
}
// return the image that indicates the regions where changes where detected.
public BufferedImage getChangeIndicator() {
return imgc;
}
// returns a value specifying some kind of average brightness in the image.
protected int getAverageBrightness(BufferedImage img) {
Raster r = img.getData();
int total = 0;
for (int y = 0; y < r.getHeight(); y++) {
for (int x = 0; x < r.getWidth(); x++) {
total += r.getSample(r.getMinX() + x, r.getMinY() + y, 0);
}
}
return (total / ((r.getWidth()/factorD)*(r.getHeight()/factorD)));
}
// returns true if image pair is considered a match
public boolean match() {
return this.match;
}
// buffered images are just better.
protected static BufferedImage imageToBufferedImage(Image img) {
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bi.createGraphics();
g2.drawImage(img, null, null);
return bi;
}
// write a buffered image to a jpeg file.
protected static void saveJPG(Image img, String filename) {
BufferedImage bi = imageToBufferedImage(img);
FileOutputStream out = null;
try {
out = new FileOutputStream(filename);
} catch (java.io.FileNotFoundException io) {
System.out.println("File Not Found");
}
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(0.8f,false);
encoder.setJPEGEncodeParam(param);
try {
encoder.encode(bi);
out.close();
} catch (java.io.IOException io) {
System.out.println("IOException");
}
}
// read a jpeg file into a buffered image
protected static Image loadJPG(String filename) {
FileInputStream in = null;
try {
in = new FileInputStream(filename);
} catch (java.io.FileNotFoundException io) {
System.out.println("File Not Found");
}
JPEGImageDecoder decoder = JPEGCodec.createJPEGDecoder(in);
BufferedImage bi = null;
try {
bi = decoder.decodeAsBufferedImage();
in.close();
} catch (java.io.IOException io) {
System.out.println("IOException");
}
return bi;
}
}
-------------
SwingCapture.java
package com.mds.tryout;
import javax.swing.*;
import java.io.*;
import javax.media.*;
import javax.media.format.*;
import javax.media.util.*;
import javax.media.control.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import com.sun.image.codec.jpeg.*;
public class SwingCapture extends Panel implements ActionListener
{
public static Player player = null;
public CaptureDeviceInfo di = null;
public MediaLocator ml = null;
public JButton capture = null;
public Buffer buf = null;
public Image img = null;
public VideoFormat vf = null;
public BufferToImage btoi = null;
public ImagePanel imgpanel = null;
public SwingCapture()
{
setLayout(new BorderLayout());
setSize(320,550);
imgpanel = new ImagePanel();
capture = new JButton("Capture");
capture.addActionListener(this);
String str1 = "vfw:Logitech USB Video Camera:0";
String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
di = CaptureDeviceManager.getDevice(str2);
ml = di.getLocator();
try
{
player = Manager.createRealizedPlayer(ml);
player.start();
Component comp;
if ((comp = player.getVisualComponent()) != null)
{
add(comp,BorderLayout.NORTH);
}
add(capture,BorderLayout.CENTER);
add(imgpanel,BorderLayout.SOUTH);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
Frame f = new Frame("SwingCapture");
SwingCapture cf = new SwingCapture();
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
playerclose();
System.exit(0);}});
f.add("Center",cf);
f.pack();
f.setSize(new Dimension(320,550));
f.setVisible(true);
}
public static void playerclose()
{
player.close();
player.deallocate();
}
public void actionPerformed(ActionEvent e)
{
JComponent c = (JComponent) e.getSource();
if (c == capture)
{
// Grab a frame
FrameGrabbingControl fgc = (FrameGrabbingControl)
player.getControl("javax.media.control.FrameGrabbingControl");
buf = fgc.grabFrame();
// Convert it to an image
btoi = new BufferToImage((VideoFormat)buf.getFormat());
img = btoi.createImage(buf);
// show the image
imgpanel.setImage(img);
// save image
saveJPG(img,"c:\\test.jpg");
}
}
class ImagePanel extends Panel
{
public Image myimg = null;
public ImagePanel()
{
setLayout(null);
setSize(320,240);
}
public void setImage(Image img)
{
this.myimg = img;
repaint();
}
@Override
public void paint(Graphics g)
{
if (myimg != null)
{
g.drawImage(myimg, 0, 0, this);
}
}
}
public static void saveJPG(Image img, String s)
{
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bi.createGraphics();
g2.drawImage(img, null, null);
FileOutputStream out = null;
try
{
out = new FileOutputStream(s);
}
catch (java.io.FileNotFoundException io)
{
System.out.println("File Not Found");
}
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(0.5f,false);
encoder.setJPEGEncodeParam(param);
try
{
encoder.encode(bi);
out.close();
}
catch (java.io.IOException io)
{
System.out.println("IOException");
}
}
}
------------------
SwingCapture.java
package com.mds.tryout;
import javax.swing.*;
import java.io.*;
import javax.media.*;
import javax.media.format.*;
import javax.media.util.*;
import javax.media.control.*;
import java.awt.*;
import java.awt.image.*;
import java.awt.event.*;
import com.sun.image.codec.jpeg.*;
public class SwingCapture extends Panel implements ActionListener
{
public static Player player = null;
public CaptureDeviceInfo di = null;
public MediaLocator ml = null;
public JButton capture = null;
public Buffer buf = null;
public Image img = null;
public VideoFormat vf = null;
public BufferToImage btoi = null;
public ImagePanel imgpanel = null;
public SwingCapture()
{
setLayout(new BorderLayout());
setSize(320,550);
imgpanel = new ImagePanel();
capture = new JButton("Capture");
capture.addActionListener(this);
String str1 = "vfw:Logitech USB Video Camera:0";
String str2 = "vfw:Microsoft WDM Image Capture (Win32):0";
di = CaptureDeviceManager.getDevice(str2);
ml = di.getLocator();
try
{
player = Manager.createRealizedPlayer(ml);
player.start();
Component comp;
if ((comp = player.getVisualComponent()) != null)
{
add(comp,BorderLayout.NORTH);
}
add(capture,BorderLayout.CENTER);
add(imgpanel,BorderLayout.SOUTH);
}
catch (Exception e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
Frame f = new Frame("SwingCapture");
SwingCapture cf = new SwingCapture();
f.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
playerclose();
System.exit(0);}});
f.add("Center",cf);
f.pack();
f.setSize(new Dimension(320,550));
f.setVisible(true);
}
public static void playerclose()
{
player.close();
player.deallocate();
}
public void actionPerformed(ActionEvent e)
{
JComponent c = (JComponent) e.getSource();
if (c == capture)
{
// Grab a frame
FrameGrabbingControl fgc = (FrameGrabbingControl)
player.getControl("javax.media.control.FrameGrabbingControl");
buf = fgc.grabFrame();
// Convert it to an image
btoi = new BufferToImage((VideoFormat)buf.getFormat());
img = btoi.createImage(buf);
// show the image
imgpanel.setImage(img);
// save image
saveJPG(img,"c:\\test.jpg");
}
}
class ImagePanel extends Panel
{
public Image myimg = null;
public ImagePanel()
{
setLayout(null);
setSize(320,240);
}
public void setImage(Image img)
{
this.myimg = img;
repaint();
}
@Override
public void paint(Graphics g)
{
if (myimg != null)
{
g.drawImage(myimg, 0, 0, this);
}
}
}
public static void saveJPG(Image img, String s)
{
BufferedImage bi = new BufferedImage(img.getWidth(null), img.getHeight(null), BufferedImage.TYPE_INT_RGB);
Graphics2D g2 = bi.createGraphics();
g2.drawImage(img, null, null);
FileOutputStream out = null;
try
{
out = new FileOutputStream(s);
}
catch (java.io.FileNotFoundException io)
{
System.out.println("File Not Found");
}
JPEGImageEncoder encoder = JPEGCodec.createJPEGEncoder(out);
JPEGEncodeParam param = encoder.getDefaultJPEGEncodeParam(bi);
param.setQuality(0.5f,false);
encoder.setJPEGEncodeParam(param);
try
{
encoder.encode(bi);
out.close();
}
catch (java.io.IOException io)
{
System.out.println("IOException");
}
}
}
-----------------------
MainFrame.java
package com.mds.tryout;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.LineUnavailableException;
import java.awt.BorderLayout;
import java.awt.Toolkit;
import java.awt.Image;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JButton;
import javax.swing.JSlider;
import javax.swing.JCheckBox;
import javax.swing.SwingConstants;
import javax.swing.SwingUtilities;
import javax.swing.UIManager;
import javax.swing.border.TitledBorder;
import java.net.URL;
/**
Audio tone generator, using the Java sampled sound API.
@author vipin
@version 2014
*/
public class Tone extends JFrame {
static AudioFormat af;
static SourceDataLine sdl;
public Tone() {
super("To play sound file in java");
// Use current OS look and feel.
try {
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.updateComponentTreeUI(this);
} catch (Exception e) {
System.err.println("Internal Look And Feel Setting Error.");
System.err.println(e);
}
JPanel pMain=new JPanel(new BorderLayout());
final JSlider sTone=new JSlider(SwingConstants.VERTICAL,200,2000,441);
sTone.setPaintLabels(true);
sTone.setPaintTicks(true);
sTone.setMajorTickSpacing(200);
sTone.setMinorTickSpacing(100);
sTone.setToolTipText(
"Tone (in Hertz or cycles per second - middle C is 441 Hz)");
sTone.setBorder(new TitledBorder("Frequency"));
pMain.add(sTone,BorderLayout.CENTER);
final JSlider sDuration=new JSlider(SwingConstants.VERTICAL,0,2000,1000);
sDuration.setPaintLabels(true);
sDuration.setPaintTicks(true);
sDuration.setMajorTickSpacing(200);
sDuration.setMinorTickSpacing(100);
sDuration.setToolTipText("Duration in milliseconds");
sDuration.setBorder(new TitledBorder("Length"));
pMain.add(sDuration,BorderLayout.EAST);
final JSlider sVolume=new JSlider(SwingConstants.VERTICAL,0,100,20);
sVolume.setPaintLabels(true);
sVolume.setPaintTicks(true);
sVolume.setSnapToTicks(false);
sVolume.setMajorTickSpacing(20);
sVolume.setMinorTickSpacing(10);
sVolume.setToolTipText("Volume 0 - none, 100 - full");
sVolume.setBorder(new TitledBorder("Volume"));
pMain.add(sVolume,BorderLayout.WEST);
final JCheckBox cbHarmonic = new JCheckBox( "Add Harmonic", true );
cbHarmonic.setToolTipText("..else pure sine tone");
JButton bGenerate = new JButton("Generate Tone");
bGenerate.addActionListener( new ActionListener() {
public void actionPerformed(ActionEvent ae) {
try{
generateTone(sTone.getValue(),
sDuration.getValue(),
(int)(sVolume.getValue()*1.28),
cbHarmonic.isSelected());
}catch(LineUnavailableException lue){
System.out.println(lue);
}
}
} );
JPanel pNorth = new JPanel(new BorderLayout());
pNorth.add(bGenerate,BorderLayout.WEST);
pNorth.add( cbHarmonic, BorderLayout.EAST );
pMain.add(pNorth, BorderLayout.NORTH);
pMain.setBorder( new javax.swing.border.EmptyBorder(5,3,5,3) );
getContentPane().add(pMain);
pack();
setLocation(0,20);
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setLocationRelativeTo(null);
String address = "/image/tone32x32.png";
URL url = getClass().getResource(address);
if (url!=null) {
Image icon = Toolkit.getDefaultToolkit().getImage(url);
setIconImage(icon);
}
}
/** Generates a tone.
@param hz Base frequency (neglecting harmonic) of the tone in cycles per second
@param msecs The number of milliseconds to play the tone.
@param volume Volume, form 0 (mute) to 100 (max).
@param addHarmonic Whether to add an harmonic, one octave up. */
public static void generateTone(int hz,int msecs, int volume, boolean addHarmonic)
throws LineUnavailableException {
float frequency = 44100;
byte[] buf;
AudioFormat af;
if (addHarmonic) {
buf = new byte[2];
af = new AudioFormat(frequency,8,2,true,false);
} else {
buf = new byte[1];
af = new AudioFormat(frequency,8,1,true,false);
}
SourceDataLine sdl = AudioSystem.getSourceDataLine(af);
sdl = AudioSystem.getSourceDataLine(af);
sdl.open(af);
sdl.start();
for(int i=0; i<msecs*frequency/1000; i++){
double angle = i/(frequency/hz)*2.0*Math.PI;
buf[0]=(byte)(Math.sin(angle)*volume);
if(addHarmonic) {
double angle2 = (i)/(frequency/hz)*2.0*Math.PI;
buf[1]=(byte)(Math.sin(2*angle2)*volume*0.6);
sdl.write(buf,0,2);
} else {
sdl.write(buf,0,1);
}
}
sdl.drain();
sdl.stop();
sdl.close();
}
public static void main(String[] args){
Runnable r = new Runnable() {
public void run() {
Tone t = new Tone();
t.setVisible(true);
}
};
SwingUtilities.invokeLater(r);
}
}
----------------
AePlayWave.java
package com.mds.tryout;
import java.io.File;
import java.io.IOException;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.FloatControl;
import javax.sound.sampled.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
import javax.sound.sampled.UnsupportedAudioFileException;
public class AePlayWave implements Runnable {
private String filename;
private Position curPosition;
private final int EXTERNAL_BUFFER_SIZE = 524288; // 128Kb
enum Position {
LEFT, RIGHT, NORMAL
};
public AePlayWave(String wavfile) {
filename = wavfile;
curPosition = Position.NORMAL;
}
public AePlayWave(String wavfile, Position p) {
filename = wavfile;
curPosition = p;
}
public void run() {
File soundFile = new File(filename);
if (!soundFile.exists()) {
System.err.println("Wave file not found: " + filename);
return;
}
AudioInputStream audioInputStream = null;
try {
audioInputStream = AudioSystem.getAudioInputStream(soundFile);
} catch (UnsupportedAudioFileException e1) {
e1.printStackTrace();
return;
} catch (IOException e1) {
e1.printStackTrace();
return;
}
AudioFormat format = audioInputStream.getFormat();
SourceDataLine auline = null;
DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);
try {
auline = (SourceDataLine) AudioSystem.getLine(info);
auline.open(format);
} catch (LineUnavailableException e) {
e.printStackTrace();
return;
} catch (Exception e) {
e.printStackTrace();
return;
}
if (auline.isControlSupported(FloatControl.Type.PAN)) {
FloatControl pan = (FloatControl) auline
.getControl(FloatControl.Type.PAN);
if (curPosition == Position.RIGHT)
pan.setValue(1.0f);
else if (curPosition == Position.LEFT)
pan.setValue(-1.0f);
}
auline.start();
int nBytesRead = 0;
byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];
try {
while (nBytesRead != -1) {
nBytesRead = audioInputStream.read(abData, 0, abData.length);
if (nBytesRead >= 0)
auline.write(abData, 0, nBytesRead);
}
} catch (IOException e) {
e.printStackTrace();
return;
} finally {
auline.drain();
auline.close();
}
}
public static void main(String[] args) {
AePlayWave a = new AePlayWave("javasecurityalert.wav");
new Thread(a).start();
}
}
jar files : mds.jar, mail.jar and jmf.jar has to be downloaded. for playing sound a wave file : Here i used
javasecurityalert.wav
Please provide your feedback through comment and rate the post
http://javabelazy.blogspot.in/
No comments:
Post a Comment
Your feedback may help others !!!