Hall vom Clip entfernen

ErfinderLabyrinth

Bekanntes Mitglied
Hi,
Ich möchte eine Audio Datei in Java abspielen, dies klappt auch so weit, allerdings gibt es hier ein Nachhall, der sich nicht gut anhört. Wie kann ich diesen entfernen

Code:
Java:
public class Sound {
    private static final int BUFFER_SIZE = 4096;
    
    private AudioFormat formatAudio;
    private Clip clip;

    private SourceDataLine theAudioLine;

    private AudioInputStream sampleStream;


    public Sound(AudioInputStream sampleStream) {
        try {
            clip = AudioSystem.getClip();
            clip.open(sampleStream);

        }catch(Exception e) {
            e.printStackTrace();
        }
    }
    public void play(float lautstärke) {
        new Thread() {
            public void run() {
                FloatControl gainControl = (FloatControl) clip.getControl(FloatControl.Type.MASTER_GAIN);
                gainControl.setValue(limit(gainControl, lautstärke));
//                EnumControl reverb = (EnumControl) clip.getControl(FloatControl.Type.VOLUME);
//                System.out.println(reverb.getValue().getClass().getName());
//                reverb.setValue(false);
//                clip.start();
            }
        }.start();
    }
    
    private static float limit(FloatControl control,float level){
        return Math.min(control.getMaximum(), Math.max(control.getMinimum(), level));
    }
}

Windows 10, Java 17.0.4
 

White_Fox

Top Contributor
Ui, digitale Signalverarbeitung. Sehr interessantes Thema...ich nehme doch an, daß der Hall schon in der Datei steckt?

Tja, gute Frage. Mit dem Codefetzen, den du da gepostet hast, schonmal nicht.

Ich kann ja mal anders herum anfangen: Wie man ein Hall in ein Audiosignal reinbekommt. Du kannst z.B. in die Haupthalle von Notre Dame gehen und die akustische Impulsantwort aufnehmen: Du erzeugst einen akustischen Impuls (z.B. klatschst du einmal laut in die Hände) und nimmst das Echo auf.

Diese Impulsantwort kannst du nun mit einem Audiosignal falten, in Matlab gibt es dafür eine Funktion namens convolution oder so ähnlich. Wenn dein Audiosignal jetzt z.B. ein Geschichtenerzähler ist, klingt das Ergebnis der Faltung dann so, als würde der Sprecher in Notre Dame stehen.

Hier mal eine kleine Einführung in die Signalfaltung:

Also halten wir mal fest: Du brauchst eine Bibliothek, um Signalverarbeitung betreiben zu können.

Es müßte auch ein Verfahren geben, um die Impulsantwort wieder rauszurechnen (Deconvolution?). Aber dazu müßtest du die Impulsantwort erstmal kennen. Aber vielleicht reicht es schon, eine hinreichend ähnliche Impulsantwort zu haben...
 

Blender3D

Top Contributor
Hi,
Ich möchte eine Audio Datei in Java abspielen, dies klappt auch so weit, allerdings gibt es hier ein Nachhall, der sich nicht gut anhört. Wie kann ich diesen entfernen
Der Hall befindet sich sehr wahrscheinlich in der Tondatei selbst. Er lässt sich aber mit entsprechender Software entfernen.
Ich verwende Audacity da es eine sehr leistungsstarke OpenSource Software ist. Funktioniert unter Linux Windows etc.

https://www.audacityteam.org/
 

ErfinderLabyrinth

Bekanntes Mitglied
Ui, digitale Signalverarbeitung. Sehr interessantes Thema...ich nehme doch an, daß der Hall schon in der Datei steckt?

Tja, gute Frage. Mit dem Codefetzen, den du da gepostet hast, schonmal nicht.

Ich kann ja mal anders herum anfangen: Wie man ein Hall in ein Audiosignal reinbekommt. Du kannst z.B. in die Haupthalle von Notre Dame gehen und die akustische Impulsantwort aufnehmen: Du erzeugst einen akustischen Impuls (z.B. klatschst du einmal laut in die Hände) und nimmst das Echo auf.

Diese Impulsantwort kannst du nun mit einem Audiosignal falten, in Matlab gibt es dafür eine Funktion namens convolution oder so ähnlich. Wenn dein Audiosignal jetzt z.B. ein Geschichtenerzähler ist, klingt das Ergebnis der Faltung dann so, als würde der Sprecher in Notre Dame stehen.

Hier mal eine kleine Einführung in die Signalfaltung:

Also halten wir mal fest: Du brauchst eine Bibliothek, um Signalverarbeitung betreiben zu können.

Es müßte auch ein Verfahren geben, um die Impulsantwort wieder rauszurechnen (Deconvolution?). Aber dazu müßtest du die Impulsantwort erstmal kennen. Aber vielleicht reicht es schon, eine hinreichend ähnliche Impulsantwort zu haben...
Nein, der Hall ist nicht in der Datei drin, also ich höre ihn nicht, wenn ich sie mit dem Groove-Musik programm abspiele

Auch als ich ihn mit einem anderen Code abspielen ließ, habe ich den Hall nicht gehört, erst als ich zu Clip gewechselt bin, um die Lautstärke einstellen zu können, habe ich den Hall gehört
 

Blender3D

Top Contributor
Auch als ich ihn mit einem anderen Code abspielen ließ, habe ich den Hall nicht gehört, erst als ich zu Clip gewechselt bin, um die Lautstärke einstellen zu können, habe ich den Hall gehört
Deine play - Methode erzeugt einen neuen Thread der das Audio abspielt. Wenn Du play mehrfach aufrufst kann es auch zu einem Halleffekt kommen, da das Audio zeitversetzt nebeneinander mehrfach abgespielt wird. Wenn du das verhindern willst solltest Du einen Member des erzeugten Threads in der Klasse Sound einführen und überprüfen ob er null ist und nicht mehr läuft bevor Du einen neuen Thread erzeugts.
 

ErfinderLabyrinth

Bekanntes Mitglied
Deine play - Methode erzeugt einen neuen Thread der das Audio abspielt. Wenn Du play mehrfach aufrufst kann es auch zu einem Halleffekt kommen, da das Audio zeitversetzt nebeneinander mehrfach abgespielt wird. Wenn du das verhindern willst solltest Du einen Member des erzeugten Threads in der Klasse Sound einführen und überprüfen ob er null ist und nicht mehr läuft bevor Du einen neuen Thread erzeugts.
Danke, ich habe nochmal geschaut und aus irgendeinem Grund wird das Stück 4x abgespielt
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J Sound mit Hall und Equalizer abspielen lassen Allgemeine Java-Themen 6
R Threads Clip loop loopt nicht Allgemeine Java-Themen 2
J Sound mit Clip in Linux abspielen Allgemeine Java-Themen 3
RalleYTN Input/Output Clip als ein Array von Bytes? Allgemeine Java-Themen 2
C Clip zu SourceDataLine Allgemeine Java-Themen 12
B Datentypen wav Dateien abspielen mit JMF, Clip und Player klappt nicht. Lösung Codec? Allgemeine Java-Themen 13
P javax.sound: clip.stop(); Allgemeine Java-Themen 4
I strip-debug - debug-Infos aus mitgelieferter Lib entfernen Allgemeine Java-Themen 3
OnDemand Teile eines Links entfernen Allgemeine Java-Themen 6
TheSepp Wie kann man Leerzeichen aus einer Array liste entfernen? Allgemeine Java-Themen 10
killig Textdatei einlesen und in HashMap speichern (duplikate entfernen) Allgemeine Java-Themen 12
J Spieler aus der Spielerliste zu entfernen Allgemeine Java-Themen 0
J Spieler aus der Spielerliste entfernen in dem Spiel 17und 4 Allgemeine Java-Themen 2
C Koordinaten LONG/LAT eines neuen Punktes in bestimmter Entfernen und Winkel berechnen Allgemeine Java-Themen 3
Kingamadeus2000 Alle mehrfach vorkommenden Buchstaben rekursiv aus einem String entfernen. Allgemeine Java-Themen 6
R char aus String entfernen Allgemeine Java-Themen 10
J Wie kann ich von Vornherrein einen Fokus auf ein Objekt entfernen? Allgemeine Java-Themen 3
Y ArrayListe eingegebenen index entfernen Allgemeine Java-Themen 1
S Inlining erzwingen kombiniert mit Entfernen von Imports..? Allgemeine Java-Themen 11
G JFileChooser Fokus entfernen?! Allgemeine Java-Themen 15
Neumi5694 Compiler-Fehler Konstanten entfernen während des Kompiliervorgangs Allgemeine Java-Themen 7
S Methoden "Unschöne" Break-Anweisung aus verschachtelter Funktion entfernen Allgemeine Java-Themen 11
KeVoZ_ JSoup - HTML Tag entfernen Allgemeine Java-Themen 1
mrBrown Unicode-WhiteSpaces aus String entfernen Allgemeine Java-Themen 14
S Abhaengigkeiten auf Klassenebene entfernen..? Allgemeine Java-Themen 7
T ArrayList zeilenumbruch entfernen Allgemeine Java-Themen 13
J Pattern aus String entfernen Allgemeine Java-Themen 2
R Duplikate aus einer Textdatei entfernen? Allgemeine Java-Themen 20
K Input/Output störende Leerzeichen entfernen Allgemeine Java-Themen 11
J Typecast entfernen Allgemeine Java-Themen 7
S Entfernen von allen Nicht-Buchstaben chars aus einem String ohne Regex..? Allgemeine Java-Themen 10
T Hardware sicher entfernen Allgemeine Java-Themen 8
M Mehrere CRLF entfernen Allgemeine Java-Themen 13
Q "Doppelte" Einträge einer Liste entfernen Allgemeine Java-Themen 14
T Swing JTextAera Zeilenumbruch entfernen Allgemeine Java-Themen 7
X Chinesische Schriftzeichen aus String entfernen Allgemeine Java-Themen 6
T JRE komplett von einem PC entfernen? Allgemeine Java-Themen 5
J Schlüsselwörter entfernen - Wo / wie am performantesten? Allgemeine Java-Themen 3
M Klasse aus xyz.class Datei laden / package entfernen? Allgemeine Java-Themen 4
L-ectron-X Regex zum Entfernen von mehrzeiligen Kommentaren Allgemeine Java-Themen 2
E Html tags entfernen optimieren Allgemeine Java-Themen 12
G Element aus Liste entfernen Allgemeine Java-Themen 6
X Duplikate aus eigenen Datentypen entfernen Allgemeine Java-Themen 14
C Zeilenumbruch aus JTextArea entfernen Allgemeine Java-Themen 6
T Element aus Vector entfernen Allgemeine Java-Themen 4
G Mit JarSigner erstellte Signierung entfernen Allgemeine Java-Themen 8
hdi text durchsuchen -> satzzeichen entfernen Allgemeine Java-Themen 5
C Satzzeichen aus String entfernen Allgemeine Java-Themen 6
S Anonymen MouseListener entfernen? Allgemeine Java-Themen 2
R Entfernen der '..' Notation aus dem Pfad Allgemeine Java-Themen 2
G führende nullen entfernen Allgemeine Java-Themen 14
A ArrayListe :Doppelte entfernen -> keine Referenzen Allgemeine Java-Themen 26
A Leerzeichen entfernen Allgemeine Java-Themen 3
G HTML Code aus String mittels REGEX entfernen Allgemeine Java-Themen 2
L Whitespace in einer html Site entfernen Allgemeine Java-Themen 10
M Elemente aus Liste entfernen? Allgemeine Java-Themen 7
T Duplikate aus ArrayList entfernen Allgemeine Java-Themen 2
G zeilenummern entfernen Allgemeine Java-Themen 9
G Hashset einen eintrag zufällig entfernen Allgemeine Java-Themen 4
B Entfernen von Zeilen/Spalten aus einer Matrix Allgemeine Java-Themen 8
T - Zeilenumbruch entfernen Allgemeine Java-Themen 2
byte Erste Zeile einer Textdatei entfernen Allgemeine Java-Themen 5
J sonderzeichen entfernen Allgemeine Java-Themen 6
m@nu Schreibschutz entfernen und OutputStream öffnen Allgemeine Java-Themen 6
G Leerzeichen entfernen unter 1.3.x Allgemeine Java-Themen 5
C GC: Referenz entfernen Allgemeine Java-Themen 6
F Dateigröße eines entfernen Images ermitteln Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben