0
這是我的問題,有人給了我一個函數,如果我理解的很好,可以將一些聲音樣本放入數組列表中。將帶有音頻的ArrayList轉換爲.wav文件(Java)
我想用這個音軌創建一個.wav文件,我真的不知道該怎麼做。
下面是代碼,因爲也許我只是不明白它在所有...
public class Track {
private ArrayList<Sample> sounds;
private AudioFormat audioFormat;
TargetDataLine targetDataLine;
public Track()
{
this.sounds = new ArrayList <Sample>();
}
/*** Sort the sample on the track by ascending start time ***/
public void sortTrack() {
Collections.sort(sounds);
}
/**
* Add a sample to the track.
* @param fic location to the audio file.
* @param sT set the start time in ms of the sound on the track.
*/
public void addSound(String fic, long sT) {
sounds.add(new Sample(fic, sT));
}
/**
* Delete a sample to the track.
* @param fic location to the audio file.
* @param sT set the start time in ms of the sound on the track.
*/
public void deleteSound(String fic, long sT) {
int i;
for (i = 0; i < sounds.size() &&(
sounds.get(i).getAudioFile().getName() == fic &&
sounds.get(i).getStartTime() == sT); ++i) {}
if (i < sounds.size()) sounds.remove(i);
}
這是樣品,在上面的代碼進口。
public Sample (String fileLocation, long sT) {
try{
audioFile = new File(fileLocation);
istream = AudioSystem.getAudioInputStream(audioFile);
format = istream.getFormat();
startTime = sT;
timeLenght = (audioFile.length()/(format.getFrameSize() * format.getFrameRate())) * 1000;
}
catch (UnsupportedAudioFileException e){
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
如何定義「Sample」?請包括進口。此外,#deleteSound(String,long)中有幾個明顯的問題, 。首先,String比較決不會使用==引用標識比較器,但總是使用#equals(Object)方法。這是因爲在Java中,字符串是對象,而不是原始值。另外,在手動迭代時刪除集合的元素收集是不好的做法Iterator及其#remove()操作。 – hiergiltdiestfu