/* * Copyright 2007 Sun Microsystems, Inc. * * This file is part of jVoiceBridge. * * jVoiceBridge is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 as * published by the Free Software Foundation and distributed hereunder * to you. * * jVoiceBridge is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * Sun designates this particular file as subject to the "Classpath" * exception as provided by Sun in the License file that accompanied this * code. */ package com.sun.voip; import java.io.IOException; /* * Return samples from a linear data array. * FreeTTS generates a linear data array. */ public class LinearDataAudioSource implements AudioSource { private int[] linearData; private int sampleRate; private int channels; private int linearOffset = 0; public LinearDataAudioSource(int[] linearData, int sampleRate, int channels) { this.linearData = linearData; this.sampleRate = sampleRate; this.channels = channels; } /* * Get linear data from the linear data array. */ public int[] getLinearData(int sampleTime) throws IOException { if (linearOffset >= linearData.length) { return null; } int byteLen = sampleRate * sampleTime * channels * 2 / 1000; int[] data = new int[byteLen / 2]; int dataOffset = 0; for (int i = 0; i < byteLen; i += 2) { if (linearOffset >= linearData.length) { /* * We've reached the end of the linear data. * Pad the rest of linearData will be zero which * is linear silence. */ break; } data[dataOffset++] = linearData[linearOffset++]; } return data; } public void rewind() throws IOException { linearOffset = 0; } public void done() { } public int getSampleRate() { return sampleRate; } public int getChannels() { return channels; } }