2017-02-15 31 views
-1

如果这些特定/简单的问题已经得到解答,我真的很抱歉,我似乎无法绕过我遇到的这个问题。导入和连接波形文件

目前,我正在尝试为我的高级独立研究程序设计语言课程编写一个程序,该课程涉及到.wav文件的lot。我正在使用Eclipse Neon,并且正在使用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); 
} 

我已经设置了文件夹,以便/ RES /是包AUDIOWORK下构建路径,并在COM/RADE/GEN /源文件。这是他们没有足够接近的问题,还是我需要创建audioInputStreams来使用它们;如果是这样的话,我会如何连接它们。

非常感谢你的进步,再次对不起,如果这回答了别的地方。我花了两个星期的时间试图弄清楚这是如何工作无济于事。 :/

编辑:我想指定这是我近3年前冲的一个项目的重写,所以有很多事情,我目前没有刷新 - 特别是代码方法soundAppend

+0

你可以通过创建'SequenceInputStream'创建'AudioInputStream'。那么究竟是什么问题呢?你问这是否是正确的做法?它工作吗?你有例外吗? – bc004346

+0

是的,它每次吐出的异常是'java.io.FileNotFoundException:/res/0.wav(系统找不到指定的文件)' –

+0

该路径在'formList'中提及,并且不显示如何那是用过的。但是错误信息不够清楚吗?该文件不存在。 – weston

回答

0

问题在于获取正确的文件路径。既然你提到你已经加入你的资源文件夹添加到类路径,这应该工作:

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; 
} 
+0

以下这实际上是非常有用的,但不幸的是它会导致进一步的异常 - 'getResource()'返回X.wav的URL文件,其ArrayList'pathList'不是。我考虑让'pathList'成为一个ArrayList 而不是String,但是当我研究这个的可行性时,我发现File对象不容易使用URL对象来构造。行动方案的想法? –

+0

试试这个:'this.getClass()。getResource(Integer.toString(b)+“。wav”)。toString()' – bc004346

+0

这实际上是我的第一个倾向 - 然而它给出了以下例外: 'java.lang.NullPointerException at com.rade.gen.audioGen.formList(audioGen.java:21) at com.rade .gen.Main.init(Main.java:30) at sun.applet.AppletPanel.run(AppletPanel.java:434) at java.lang.Thread.run(Thread.java:745) ' 其中I '有困难的时间处理 –