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();
            }
          }
    }
   }
 
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.
 
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.
 
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
 
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
 
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
 
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.
 

Neue Themen


Zurück
Oben