Iterieren durch einen Ordner mit Audiodateien und verketten eine andere Audiodatei

diddle para

Mitglied
Ich versuche, ein kleines Programm in Java zu erstellen, das eine Audiodatei (silence_2sec.wav) an alle Audiodateien in einem bestimmten Verzeichnis (/ audiofiles) einzeln anfügt.

Ich bin bei der folgenden Idee angekommen, aber leider funktioniert die 'for'-Schleife nicht - die Ausgabe ist nur eine Verkettung einer Datei aus dem angegebenen Verzeichnis (/ audiofiles) mit der Audiodatei im Programmverzeichnis (silence_2sec.wav)

Kann jemand vorschlagen, warum die "for"-Schleife nicht alle Dateien in den Audiodateien (/ audiofiles) durchläuft und den Prozess für jeden von ihnen ausführt?

Bisher:-

Java:
import java.io.File;
import java.util.*;
import java.io.*;
import javax.sound.sampled.*;

public class silapp_2e{

public static void main(String[]args)
    {
       
        String wavFile2 = "silence_2sec.wav";
       
        File dir = new File("audiofiles");
        File[] directoryListing = dir.listFiles();

    for (File f : directoryListing) {
       
              try {
           
                int x = 0; x++;
           
                 String fileName = (f.getAbsolutePath());

                 AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(f.getAbsolutePath()));
                 AudioInputStream clip2 = AudioSystem.getAudioInputStream(new File(wavFile2));
              
                 AudioInputStream appendedFiles =
                     new AudioInputStream(
                     new SequenceInputStream(clip1, clip2),    
                     clip1.getFormat(),
                     clip1.getFrameLength() + clip2.getFrameLength());

                 AudioSystem.write(appendedFiles,
                 AudioFileFormat.Type.WAVE,

                    new File("output" + x + ".wav"));

             
                   
            } catch (Exception e) {
            e.printStackTrace();
            }
          }
    }
   }
 

diddle para

Mitglied
Vielen Dank für den Gedanken - leider wird die Schleife auch nicht iteriert, wenn ich die 'int = x' Definition außerhalb der 'for' Schleife platziere
 

MoxxiManagarm

Top Contributor
File dir = new File("audiofiles");
audiofiles ist an der Stelle ein relativer Pfad. Du solltest auf jeden Fall überprüfen, ob dieser relative Pfad überhaupt gefunden wird. Lass dir am besten mal den absoluten Pfad ausgeben und die Länge des Arrays. Ich gehe davon aus das audiofiles nicht gefunden wird, daher findet die Iteration auch keine Elemente (leeres Arrays) und führt nichts aus.
 

mrBrown

Super-Moderator
Mitarbeiter
audiofiles ist an der Stelle ein relativer Pfad. Du solltest auf jeden Fall überprüfen, ob dieser relative Pfad überhaupt gefunden wird. Lass dir am besten mal den absoluten Pfad ausgeben und die Länge des Arrays. Ich gehe davon aus das audiofiles nicht gefunden wird, daher findet die Iteration auch keine Elemente (leeres Arrays) und führt nichts aus.
In dem Fall gebe es kein leeres Array, sondern null und dementsprechend eine NPE.
 

diddle para

Mitglied
Danke für deine Idee. Das relativer Pfad 'audiofiles' wird gefunden - das Programm erzeugt eine Ausgabedatei von dort korrekt, aber es passiert nicht, dass die Dateien im Pfad 'audiofiles' durchgelauft werden. Das folgende Programm durchläuft das Verzeichnis und gibt die Namen korrekt aus: -

Java:
import java.io.File;

public class list3f{

public static void main(String[]args)
    {
      File dir = new File("audiofiles");
      File[] directoryListing = dir.listFiles();

            for (File f : directoryListing) {
                System.out.println("output " + f.getName());
            }
    }
}

- Ich glaube also, dass das Problem in der Interaktion des Iterationsprozesses und des Audiodatei-Verkettungsprozesses liegt
 

mrBrown

Super-Moderator
Mitarbeiter
Die Iteration wird auch in deinem obigen Programm funktionieren - das kannst du auch ganz leicht überprüfen, indem du dort auch eine Ausgabe einbaust (außer es gibt einen Error, das solltest du aber merken).

Das Problem bei deinem Obigen Code wurde ja schon genannt. Poste doch noch mal den korrigierten Code
 

diddle para

Mitglied
Wie so ? :-

Java:
import java.io.File;
import java.util.*;
import java.io.*;
import javax.sound.sampled.*;

public class silapp_2f{

public static void main(String[]args)
    {
       
        String wavFile2 = "silence_2sec.wav";
       
        File dir = new File("audiofiles");
        File[] directoryListing = dir.listFiles();
       
    int x = 0; x++;   

    for (File f : directoryListing) {
       
              try {
           

                 AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(f.getAbsolutePath()));
                 AudioInputStream clip2 = AudioSystem.getAudioInputStream(new File(wavFile2));
              
                 AudioInputStream appendedFiles =
                     new AudioInputStream(
                     new SequenceInputStream(clip1, clip2),    
                     clip1.getFormat(),
                     clip1.getFrameLength() + clip2.getFrameLength());

                 AudioSystem.write(appendedFiles,
                 AudioFileFormat.Type.WAVE,

                    new File("output" + x + ".wav"));

             
                   
            } catch (Exception e) {
            e.printStackTrace();
            }
          }
    }
   }

das habe ich auch versucht, mit dem gleichen Ergebnis - es verarbeitet eine Datei im Ordner "audiofiles", aber kein mehr. Soweit ich sehen kann, liegt das Problem in der Interaktion der for-Schleife und der AudioInputStream-Funktion
 

mrBrown

Super-Moderator
Mitarbeiter
Welchen Wert hat denn wohl x die ganze Zeit über und in welcher Datei wird deshalb jedes Ergebnis gespeichert?
 

diddle para

Mitglied
Mit dem Wert 'x' wird bei jeder Ausführung der for-Schleife eine Iteration im Namen der Ausgabedatei erstellt.

Das Programm muss die Anzahl der Dateien im Verzeichnis "audiofiles" finden und es dann für jede Audiodatei in diesem Verzeichnis mit der "wavFile2" verketten

Z.B, wenn es also im Audiodatei-Verzeichnis 5 Audiodateien gibt, liest es jedes Audiodatei einzeln, verkettet es mit der Datei "wavFile2" und gibt dann die Dateien "output1.wav" .. bis "output5.wav" aus.
 

diddle para

Mitglied
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Zahlenwert durch Methode ersetzen Spiele- und Multimedia-Programmierung 1
A Spielfelder erstellen mit Jogl Java durch ein Koordinaten Array Spiele- und Multimedia-Programmierung 1
R Durch String Platform Game erstellen Spiele- und Multimedia-Programmierung 8
lord239123 JMonkey Schatten werden durch Terrain hindurch angezeigt Spiele- und Multimedia-Programmierung 1
R Mp3 Rating (POPM) durch JAudioTagger? Spiele- und Multimedia-Programmierung 2
M Objekte verschwinden durch Explosion Spiele- und Multimedia-Programmierung 2
B j3d Kamera Rotation durch Tastendruck Spiele- und Multimedia-Programmierung 12
I Framerate-Einbrüche durch Synchronisation Spiele- und Multimedia-Programmierung 12
E [JAVA3D] Schattenstrich durch die Szene Spiele- und Multimedia-Programmierung 4
N Zufallserzeugung durch KI Spiele- und Multimedia-Programmierung 23
H Grafik verschwindet durch Größenveränderung von GridBag Spiele- und Multimedia-Programmierung 5
S Hilfe: Ich sehe durch die ganze Api's nicht mehr durch! Spiele- und Multimedia-Programmierung 15
Fu3L Extreme Prozessorauslastung durch Hintergrundbild Spiele- und Multimedia-Programmierung 5
B Animation durch Button auslösen Spiele- und Multimedia-Programmierung 2
D Polygonsize durch das umliegende Reckteck verändern inJava2D Spiele- und Multimedia-Programmierung 6
S Fehlerhafte Darstellung durch Transparenz? Spiele- und Multimedia-Programmierung 8
A durch Objekte hindurchzoomen Spiele- und Multimedia-Programmierung 2
masta // thomas Kollisionsabfrage - inspiriert durch "pixelgenaue Kolli Spiele- und Multimedia-Programmierung 13
E Durch Klick auf den JButton will ich die Farbe ändern? Spiele- und Multimedia-Programmierung 8
R Enorme Leistungseinbußen durch Alphakanäle Spiele- und Multimedia-Programmierung 3
N Minecraft Frage für einen Minecraft Server Spiele- und Multimedia-Programmierung 2
G Mikrophon-/Audiosteuerung für einen Character Spiele- und Multimedia-Programmierung 1
Blender3D VlCJ Windows 10 kein Zugriff auf einen im Netzwerk freigegebnen Ordner Spiele- und Multimedia-Programmierung 2
S Wie kann ich ein Bild in einen Frame einfügen? Spiele- und Multimedia-Programmierung 2
J mehrere Listener für einen Button / Label Spiele- und Multimedia-Programmierung 1
S Einen Dialog zweier Personen erstellen (Textadventure) Spiele- und Multimedia-Programmierung 4
E [LWJGL] Karusell, mehrere Objekte drehen sich um einen Mittelpunkt Spiele- und Multimedia-Programmierung 31
F Einen Sound mit veränderter Tonhöhe und Geschwindigkeit abspielen - Hilfe erbeten Spiele- und Multimedia-Programmierung 29
C Java3D Sound spielt nur einen Sound ab. Spiele- und Multimedia-Programmierung 8
M Einen Hobby Game - / Grafik Designer zu finden (Screenshot vom Spiel) Spiele- und Multimedia-Programmierung 7
F Wie mache ich einen Screenshot vom Display (LWJGL)? Spiele- und Multimedia-Programmierung 7
C Java3D Rotation um einen Punkt (y-achse) Spiele- und Multimedia-Programmierung 2
C JAVA3D Rotation um einen bestimmten Punkt Spiele- und Multimedia-Programmierung 20
Tapsi Anfänger braucht einen Rat ^^ --> Performance Spiele- und Multimedia-Programmierung 7
G Wie bekomme ich einen Punkt (Graphics) Spiele- und Multimedia-Programmierung 2
T Wie kann ich ein OrbitBehavior auf einen festen Wert setzen? Spiele- und Multimedia-Programmierung 2
K Wie malt man am geschicktesten einen Würfel? Spiele- und Multimedia-Programmierung 2
M Anfänger Problem mit einen MouseMotionListener Spiele- und Multimedia-Programmierung 2
G Einen gif oder jpg Datei aus einem Graphics Objekt o. JFrame Spiele- und Multimedia-Programmierung 2
I jPCT rendert nur einen schwarzen Bildschirm Spiele- und Multimedia-Programmierung 2
R Wie zeichne ich einen einzelnen Punkt Spiele- und Multimedia-Programmierung 2

Ähnliche Java Themen

Neue Themen


Oben