M
marek
Gast
Hallo!
ich habe mir aus dem SimpleAudioPlayer von http://www.jsresources.org/examples/SimpleAudioPlayer.java.html einen SimpleAudioPlayer mit lautstärkeregler gebastelt.
ich glaube, das kann man fast schon als hack 8) betrachten weil ich nicht die vorgefertigten javaKlassen benutze.
jetzt frage ich mich, ob das vieleicht schädlich sein könnte für meine soundkarte, weil ich ihr unnormale werte übergebe.
die "line" führt doch zur soundkarte, oder?
hier mein code:
zur erklärung: in der while (nBytesRead != -1) schleife werden stücke in form von bytes aus der datei geholt und an die line weitergegeben.
ich habe eingefügt, dass die bytes mit volume multipliziert werden.
so wird es auch lauter und leiser.
aber: wenn ich es lauter mache (volume>1.0) rauscht es
(wahrscheinlich (byte)255*(double)1.3=(byte)331 overflow => =(byte)-75)
einen negativen wert erwartet die soundkarte vieleicht nicht und geht dadurch kaputt.
was meint ihr dazu??
mfg, marek
ich habe mir aus dem SimpleAudioPlayer von http://www.jsresources.org/examples/SimpleAudioPlayer.java.html einen SimpleAudioPlayer mit lautstärkeregler gebastelt.
ich glaube, das kann man fast schon als hack 8) betrachten weil ich nicht die vorgefertigten javaKlassen benutze.
jetzt frage ich mich, ob das vieleicht schädlich sein könnte für meine soundkarte, weil ich ihr unnormale werte übergebe.
die "line" führt doch zur soundkarte, oder?
hier mein code:
Code:
package recourcescom;
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.LineUnavailableException;
import javax.sound.sampled.SourceDataLine;
public class SimpleAudioPlayer {
private static final int EXTERNAL_BUFFER_SIZE = 128000;
static double volume=2;//MEINE VARIABLE für die lautstärkereglung
public static void main(String[] args)
{
String strFilename = "C:\\javawav.wav";
File soundFile = new File(strFilename);
AudioInputStream audioInputStream = null;
try
{
audioInputStream = AudioSystem.getAudioInputStream(soundFile);
}
catch (Exception e)
{}
AudioFormat audioFormat = audioInputStream.getFormat();
SourceDataLine line = null;
DataLine.Info info = new DataLine.Info(SourceDataLine.class,audioFormat);
try
{
line = (SourceDataLine) AudioSystem.getLine(info);
line.open(audioFormat);
}
catch (LineUnavailableException e){}
line.start();
int nBytesRead = 0;
byte[] abData = new byte[EXTERNAL_BUFFER_SIZE];
while (nBytesRead != -1)
{
try
{
nBytesRead = audioInputStream.read(abData, 0, abData.length);
}
catch (IOException e)
{
e.printStackTrace();
}
// MEIN CODE ANFANG
for(int i=0;i<abData.length;i++){
abData[i]=(byte)(volume*(double)abData[i]);
}
// MEIN CODE ENDE
if (nBytesRead >= 0)
{
int nBytesWritten = line.write(abData, 0, nBytesRead);
}
}
//line.drain();
//line.close();
//System.exit(0);
}
}
zur erklärung: in der while (nBytesRead != -1) schleife werden stücke in form von bytes aus der datei geholt und an die line weitergegeben.
ich habe eingefügt, dass die bytes mit volume multipliziert werden.
so wird es auch lauter und leiser.
aber: wenn ich es lauter mache (volume>1.0) rauscht es
(wahrscheinlich (byte)255*(double)1.3=(byte)331 overflow => =(byte)-75)
einen negativen wert erwartet die soundkarte vieleicht nicht und geht dadurch kaputt.
was meint ihr dazu??
mfg, marek