# Sound: ByteArray soll zu Sound werden



## caraboides (4. Oktober 2005)

Hallo,

ich bin am verzweifeln google nun schon den Ganzen tag rum und finde nixs richtiges:

Ich habe ein ByteArray das ist bis zu 50 oder 100 MB (5-10h) gross. Da ist sound drin mit einer Sample rate von 1600 Hz wie bekomme ich das an die Lautsprecher?

Hab mir schon einen Wav header drauf gesetzt und ich kann es jetzt abspielen, aber dieser weg ist nich akzeptabel, da ich auch mal z.B. nur ab Stunde 6 bin 6,1 was hoeren will.

Wie kann ich nur Teile eines Clips abspielen? Bzw gleich das ByteArray von index 434-2342?

bisher mache ich es so:

```
AudioClip onceClip, loopClip;
public void play(){
		JFileChooser chooser = new JFileChooser();
		int returnVal = chooser.showOpenDialog(null);
		if(returnVal == JFileChooser.APPROVE_OPTION) {
			try{
			 File f = new File(chooser.getSelectedFile().getPath());	
			onceClip = Applet.newAudioClip(f.toURL());
			onceClip.play();
			}catch(Exception e){
				System.out.println(e);
			}
		}
	}
```
natuerlich habe ich das file auch schon als ByteArray nur das macht keine Musik ;-(, Unter Pascal konnte man einfach so eine ton erzeugen, glaube das war beep(int), das unter java und ich schreibe mir einfach einen thread in 1600 Hz, der piept mit den Werten aus dem ByteArray, aber das gibt es bestimmt nicht unter Java, oder?

Danke fuer eure Hilfe,

Cu

Christian Hennig


----------



## Thomas Darimont (4. Oktober 2005)

Hallo!


```
/**
  * 
  */
 package de.tutorials;
 
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.File;
 import java.io.FileInputStream;
 
 import javax.sound.sampled.AudioFormat;
 import javax.sound.sampled.AudioInputStream;
 import javax.sound.sampled.AudioSystem;
 import javax.sound.sampled.Clip;
 import javax.sound.sampled.DataLine;
 import javax.sound.sampled.FloatControl;
 import javax.swing.JButton;
 import javax.swing.JFrame;
 
 /**
  * @author Administrator
  * 
  */
 public class Player extends JFrame {
 
 	private Clip clip;
 
 	private JButton btn;
 
 	private boolean running;
 
 	public Player() {
 		super("Player");
 		setDefaultCloseOperation(EXIT_ON_CLOSE);
 
 		initPlayer();
 		btn = new JButton("Play");
 		btn.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent e) {
 				if (!running) {
 					running = true;
 					clip.start();
 				} else {
 					running = false;
 					clip.stop();
 				}
 			}
 		});
 
 		add(btn);
 
 		pack();
 		setVisible(true);
 	}
 
 	private void initPlayer() {
 		try {
 			File file = new File("C:/WINDOWS/media/Windows XP-Startvorgang.wav");
 			FileInputStream fis = new FileInputStream(file);
 			ByteArrayOutputStream baos = new ByteArrayOutputStream();
 			byte[] transferBuffer = new byte[1024];
 			int len = 0;
 			while ((len = fis.read(transferBuffer)) > 0) {
 				baos.write(transferBuffer);
 			}
 			fis.close();
 
 			AudioInputStream ais = AudioSystem
 		    		.getAudioInputStream(new ByteArrayInputStream(baos
 		    		    	.toByteArray()));
 			AudioFormat format = ais.getFormat();
 			DataLine.Info info = new DataLine.Info(Clip.class, format,
 		    		((int) ais.getFrameLength() * format.getFrameSize()));
 			clip = (Clip) AudioSystem.getLine(info);
 			clip.open(ais);
 
 			FloatControl gainControl = (FloatControl) clip
 		    	    .getControl(FloatControl.Type.MASTER_GAIN);
 			gainControl.setValue(1.0F);
 		} catch (Exception e) {
 			e.printStackTrace();
 		}
 	}
 
 	/**
 	 * @param args
 	 */
 	public static void main(String[] args) {
 		new Player();
 	}
 }
```
 
 Gruß Tom


----------



## caraboides (4. Oktober 2005)

Wenn ich dich richtig verstehe spielt es ja nur das Ganze File ab ich will ja nur einen Teil.
Wo kann ich das beinflussen?

Aber schon mal Danke.


----------



## torsch2711 (5. Oktober 2005)

Edit:

 vergiss es, ich war glaube ich im Fieberwahn.

 So funktionierte das nicht was ich da geschrieben hab.

 Gruss,
 Torsten.


----------

