如何使用java剪切.wave
文件?
我想要的是:
当用户按下标有cut
的按钮时,它应该将前一个mark
的音频(以纳秒为单位)切换到当前位置(以纳秒为单位)。 (标记在声音被切断后以纳秒为单位定位到当前位置)我得到那段音频后,我想保存那段音频文件。
// obtain an audio stream
long mark = 0; // initially set to zero
//get the current position in nanoseconds
// after that how to proceed ?
// another method ?
我该怎么做?
答案 0 :(得分:5)
最初由Martin Dow
回答import java.io.*;
import javax.sound.sampled.*;
class AudioFileProcessor {
public static void main(String[] args) {
copyAudio("/tmp/uke.wav", "/tmp/uke-shortened.wav", 2, 1);
}
public static void copyAudio(String sourceFileName, String destinationFileName, int startSecond, int secondsToCopy) {
AudioInputStream inputStream = null;
AudioInputStream shortenedStream = null;
try {
File file = new File(sourceFileName);
AudioFileFormat fileFormat = AudioSystem.getAudioFileFormat(file);
AudioFormat format = fileFormat.getFormat();
inputStream = AudioSystem.getAudioInputStream(file);
int bytesPerSecond = format.getFrameSize() * (int)format.getFrameRate();
inputStream.skip(startSecond * bytesPerSecond);
long framesOfAudioToCopy = secondsToCopy * (int)format.getFrameRate();
shortenedStream = new AudioInputStream(inputStream, format, framesOfAudioToCopy);
File destinationFile = new File(destinationFileName);
AudioSystem.write(shortenedStream, fileFormat.getType(), destinationFile);
} catch (Exception e) {
println(e);
} finally {
if (inputStream != null) try { inputStream.close(); } catch (Exception e) { println(e); }
if (shortenedStream != null) try { shortenedStream.close(); } catch (Exception e) { println(e); }
}
}
}
最初回答HERE
答案 1 :(得分:0)
AudioSystem.getAudioInputStream(File)
)。getFormat()
中的AudioFormat确定您需要从流中读取的字节数和位置。您可能还想查看Tritonus及其AudioOutputStream,它可能会让事情变得更轻松。
答案 2 :(得分:0)
有一个api可以帮助您实现目标http://code.google.com/p/musicg-sound-api/