Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import javax.sound.sampled.AudioFormat;
- import javax.sound.sampled.AudioInputStream;
- import javax.sound.sampled.AudioSystem;
- import java.nio.ByteBuffer;
- import java.io.ByteArrayInputStream;
- import java.io.IOException;
- public class AudioMixer {
- public static final AudioFormat STANDARD_FORMAT = new AudioFormat(44100, 16, 2, false, true);
- public AudioInputStream add (int length, AudioInputStream ais1, int start1, AudioInputStream ais2, int start2) {
- try {
- AudioInputStream aisc1;
- if (!AudioSystem.isConversionSupported(STANDARD_FORMAT, ais1.getFormat())) throw new IllegalArgumentException("incompatible formats");
- aisc1 = AudioSystem.getAudioInputStream(STANDARD_FORMAT, ais1);
- AudioInputStream aisc2;
- if (!AudioSystem.isConversionSupported(STANDARD_FORMAT, ais2.getFormat())) throw new IllegalArgumentException("incompatible formats");
- aisc2 = AudioSystem.getAudioInputStream(STANDARD_FORMAT, ais2);
- ByteBuffer buf = ByteBuffer.allocate(length * 2);
- for (int i = 0; i < length; i++) {
- int sum = 0;
- sum += ByteBuffer.wrap(aisc1.readNBytes(2)).getShort();
- sum += ByteBuffer.wrap(aisc2.readNBytes(2)).getShort();
- buf.putShort((short) (sum / 2));
- }
- return new AudioInputStream(new ByteArrayInputStream(buf.array()), STANDARD_FORMAT, length * 2);
- } catch (IOException ioe) {
- ioe.printStackTrace();
- return null;
- }
- }
- public AudioInputStream subtract (int length, AudioInputStream ais1, int start1, AudioInputStream ais2, int start2) {
- try {
- AudioInputStream aisc1;
- if (!AudioSystem.isConversionSupported(STANDARD_FORMAT, ais1.getFormat())) throw new IllegalArgumentException("incompatible formats");
- aisc1 = AudioSystem.getAudioInputStream(STANDARD_FORMAT, ais1);
- AudioInputStream aisc2;
- if (!AudioSystem.isConversionSupported(STANDARD_FORMAT, ais2.getFormat())) throw new IllegalArgumentException("incompatible formats");
- aisc2 = AudioSystem.getAudioInputStream(STANDARD_FORMAT, ais2);
- ByteBuffer buf = ByteBuffer.allocate(length * 2);
- for (int i = 0; i < length; i++) {
- int sum = 0;
- sum += ByteBuffer.wrap(aisc1.readNBytes(2)).getShort();
- sum -= ByteBuffer.wrap(aisc2.readNBytes(2)).getShort();
- buf.putShort((short) (Math.max(sum, 0) / 2));
- }
- return new AudioInputStream(new ByteArrayInputStream(buf.array()), STANDARD_FORMAT, length * 2);
- } catch (IOException ioe) {
- ioe.printStackTrace();
- return null;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement