import java.awt.*;
import java.awt.event.*;

import javax.sound.sampled.*;
import javax.swing.*;

public class TschilpTschilp extends JApplet implements ActionListener {
	public void init() {
		getContentPane().setLayout(new BorderLayout());
		JButton tschilp = new JButton("Hier klicken!");
		tschilp.setFont(new Font("Dialog", Font.BOLD, 24));
		tschilp.addActionListener(this);
		getContentPane().add(tschilp);
	}

	public void actionPerformed(ActionEvent evt) {
		try {
			int sampleRate = 22050;
			AudioFormat audioformat =
				new AudioFormat(
					AudioFormat.Encoding.PCM_SIGNED,
					sampleRate,
					16,
					2,
					4,
					sampleRate,
					false);
			DataLine.Info datalineinfo =
				new DataLine.Info(SourceDataLine.class, audioformat);
			if (!AudioSystem.isLineSupported(datalineinfo)) {
				System.out.println(
					"Line matching " + datalineinfo + " is not supported.");
			} else {
				SourceDataLine sourcedataline =
					(SourceDataLine) AudioSystem.getLine(datalineinfo);
				sourcedataline.open(audioformat);
				sourcedataline.start();
				byte[] samples = new byte[1000];
				for (int s = 1; s < 10; s++) {
					for (int freq = 1000; freq < 2000; freq += s) {
						float size = ((float) sampleRate) / ((float) freq);
						float amplitude = 32000;
						int adr = 0;
						for (int i = 0; i < size; i++, adr += 4) {
							double sin =
								Math.sin(
									(double) i / (double) size * 2.0 * Math.PI);
							int sample = (int) (sin * amplitude);
							samples[adr + 0] = (byte) (sample);
							samples[adr + 1] = (byte) (sample >>> 8);
							samples[adr + 2] = (byte) (sample);
							samples[adr + 3] = (byte) (sample >>> 8);
						}
						sourcedataline.write(samples, 0, adr);
					}
				}
				sourcedataline.drain();
				sourcedataline.stop();
				sourcedataline.close();
			}
		} catch (LineUnavailableException e) {
			e.printStackTrace();
		}
	}
}
