package call; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import javax.sound.sampled.AudioFormat; import org.apache.commons.lang3.StringUtils; public class PcmFormat extends AbstractId implements Format { private final int rate; private final int samplesize; private final int channels; private final AudioFormat audioformat; public PcmFormat(int rate, int samplesize, int channels) { this.rate = rate; this.samplesize = samplesize; this.channels = channels; this.audioformat = new AudioFormat(Config.ENCODING_PCM_SIGNED, rate, samplesize, channels, (samplesize / 8) * channels, rate, Config.PCM_DEFAULT_BIG_ENDIAN); } public int getRate() { return rate; } public int getSamplesize() { return samplesize; } public int getChannels() { return channels; } @Override public AudioFormat getAudioFormat() { return audioformat; } @Override public String getId() { return "rate=" + rate + ",samplesize=" + samplesize + ",channels=" + channels; } public float getBitrate() { return calcBitrate(rate, samplesize, channels); } public float getByterate() { return getBitrate() / 8; } @Override public String toString() { return "PCM: rate=" + rate + ", samplesize=" + samplesize + ", channels=" + channels + ", bitrate=" + getBitrate() + ", kB/s=" + (getByterate() / 1024) + ")"; } public static float calcBitrate(float rate, int samplesize, int channels) { return rate * samplesize * channels; } public static class Serializer implements IdObjectSerializer<PcmFormat>, IdListSerializer<PcmFormat> { @Override public String serialize(PcmFormat deserialized) { return StringUtils.join( Arrays.asList(new String[] { "" + deserialized.getRate(), "" + deserialized.getSamplesize(), "" + deserialized.getChannels() }), ","); } @Override public PcmFormat deserialize(String serialized) throws UnknownDefaultValueException { String[] parts = StringUtils.split(serialized, ","); if (parts.length == 3 && Primitives.isInteger(parts[0]) && Primitives.isInteger(parts[1]) && Primitives.isInteger(parts[2])) return new PcmFormat(Primitives.toInteger(parts[0], 0), Primitives.toInteger(parts[1], 0), Primitives.toInteger(parts[2], 0)); else return getDefaultValue(); } @Override public String serializeAll(Collection<? extends PcmFormat> deserialized) { List<String> serialized = new ArrayList<>(); for (PcmFormat format : deserialized) { serialized.add(serialize(format)); } return StringUtils.join(serialized, ";"); } @Override public Collection<PcmFormat> deserializeAll(String serialized) { List<PcmFormat> deserialized = new ArrayList<>(); String[] all = StringUtils.split(serialized, ";"); for (String elem : all) { try { deserialized.add(deserialize(elem)); } catch (UnknownDefaultValueException e) {} } return deserialized; } @Override public String getConfigPrefix() { return "(pcmformat)"; } @Override public PcmFormat getDefaultValue() throws UnknownDefaultValueException { throw new UnknownDefaultValueException("???"); } } }