我正在开发一个小的 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);