eigener LautstärkeRegler schädlich für soundkarte?

Status
Nicht offen für weitere Antworten.
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:

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. :D

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
 

MPW

Top Contributor
Ich glaube nicht das das schädlich ist.

Selbst wenn es nur rauscht ist es ja nicht schädlich, sondern nur ein dem menschlichen Ohr unbekanntes Geräusch.

Außerdem wäre sowas wesentlich gefährlicher in Assembler weil du ja direkt auf die Soundkarte schreiben würdest. Dies hier ruft ja nur normale, sogar Java-funktionen auf, ich kann natürlich keine Gewehr geben, aber solange du kein JNI nimmst müsste das halbwegs ungefährlich sein...aber wie entsteht denn das Rauschen überhaupt, vielleicht, weil du nur die Lautstärke zu hoch drehst?
 

0xdeadbeef

Top Contributor
Natürlich geht da nix kaputt. Nicht erlaubte Werte werden eh nicht übernommen und selbst wenn, könnte da nichts kaputtgehen.
Abgesehen davon ist eine "Line" nur ein (virtualisierter) Wiedergabekanal, keine direkte Hardwarekomponente.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G JavaDocu in eigener Bibliothek Allgemeine Java-Themen 2
HarleyDavidson Eigener PropertyChangeListener funktioniert einfach nicht Allgemeine Java-Themen 3
T Datei öffnen mit eigener Applikation.exe Allgemeine Java-Themen 4
D Arraylist eigener Klasse an iReport übergeben Allgemeine Java-Themen 7
K Jar mit eigener JRE ausliefern Allgemeine Java-Themen 13
G eigener PropertyChangedListener Allgemeine Java-Themen 2
S OOP ClassCastException bei casting von eigener Klasse aus Iterator Allgemeine Java-Themen 3
V Serialisierung von Instanz eigener Klasse Allgemeine Java-Themen 5
N Vergleich eigener Klassen Allgemeine Java-Themen 5
T Vererbung Eigener Datentyp: Betriebsmittel Allgemeine Java-Themen 2
J Erste Schritte Kommerzielle nutzung eigener Javaapplets auf der Homepage Allgemeine Java-Themen 2
B Probleme mit eigener equals Methode Allgemeine Java-Themen 18
Kr0e Eigener Updatemechanismus Allgemeine Java-Themen 7
J Mein eigener Messenger und dessen Probleme Allgemeine Java-Themen 48
S Profiler-Funktionen in eigener Applikation nutzen..? Allgemeine Java-Themen 5
R Eigener Comparator Allgemeine Java-Themen 2
T Zeit von einem Server/Webseite auslesen und in eigener GUI anzeigen Allgemeine Java-Themen 6
V Probleme mit eigener Hashmap Allgemeine Java-Themen 10
B Eigener ClassLoader Allgemeine Java-Themen 9
R Eigener Assoziativ-Speicher Allgemeine Java-Themen 7
T CP Problem: Webstart + Logging properties file + eigener Handler Allgemeine Java-Themen 7
P eigener Klassenname Allgemeine Java-Themen 4
D Eigener Key bei AES Verschlüsselung Allgemeine Java-Themen 4
T enums - eigener startwert Allgemeine Java-Themen 5
J Eigener ClassLoader wird nicht immer verwendet Allgemeine Java-Themen 3
P eigener Thread für einen JButton Allgemeine Java-Themen 32
F Checkbox in JTable , eigener Cellrenderer -wie gehts weiter? Allgemeine Java-Themen 2
A JRE auf eigener Seite verlinken oder zum Download anbieten? Allgemeine Java-Themen 13
E Wie: Eigener Listener, eigenes Event (möglichst einfach) Allgemeine Java-Themen 29
G eigener logger mittels classe (dynamische logfilename) log4j Allgemeine Java-Themen 15
D Eigener Maven2 Plugin Server? Allgemeine Java-Themen 3
I RSA - Eigener Quelltext Allgemeine Java-Themen 4
K JTree plus eigener FileLoader Allgemeine Java-Themen 2
L Problem mit eigener, abgeleiteter Klasse Allgemeine Java-Themen 2
S Eigener Editor Allgemeine Java-Themen 7
L Eigener Onlinestunden- Zähler / Problemchen Allgemeine Java-Themen 2

Ähnliche Java Themen

Neue Themen


Oben