package javaforce.voip; import java.util.*; /** * Either plays wav file or generates intermittent beep to party member on hold. */ public class MusicOnHold { private final double vol = 4000.0; private int idx = 0; private int off = 0; private static final int freq = 500; private static Wav wav; private int wavIdx; /** Fills next 20ms (160 samples) into buffer with MOH */ public boolean getSamples(short buffer[]) { if (wav != null) { System.arraycopy(wav.samples, wavIdx, buffer, 0, 160); wavIdx += 160; if (wavIdx >= wav.samples.length) { wavIdx = 0; } return true; } //generate an intermitent beep idx++; if (idx == 50 * 6) idx = 0; if (idx < 50 * 5) { Arrays.fill(buffer, (short)0); return true; } for (int a = 0; a < 160; a++) { buffer[a] = (short) (Math.sin((2.0 * Math.PI / (8000.0 / freq)) * (a + off)) * vol); } off += 160; if (off == 8000) { off = 0; } return true; } public static void loadWav(String fn) { wav = new Wav(); if (!wav.load(fn)) { wav = null; } } }