If you think the Android project voicesmith listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.
Java Source Code
/*
* Voicesmith <http://voicesmith.jurihock.de/>
*/*fromwww.java2s.com*/
* Copyright (c) 2011-2014 Juergen Hock
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program 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/>.
*/package de.jurihock.voicesmith.io.pcm;
import java.io.IOException;
import java.util.Arrays;
import android.content.Context;
import de.jurihock.voicesmith.audio.HeadsetMode;
publicfinalclass DelayedPcmInDevice extends PcmInDevice
{
privatedouble delayTime = 0;
privateint delaySamples = 0;
privateint remainingZeros = 0;
public DelayedPcmInDevice(Context context, HeadsetMode headsetMode)
throws IOException
{
super(context, headsetMode);
}
public DelayedPcmInDevice(Context context, int sampleRate)
throws IOException
{
super(context, sampleRate);
}
public DelayedPcmInDevice(Context context) throws IOException
{
super(context);
}
publicdouble getDelay()
{
return delayTime;
}
publicvoid setDelay(double seconds)
{
delayTime = seconds;
finalint oldDelay = delaySamples - remainingZeros;
if (oldDelay > 0)
{
finalshort[] oldSamples = newshort[oldDelay];
read(oldSamples);
}
delaySamples = (int) (delayTime * getSampleRate());
remainingZeros = delaySamples;
}
@Override
publicint read(short[] buffer, int offset, int count)
{
if (getDelay() == 0 || remainingZeros == 0)
{
return super.read(buffer, offset, count);
}
if (remainingZeros >= count)
{
try
{
Arrays.fill(buffer, offset, offset + count, (short) 0);
return count;
}
finally
{
remainingZeros -= count;
}
}
else
{
try
{
Arrays.fill(buffer, offset, offset + remainingZeros, (short) 0);
return super.read(buffer, offset + remainingZeros,
count - remainingZeros);
}
finally
{
remainingZeros = 0;
}
}
}
}