mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-09 23:27:24 -05:00
152 lines
4.2 KiB
Java
152 lines
4.2 KiB
Java
/*******************************************************************************
|
|
* sdr-trunk
|
|
* Copyright (C) 2014-2018 Dennis Sheirer
|
|
*
|
|
* 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 io.github.dsheirer.sample.buffer;
|
|
|
|
import io.github.dsheirer.channel.metadata.Metadata;
|
|
|
|
/**
|
|
* Reusable audio packet that carries audio sample data, associated metadata and a type to indicate if this
|
|
* packet contains audio data or is an end-audio packet.
|
|
*/
|
|
public class ReusableAudioPacket extends AbstractReusableBuffer
|
|
{
|
|
private Type mType = Type.AUDIO;
|
|
private Metadata mMetadata;
|
|
private float[] mAudioSamples;
|
|
|
|
/**
|
|
* Constructs a reusable audio packet. This constructor is package private and should only be used by
|
|
* a reusable audio packet queue.
|
|
*
|
|
* @param bufferDisposedListener to be notified when all users have released the packet
|
|
* @param length of the sample buffer
|
|
*/
|
|
ReusableAudioPacket(IReusableBufferDisposedListener bufferDisposedListener, int length)
|
|
{
|
|
super(bufferDisposedListener);
|
|
resize(length);
|
|
}
|
|
|
|
/**
|
|
* Indicates if this packet has associated metadata
|
|
*/
|
|
public boolean hasMetadata()
|
|
{
|
|
return mMetadata != null;
|
|
}
|
|
|
|
/**
|
|
* Associated audio metadata
|
|
*/
|
|
public Metadata getMetadata()
|
|
{
|
|
return mMetadata;
|
|
}
|
|
|
|
/**
|
|
* Sets the metadata associated with this audio packet.
|
|
*/
|
|
public void setMetadata(Metadata metadata)
|
|
{
|
|
mMetadata = metadata;
|
|
}
|
|
|
|
/**
|
|
* Indicates the type of audio packet
|
|
*/
|
|
public Type getType()
|
|
{
|
|
return mType;
|
|
}
|
|
|
|
/**
|
|
* Sets the type of audio packet.
|
|
*
|
|
* This method is package private and is used by the reusable audio packet queue.
|
|
*/
|
|
void setType(Type type)
|
|
{
|
|
mType = type;
|
|
}
|
|
|
|
/**
|
|
* PCM 8 kHz audio samples
|
|
*/
|
|
public float[] getAudioSamples()
|
|
{
|
|
return mAudioSamples;
|
|
}
|
|
|
|
/**
|
|
* Indicates if this audio packet contains audio samples.
|
|
*/
|
|
public boolean hasAudioSamples()
|
|
{
|
|
return mType != null && mType == Type.AUDIO && mAudioSamples != null;
|
|
}
|
|
|
|
/**
|
|
* Resizes the internal audio sample buffer.
|
|
*/
|
|
public void resize(int length)
|
|
{
|
|
if(mAudioSamples == null || mAudioSamples.length != length)
|
|
{
|
|
mAudioSamples = new float[length];
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Loads a copy of the float sample data from the reusable buffer into this audio packet, resizing the
|
|
* internal audio sample buffer as necessary.
|
|
*
|
|
* @param reusableBuffer to load audio sample data from
|
|
*/
|
|
public void loadAudioFrom(ReusableBuffer reusableBuffer)
|
|
{
|
|
if(reusableBuffer.getSamples().length != mAudioSamples.length)
|
|
{
|
|
resize(reusableBuffer.getSamples().length);
|
|
}
|
|
|
|
System.arraycopy(reusableBuffer.getSamples(), 0, mAudioSamples, 0, reusableBuffer.getSamples().length);
|
|
}
|
|
|
|
/**
|
|
* Loads the audio sample array into this buffer.
|
|
*
|
|
* Note: this method is used for compatibility with legacy audio converters that have not been updated to
|
|
* use reusable audio packets and is therefore deprecated and will be removed once converters (ie JMBE) have
|
|
* been updated.
|
|
*
|
|
* @param audio to load
|
|
*/
|
|
@Deprecated
|
|
public void loadAudioFrom(float[] audio)
|
|
{
|
|
mAudioSamples = audio;
|
|
}
|
|
|
|
/**
|
|
* Audio Packet Type
|
|
*/
|
|
public enum Type
|
|
{
|
|
AUDIO,
|
|
END;
|
|
}
|
|
}
|