我有以下代码将两个音频文件合并为一个:
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 :(得分: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了解更多详情和想法......