JAVA - 循环访问音频文件的文件夹,将另一个音频文件连接到每个文件夹



我正在开发一个小的 Java 脚本来循环访问名为"audiofiles"的文件夹中的.wav文件,并将每个文件与另一个音频文件单独连接(在本例中名为"silence_2sec.wav"(到目前为止,我有:-

import java.io.File;
import java.util.*;
import java.io.*;
import javax.sound.sampled.*;
public class silapp_2b{
public static void main(String[]args){
String wavFile2 = "silence_2sec.wav";
            // 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     

try {

    for(File f : filesList){
        if(f.isFile()){
            AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(f.getName()));
            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" + "(f.getName()).wav"));
        }
    }
    } catch (Exception e) {
    e.printStackTrace();
    }

}
}

这将编译,但在执行时返回以下错误:-

java.io.FileNotFoundException: glitch2.wav (No such file or directory)
    at java.io.FileInputStream.open0(Native Method)
    at java.io.FileInputStream.open(FileInputStream.java:195)
    at java.io.FileInputStream.<init>(FileInputStream.java:138)
    at com.sun.media.sound.WaveFloatFileReader.getAudioInputStream(WaveFloatFileReader.java:164)
    at javax.sound.sampled.AudioSystem.getAudioInputStream(AudioSystem.java:1181)
    at silapp_2b.main(silapp_2b.java:32)

有什么建议吗?

错误

AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(f.getName()));

这将尝试使用给定的文件名创建一个文件,并在当前目录中查找它。

您应该使用 File.getAbsolutePath(( 来获取文件的完整绝对路径

AudioInputStream clip1 = AudioSystem.getAudioInputStream(new File(f.getAbsolutePath()));

或者更简单

AudioInputStream clip1 = AudioSystem.getAudioInputStream(f);

wavFile2 的相同问题

我怀疑第二个文件会遇到同样的问题:

AudioInputStream clip2 = AudioSystem.getAudioInputStream(new File(wavFile2));

您还需要在此处提供绝对路径。如果它也在audDir,那么做

File wavFile2 = new File(audDir.getAbsolutePath() + "/silence_2sec.wav");
AudioInputStream clip2 = AudioSystem.getAudioInputStream(wavFile2);

最新更新