2014-10-10 43 views
0

正確的文件我有以下的代碼合併兩個音頻文件合併成一個:傳遞基於字符串輸出中

import java.io.File; 
import java.io.IOException; 
import java.io.SequenceInputStream; 
import javax.sound.sampled.AudioFileFormat; 
import javax.sound.sampled.AudioInputStream; 
import javax.sound.sampled.AudioSystem; 

public class WavAppender { 
    public static void main(String[] args) { 
     String wavFile1 = "D:\\wav1.wav"; 
     String wavFile2 = "D:\\wav2.wav"; 

     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("D:\\wavAppended.wav")); 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
} 

我將有一個字符串的格式如下[1,2,3,4, 5]。根據字符串,我需要選擇適當的wav文件。例如,如果字符串格式爲[3,4,5,6,7],則需要發送wavfile 3,wavfile4,wavfile5,wavfile6和wavfile 7.實現此目的的最佳方法是什麼?

回答

0

創建項目的數組或List,以便wavfile1位於索引0處,wavfile2位於索引1處等等等等。

String陣列以每個元素,並轉換爲以int,減一它(如數組和列表0開始索引),並且成爲你的指數爲「波形文件陣」 ......

String waveFile = waveFiles[Integer.parseInt(indicies[0]) - 1]; 

...現在,這容易出現一些問題,特別是在Stringint的轉換......

相反,你可以使用一個Map代替,其中每個波形文件映射到相應的String ID

Map<String, String> waveFiles = new ...; 
waveFiles.put("1", "WaveFile1"); 
waveFiles.put("2", "WaveFile2"); 
//... 

,那麼只需在使用該值從String陣列來關注一下吧......

String waveFile = waveFiles.get(indicies[0]); 

由於一些想法......

看看在Collections Trail更多細節和想法......

+0

是不是第二個例子('Map')是什麼? – MadProgrammer 2014-10-10 03:28:19