根据字符串输出传递正确的文件

时间:2014-10-10 00:14:06

标签: java

我有以下代码将两个音频文件合并为一个:

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.实现此目的的最佳方法是什么?

1 个答案:

答案 0 :(得分:0)

创建一个数组或List项,以便wavfile1位于索引0,wavfile2位于索引1,依此类推。

String数组中取出每个元素并转换为int,从中减去一个(因为数组和列表为零索引),这将成为“波形文件数组”的索引。 ..

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

...现在这容易出现一些问题,尤其是将String转换为int ......

相反,您可以改为使用Map,其中每个wave文件都映射到相应的String id

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

然后你只需使用String数组中的值来查找它......

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

作为一些想法......

请查看Collections Trail了解更多详情和想法......