gpt4 book ai didi

java - 如何反转音频文件?

转载 作者:行者123 更新时间:2023-12-01 21:56:52 25 4
gpt4 key购买 nike

我想知道如何获取音频文件而不是向前播放,而是向后播放。

这就是我目前所拥有的

    public void addSong(String song) throws IOException, UnsupportedAudioFileException, LineUnavailableException {

AudioInputStream audioStream = AudioSystem.getAudioInputStream(new File(song + ".wav"));

System.out.println(AudioSystem.getAudioInputStream(new File(song + ".wav")));

AudioFormat format = audioStream.getFormat();
DataLine.Info info = new DataLine.Info(Clip.class, format);
Clip clip = (Clip) AudioSystem.getLine(info);

songs.add(song);
songsMedia.add(audioStream);
clips.add(clip);
//display.makeButton(song);
}
public void playSong(String song) throws LineUnavailableException, IOException, UnsupportedAudioFileException {
if(songs.contains(song)){
int nFrames = songsMedia.get(0).getFormat().getFrameSize();

stopSong=true;
index = songs.indexOf(song);


clips.get(index).open(songsMedia.get(index));
clips.get(index).start();
playingSongs.add(clips.get(index));



}else if(song == "Pause/Play"){
System.out.print("");
}
else{
System.out.println(song);
System.out.println("Cannot Find Song");
}
}

如何从音频流中获取所有样本以便重新排列它们?

最佳答案

遗憾的是,Clip API 不会公开 Clip 所保存的数据。但是您可以通过使用 SourceDataLine 进行播放并添加一些步骤来获得您想要的内容。

首先,使用 AudioInputStream 获取所有单独的样本。

各个字节需要根据音频格式中指定的帧大小以小块的形式进行处理,并按相反的“帧”顺序排序。例如,如果音频格式每帧需要四个字节(如立体声、16 位编码),则反转将以四个字节为单位进行。

例如,一个 4 帧长的音频文件由字节 0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15 组成,反向帧顺序变为 12,13,14,15,8,9,10,11,4,5,6,7,0,1,2,3。

字节数据可以通过SourceDataLine播放。我认为您应该能够找到 SourceDataLine 播放的代码示例。您必须做出的关键更改是从逆序数组中获取播放数据,而不是像通常那样从 AudioInputStream 获取数据。

github 库 AudioCue 是围绕制作一种 super 剪辑的想法构建的,其中可以访问各个 PCM 数据帧。您可以检查方法 loadURL第 359 行是通过 AudioInputStream 将数据加载到数组中的示例。该示例将数据转换为 PCM float ,而不是将其保留为字节。所以你必须做出一些改变/简化。存储为浮点可以更轻松地执行混合和“变速”播放等操作,如果您决定还想加速或减速、前进或后退,这可能会很有用。

关于java - 如何反转音频文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58737406/

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