gpt4 book ai didi

java - 切割一个波形文件

转载 作者:塔克拉玛干 更新时间:2023-11-02 07:55:34 24 4
gpt4 key购买 nike

如何使用 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 ?

我该怎么做?

最佳答案

这最初由 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

关于java - 切割一个波形文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7462754/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com