obtaining an AudioInputStream upto some x bytes from the original (Cutting an Audio File)

后端 未结 2 1800
星月不相逢
星月不相逢 2020-12-17 05:39

How can i read an AudioInputStream upto a particular number of bytes/microsecond position ? For example :

AudioInputStream ais = AudioSystem.get         


        
相关标签:
2条回答
  • 2020-12-17 06:10

    Now that you have the stream you can read one byte at a time up to the maximum number ob bytes you want using read(), or read a fixed number of bytes with read(byte[] b).

    0 讨论(0)
  • 2020-12-17 06:27

    The code below shows you how to copy a part of an audio stream, reading from one file and writing to another.

    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);
      }
    
    }
    
    0 讨论(0)
提交回复
热议问题