# Verkettung von Audiodateien



## diddle para (27. Feb 2018)

Ich arbeite an einer einfachen Anwendung, die die Möglichkeit benötigt, alle .wav-Dateien in einem bestimmten Verzeichnis (/ audiofiles) einzulesen und dann zu verketten. Ich habe Arbeitscode, der die Namen aller Dateien im Verzeichnis abruft und sie an die Konsole ausgibt, und Code, der eine Liste der angegebenen Dateien verkettet. Wenn ich jedoch versuche, die beiden Funktionen zu kombinieren, wird in Zeile 29 eine "NullPointerException" zurückgegeben Ideen?

Bisher:-


```
import java.util.*;
import java.io.*;
import javax.sound.sampled.*;

public class getconc_1 {

public static void main(String[] args) {

            // get list of file names from audio directory

            File audDir = new File("/audiofiles");

           //define a list to contain the audio files names and path

              File[] filesList = audDir.listFiles();

           // assign contents of each wav file from filesList to a string          

                String wavFile1 = filesList.get(0);
                String wavFile2 = filesList.get(1);


          // read the string from the audio file into an AudioInputStream, and concatenate

            try {
                AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(wavFile1));
               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("wavAppended.wav"));
    } catch (Exception e) {
        e.printStackTrace();
     }
}

}
```


----------



## Flown (27. Feb 2018)

Poste doch den StackTrace dazu.


----------



## diddle para (27. Feb 2018)

Stack Trace:-


```
java.lang.NullPointerException
    at getconc_1f.main(getconc_1f.java:29)
```


----------



## Flown (27. Feb 2018)

Schonmal Testausgaben gemacht oder mit dem Debugger reingehängt? Was ist auf Zeile 29 bei dir?


----------



## diddle para (27. Feb 2018)

jdb gibt mir folgendes:-


```
run getconc_1f
Set uncaught java.lang.Throwable
Set deferred uncaught java.lang.Throwable
>
VM Started: java.lang.NullPointerException
    at getconc_1f.main(getconc_1f.java:29)
```

Bei mir Zeile 29 ist:-


```
for (File file:filesList ) {
```


----------



## Flown (27. Feb 2018)

Dann wird filesList einfach null sein?


----------



## mrBrown (27. Feb 2018)

diddle para hat gesagt.:


> Bei mir Zeile 29 ist:-
> 
> 
> ```
> ...


Die Zeile gibt es in obigem Code nicht?


----------



## diddle para (27. Feb 2018)

Bitte entschuldigung - als ich den code kopiert habe hat es leider einen teil verpasst:-


```
import java.util.*;
import java.io.*;
import javax.sound.sampled.*;

public class getconc_1 {

public static void main(String[] args) {

            // get list of file names from audio directory

            File audDir = new File("/audiofiles");

           //define a list to contain the audio files names and path

              File[] filesList = audDir.listFiles();

           // assign contents of each wav file from filesList to a string          



          // read the string from the audio file into an AudioInputStream, and concatenate

            try {

                long length = 0;
                AudioInputStream clip = null;
                List<AudioInputStream> list = new ArrayList<AudioInputStream>();

                for (File file:filesList ) {
                    clip = AudioSystem.getAudioInputStream(new File(file.getPath()));
                    list.add(clip);
                    length += clip.getFrameLength();

                }
            if(length>0 && list.size()>0 && clip!=null) {

               AudioInputStream appendedFiles =
                        new AudioInputStream(
                            new SequenceInputStream(Collections.enumeration(list)),
                                clip.getFormat(),
                                length);

              AudioSystem.write(appendedFiles,
                        AudioFileFormat.Type.WAVE,
                        new File("wavAppended12.wav"));
      }
    } catch (Exception e) {
        e.printStackTrace();
     }
}

}
```


----------



## mrBrown (27. Feb 2018)

Wahrscheinlich gibt es den Ordner /audiofiles nicht. Der Slash zu Beginn bedeutet, dass der Ordner direkt unterhalb der Wurzel liegt.
Vermutlich meinst du einen Ordner im aktuellen Verzeichnis? dann würde audiofiles reichen


----------



## diddle para (27. Feb 2018)

Das war es! Danke sehr. 

Interessant, weil ich ein anderes Verkettungsskript habe, das nur mit dem absoluten Datei-pfad funktioniert..


----------

