Advertisement
SforzandoCF

audio mixer lol

Feb 11th, 2025
129
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 2.78 KB | None | 0 0
  1. import javax.sound.sampled.AudioFormat;
  2. import javax.sound.sampled.AudioInputStream;
  3. import javax.sound.sampled.AudioSystem;
  4. import java.nio.ByteBuffer;
  5. import java.io.ByteArrayInputStream;
  6. import java.io.IOException;
  7.  
  8. public class AudioMixer {
  9.     public static final AudioFormat STANDARD_FORMAT = new AudioFormat(44100, 16, 2, false, true);
  10.    
  11.     public AudioInputStream add (int length, AudioInputStream ais1, int start1, AudioInputStream ais2, int start2) {
  12.         try {
  13.             AudioInputStream aisc1;
  14.             if (!AudioSystem.isConversionSupported(STANDARD_FORMAT, ais1.getFormat())) throw new IllegalArgumentException("incompatible formats");
  15.             aisc1 = AudioSystem.getAudioInputStream(STANDARD_FORMAT, ais1);
  16.             AudioInputStream aisc2;
  17.             if (!AudioSystem.isConversionSupported(STANDARD_FORMAT, ais2.getFormat())) throw new IllegalArgumentException("incompatible formats");
  18.             aisc2 = AudioSystem.getAudioInputStream(STANDARD_FORMAT, ais2);
  19.             ByteBuffer buf = ByteBuffer.allocate(length * 2);
  20.             for (int i = 0; i < length; i++) {
  21.                 int sum = 0;
  22.                 sum += ByteBuffer.wrap(aisc1.readNBytes(2)).getShort();
  23.                 sum += ByteBuffer.wrap(aisc2.readNBytes(2)).getShort();
  24.                 buf.putShort((short) (sum / 2));
  25.             }
  26.             return new AudioInputStream(new ByteArrayInputStream(buf.array()), STANDARD_FORMAT, length * 2);
  27.         } catch (IOException ioe) {
  28.             ioe.printStackTrace();
  29.             return null;
  30.         }
  31.     }
  32.    
  33.     public AudioInputStream subtract (int length, AudioInputStream ais1, int start1, AudioInputStream ais2, int start2) {
  34.         try {
  35.             AudioInputStream aisc1;
  36.             if (!AudioSystem.isConversionSupported(STANDARD_FORMAT, ais1.getFormat())) throw new IllegalArgumentException("incompatible formats");
  37.             aisc1 = AudioSystem.getAudioInputStream(STANDARD_FORMAT, ais1);
  38.             AudioInputStream aisc2;
  39.             if (!AudioSystem.isConversionSupported(STANDARD_FORMAT, ais2.getFormat())) throw new IllegalArgumentException("incompatible formats");
  40.             aisc2 = AudioSystem.getAudioInputStream(STANDARD_FORMAT, ais2);
  41.             ByteBuffer buf = ByteBuffer.allocate(length * 2);
  42.             for (int i = 0; i < length; i++) {
  43.                 int sum = 0;
  44.                 sum += ByteBuffer.wrap(aisc1.readNBytes(2)).getShort();
  45.                 sum -= ByteBuffer.wrap(aisc2.readNBytes(2)).getShort();
  46.                 buf.putShort((short) (Math.max(sum, 0) / 2));
  47.             }
  48.             return new AudioInputStream(new ByteArrayInputStream(buf.array()), STANDARD_FORMAT, length * 2);
  49.         } catch (IOException ioe) {
  50.             ioe.printStackTrace();
  51.             return null;
  52.         }
  53.     }
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement