Java 导入和连接波形文件

Java 导入和连接波形文件,java,eclipse,audio,wav,eclipse-neon,Java,Eclipse,Audio,Wav,Eclipse Neon,如果已经回答了这么具体/简单的问题,我真的很抱歉,我似乎无法对我遇到的这个问题保持清醒的头脑 目前,我正在为我的高级独立编程语言课程编写一个程序,该课程涉及大量.wav文件。我使用的是EclipseNeon,我使用的是Java。目前,我的问题是正确导入.wav文件,然后正确地将几个文件连接在一起 下面是利用这些文件的类的代码。请随意评论我的方法,我完全不知所措 private ArrayList<String> paths; public audioGen(){ paths

如果已经回答了这么具体/简单的问题,我真的很抱歉,我似乎无法对我遇到的这个问题保持清醒的头脑

目前,我正在为我的高级独立编程语言课程编写一个程序,该课程涉及大量.wav文件。我使用的是EclipseNeon,我使用的是Java。目前,我的问题是正确导入.wav文件,然后正确地将几个文件连接在一起

下面是利用这些文件的类的代码。请随意评论我的方法,我完全不知所措

private ArrayList<String> paths;

public audioGen(){
    paths = new ArrayList<String>();
}

public ArrayList<String> formList(int l, String type) {
    Random a = new Random();
    int b;
    if(type.equals("A")){
            for(int x=0; x<l;x++){
                b = a.nextInt(14);
                paths.add("/res/"+Integer.toString(b)+".wav");
            }
    }
    return paths;
}

@SuppressWarnings("resource")

public void soundAppend(ArrayList<String> pathList) throws IOException, UnsupportedAudioFileException {
        AudioInputStream clip1 = null;
        for(String path1 : pathList){
            if (clip1 == null){
                clip1 = AudioSystem.getAudioInputStream(new File (path1));
                continue;
            }
            AudioInputStream clip2 = AudioSystem.getAudioInputStream(new File(path1));
            AudioInputStream appendFiles = new AudioInputStream(new SequenceInputStream(clip1, clip2), clip1.getFormat(), clip1.getFrameLength() + clip2.getFrameLength());
            clip1 = appendFiles;
        }
    AudioSystem.write(clip1, AudioFileFormat.Type.WAVE, new File("src\\audio\\completed.wav"));
    clip1.close();
}

public void readList(ArrayList<String> l){
    for(String s : l)
        System.out.println(s);
}
私有数组列表路径;
公共听阈(){
路径=新的ArrayList();
}
公共ArrayList formList(int l,字符串类型){
随机a=新随机();
int b;
if(类型等于(“A”)){

对于(int x=0;x而言,问题在于获取文件的正确路径。由于您提到已将资源文件夹添加到类路径中,这应该可以:

public ArrayList<String> formList(int l, String type) {
    Random a = new Random();
    int b;
    if(type.equals("A")){
        for(int x=0; x<l;x++){
            b = a.nextInt(14);
            Url url = this.getClass().getResource(Integer.toString(b)+".wav");
            paths.add(url.toString());
        }
    }
    return paths;
}
public ArrayList formList(int l,字符串类型){
随机a=新随机();
int b;
if(类型等于(“A”)){

对于(int x=0;xy)您正在通过创建
SequenceInputStream
来创建一个
AudioInputStream
。那么到底是什么问题呢?您是否在问这样做是否正确?是否有效?是否出现异常?是的,它每次抛出的异常是
java.io.FileNotFoundException:/res/0.wav(系统找不到指定的文件)
该路径在
formList
中提到,您没有显示它是如何使用的。但是错误消息是否足够清楚?该文件不存在。您的/res/0.wav文件夹中是否有文件0.wav?假设您使用的是*nix,它将来自根目录,而不是相对目录…pathList实现必须与另一个类相关-它是awkward和笨拙,但我仍在研究它。不管怎样,该文件确实存在。我自己制作。问题是我不完全确定如何将java定向到正确的位置,而不给它完整、明确的路径。所有这些主要是为了以后将其打包为某种形式的可执行文件,以便在其他计算机上运行。这实际上lly非常有用,但不幸的是它会导致另一个异常-
getResource()
返回X.wav文件的URL,其中ArrayList
路径列表
不是。我曾考虑将
路径列表
设置为ArrayList而不是字符串,但在研究其可行性时,我发现无法使用URL对象轻松构造文件对象。有关操作过程的想法?请尝试:
this.getClass().getResource(Integer.toString(b)+“.wav”).toString()
这实际上是我的第一个爱好,但随后它给出了以下例外:
java.lang.NullPointerException位于com.rade.gen.audioGen.formList(audioGen.java:21),com.rade.gen.Main.init(Main.java:30)位于sun.applet.AppletPanel.run(AppletPanel.java:434)在java.lang.Thread.run(Thread.java:745)
上,我很难找到它processing@DadeRobison所以你可能需要把它分解一下。我无法知道你的源代码中哪一行是第21行。试试我的编辑