java之从原始文件中获取最多 x 字节的 AudioInputStream(剪切音频文件)

lexus 阅读:45 2024-06-20 12:54:19 评论:0

我如何阅读 AudioInputStream达到特定数量的字节/微秒位置?
例如 :

AudioInputStream ais = AudioSystem.getAudioInputStream( new File("file.wav") ); 
// let the file.wav be of y bytes 

现在我想获得一个 AudioInputStream有多达一些的数据 x字节其中 x < y字节。

我怎样才能做到这一点 ?

我一直在努力思考,但没有任何方法可以做到这一点?

请您参考如下方法:

下面的代码向您展示了如何复制音频流的一部分,从一个文件读取并写入另一个文件。

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); } 
    } 
  } 
 
  public static void println(Object o) { 
    System.out.println(o); 
  } 
 
  public static void print(Object o) { 
    System.out.print(o); 
  } 
 
} 


标签:java
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

关注我们

一个IT知识分享的公众号