Class AbstractAudioBuffer
- java.lang.Object
-
- jmri.implementation.AbstractNamedBean
-
- jmri.implementation.AbstractAudio
-
- jmri.jmrit.audio.AbstractAudioBuffer
-
- All Implemented Interfaces:
java.lang.Comparable<NamedBean>,Audio,PropertyChangeProvider,AudioBuffer,NamedBean
- Direct Known Subclasses:
JavaSoundAudioBuffer,JoalAudioBuffer,NullAudioBuffer
public abstract class AbstractAudioBuffer extends AbstractAudio implements AudioBuffer
Base implementation of the AudioBuffer class.Specific implementations will extend this base class.
This file is part of JMRI.JMRI is free software; you can redistribute it and/or modify it under the terms of version 2 of the GNU General Public License as published by the Free Software Foundation. See the "COPYING" file for a copy of this license.
JMRI 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.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from interface jmri.NamedBean
NamedBean.BadNameException, NamedBean.BadSystemNameException, NamedBean.BadUserNameException, NamedBean.DisplayOptions, NamedBean.DuplicateSystemNameException
-
-
Field Summary
Fields Modifier and Type Field Description protected static intLOOP_POINT_BOTHIdentifier of both loop pointsprotected static intLOOP_POINT_ENDIdentifier of end loop pointprotected static intLOOP_POINT_STARTIdentifier of start loop point-
Fields inherited from class jmri.implementation.AbstractNamedBean
listenerRefs, mSystemName, register
-
Fields inherited from interface jmri.Audio
AT, BUFFER, CMD_BIND_BUFFER, CMD_FADE_IN, CMD_FADE_OUT, CMD_INIT_FACTORY, CMD_LOAD_SOUND, CMD_PAUSE, CMD_PAUSE_TOGGLE, CMD_PLAY, CMD_PLAY_TOGGLE, CMD_QUEUE_BUFFERS, CMD_RESET_POSITION, CMD_RESUME, CMD_REWIND, CMD_STOP, CMD_UNQUEUE_BUFFERS, DECIMAL_PLACES, FADE_IN, FADE_NONE, FADE_OUT, LISTENER, MAX_DISTANCE, SOURCE, STATE_EMPTY, STATE_INITIAL, STATE_LOADED, STATE_MOVING, STATE_PLAYING, STATE_POSITIONED, STATE_STOPPED, UP
-
Fields inherited from interface jmri.jmrit.audio.AudioBuffer
FORMAT_16BIT_5DOT1, FORMAT_16BIT_6DOT1, FORMAT_16BIT_7DOT1, FORMAT_16BIT_MONO, FORMAT_16BIT_QUAD, FORMAT_16BIT_STEREO, FORMAT_8BIT_5DOT1, FORMAT_8BIT_6DOT1, FORMAT_8BIT_7DOT1, FORMAT_8BIT_MONO, FORMAT_8BIT_QUAD, FORMAT_8BIT_STEREO, FORMAT_UNKNOWN
-
Fields inherited from interface jmri.NamedBean
DISPLAY_NAME_FORMAT, INCONSISTENT, PROPERTY_COMMENT, PROPERTY_ENABLED, PROPERTY_KNOWN_STATE, PROPERTY_STATE, PROPERTY_USERNAME, QUOTED_NAME_FORMAT, UNKNOWN
-
-
Constructor Summary
Constructors Constructor Description AbstractAudioBuffer(java.lang.String systemName)Abstract constructor for new AudioBuffer with system nameAbstractAudioBuffer(java.lang.String systemName, java.lang.String userName)Abstract constructor for new AudioBuffer with system name and user name
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description protected abstract voidgenerateLoopBuffers(int which)Method used to generate any necessary loop buffers.protected abstract booleangenerateStreamingBuffers()Internal method used to generate buffers for streaminglonggetEndLoopPoint()Retrieves the end loop point of the sound sample stored in this bufferintgetFrameSize()Retrieves the length of a sound sample frame stored in this bufferlonggetStartLoopPoint()Retrieves the start loop point of the sound sample stored in this bufferchargetSubType()An Audio object can represent one of a number of subtypes of object.java.lang.StringgetURL()Return the url of the sound samplebooleanisStreamed()Retrieves the current streaming setting of this bufferbooleanisStreamedForced()Determines if this buffer can be loaded in full or if it must be streamed from the file.protected abstract booleanloadBuffer()Method used to load the actual sound data into the bufferprotected abstract booleanloadBuffer(java.io.InputStream s)Method used to load the actual sound data from an InputStream into the bufferbooleanloadBuffer(java.nio.ByteBuffer b, int format, int frequency)protected abstract voidremoveStreamingBuffers()Internal method used to remove streaming buffersvoidsetEndLoopPoint(long endLoopPoint)Sets the end loop point of the sound sample stored in this bufferprotected voidsetEndLoopPoint(long endLoopPoint, boolean generateLoopBuffers)Internal method used to set the end loop point of this buffer with optional generation of loop buffersvoidsetInputStream(java.io.InputStream stream)Sets the input stream of the sound samplevoidsetStartLoopPoint(long startLoopPoint)Sets the start loop point of the sound sample stored in this bufferprotected voidsetStartLoopPoint(long startLoopPoint, boolean generateLoopBuffers)Internal method used to set the start loop point of this buffer with optional generation of loop buffersvoidsetStreamed(boolean streamed)Sets that this buffer is to be streamed as opposed to loaded in full.protected voidsetStreamedForced(boolean streamedForced)Protected method used internally to modify the forced streaming flagvoidsetURL(java.lang.String url)Sets the url of the sound samplevoidstateChanged(int oldState)Method used to update the current state of the Audio object-
Methods inherited from class jmri.implementation.AbstractAudio
cleanup, dispose, getBeanType, getState, getUsageReport, roundDecimal, roundDecimal, setState
-
Methods inherited from class jmri.implementation.AbstractNamedBean
addPropertyChangeListener, addPropertyChangeListener, addPropertyChangeListener, addPropertyChangeListener, compareSystemNameSuffix, describeState, equals, firePropertyChange, getComment, getDisplayName, getDisplayName, getListenerRef, getListenerRefs, getNumPropertyChangeListeners, getProperty, getPropertyChangeListeners, getPropertyChangeListeners, getPropertyChangeListenersByReference, getPropertyKeys, getSystemName, getUserName, hashCode, removeProperty, removePropertyChangeListener, removePropertyChangeListener, setComment, setProperty, setUserName, toString, toStringSuffix, updateListenerRef, vetoableChange
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface jmri.jmrit.audio.AudioBuffer
getFormat, getFrequency, getLength
-
Methods inherited from interface jmri.NamedBean
addPropertyChangeListener, addPropertyChangeListener, compareSystemNameSuffix, compareTo, describeState, dispose, getBeanType, getComment, getDisplayName, getDisplayName, getListenerRef, getListenerRefs, getNumPropertyChangeListeners, getProperty, getPropertyChangeListenersByReference, getPropertyKeys, getRecommendedToolTip, getState, getSystemName, getUsageReport, getUserName, removeProperty, setComment, setProperty, setState, setUserName, toString, updateListenerRef, vetoableChange
-
Methods inherited from interface jmri.beans.PropertyChangeProvider
addPropertyChangeListener, addPropertyChangeListener, getPropertyChangeListeners, getPropertyChangeListeners, removePropertyChangeListener, removePropertyChangeListener
-
-
-
-
Field Detail
-
LOOP_POINT_START
protected static final int LOOP_POINT_START
Identifier of start loop point- See Also:
- Constant Field Values
-
LOOP_POINT_END
protected static final int LOOP_POINT_END
Identifier of end loop point- See Also:
- Constant Field Values
-
LOOP_POINT_BOTH
protected static final int LOOP_POINT_BOTH
Identifier of both loop points- See Also:
- Constant Field Values
-
-
Constructor Detail
-
AbstractAudioBuffer
public AbstractAudioBuffer(java.lang.String systemName)
Abstract constructor for new AudioBuffer with system name- Parameters:
systemName- AudioBuffer object system name (e.g. IAB4)
-
AbstractAudioBuffer
public AbstractAudioBuffer(java.lang.String systemName, java.lang.String userName)
Abstract constructor for new AudioBuffer with system name and user name- Parameters:
systemName- AudioBuffer object system name (e.g. IAB4)userName- AudioBuffer object user name
-
-
Method Detail
-
getSubType
public char getSubType()
Description copied from interface:AudioAn Audio object can represent one of a number of subtypes of object.This method enables us to determine which of those subtypes this particular instance is and be able to process accordingly.
Current supported subtypes are:
- B = Buffer
- L = Listener
- S = Source
- Specified by:
getSubTypein interfaceAudio- Returns:
- subType char
-
getURL
public java.lang.String getURL()
Description copied from interface:AudioBufferReturn the url of the sound sampleApplies only to sub-types:
- Buffer
- Specified by:
getURLin interfaceAudioBuffer- Returns:
- url
-
setURL
public void setURL(java.lang.String url)
Description copied from interface:AudioBufferSets the url of the sound sampleApplies only to sub-types:
- Buffer
- Specified by:
setURLin interfaceAudioBuffer- Parameters:
url- URL for location containing sound sample data
-
setInputStream
public void setInputStream(java.io.InputStream stream)
Description copied from interface:AudioBufferSets the input stream of the sound sampleApplies only to sub-types:
- Buffer
- Specified by:
setInputStreamin interfaceAudioBuffer- Parameters:
stream- InputStream containing sound sample data
-
getFrameSize
public int getFrameSize()
Description copied from interface:AudioBufferRetrieves the length of a sound sample frame stored in this bufferApplies only to sub-types:
- Buffer
- Specified by:
getFrameSizein interfaceAudioBuffer- Returns:
- length of sound sample frame in bytes
-
loadBuffer
protected abstract boolean loadBuffer()
Method used to load the actual sound data into the buffer- Returns:
- True if successful; False if not
-
loadBuffer
protected abstract boolean loadBuffer(java.io.InputStream s)
Method used to load the actual sound data from an InputStream into the buffer- Parameters:
s- InputStream containing sound data- Returns:
- True if successful; False if not
-
setStartLoopPoint
public void setStartLoopPoint(long startLoopPoint)
Description copied from interface:AudioBufferSets the start loop point of the sound sample stored in this bufferApplies only to sub-types:
- Buffer
- Specified by:
setStartLoopPointin interfaceAudioBuffer- Parameters:
startLoopPoint- position of start loop point in samples
-
loadBuffer
public boolean loadBuffer(java.nio.ByteBuffer b, int format, int frequency)
- Specified by:
loadBufferin interfaceAudioBuffer
-
setStartLoopPoint
protected void setStartLoopPoint(long startLoopPoint, boolean generateLoopBuffers)
Internal method used to set the start loop point of this buffer with optional generation of loop buffers- Parameters:
startLoopPoint- position of start loop point in samplesgenerateLoopBuffers- True if loop buffers to be generated
-
getStartLoopPoint
public long getStartLoopPoint()
Description copied from interface:AudioBufferRetrieves the start loop point of the sound sample stored in this bufferApplies only to sub-types:
- Buffer
- Specified by:
getStartLoopPointin interfaceAudioBuffer- Returns:
- position of start loop point in samples
-
setEndLoopPoint
public void setEndLoopPoint(long endLoopPoint)
Description copied from interface:AudioBufferSets the end loop point of the sound sample stored in this bufferApplies only to sub-types:
- Buffer
- Specified by:
setEndLoopPointin interfaceAudioBuffer- Parameters:
endLoopPoint- position of end loop point in samples
-
setEndLoopPoint
protected void setEndLoopPoint(long endLoopPoint, boolean generateLoopBuffers)
Internal method used to set the end loop point of this buffer with optional generation of loop buffers- Parameters:
endLoopPoint- position of end loop point in samplesgenerateLoopBuffers- True if loop buffers to be generated
-
getEndLoopPoint
public long getEndLoopPoint()
Description copied from interface:AudioBufferRetrieves the end loop point of the sound sample stored in this bufferApplies only to sub-types:
- Buffer
- Specified by:
getEndLoopPointin interfaceAudioBuffer- Returns:
- position of end loop point in samples
-
setStreamed
public void setStreamed(boolean streamed)
Description copied from interface:AudioBufferSets that this buffer is to be streamed as opposed to loaded in full. Can only be turned off whenisStreamedForcedis not set.Applies only to sub-types:
- Buffer
- Specified by:
setStreamedin interfaceAudioBuffer- Parameters:
streamed- buffer is streamed from file or loaded in full- See Also:
AudioBuffer.isStreamedForced()
-
isStreamed
public boolean isStreamed()
Description copied from interface:AudioBufferRetrieves the current streaming setting of this bufferApplies only to sub-types:
- Buffer
- Specified by:
isStreamedin interfaceAudioBuffer- Returns:
- current streaming setting
-
setStreamedForced
protected void setStreamedForced(boolean streamedForced)
Protected method used internally to modify the forced streaming flag- Parameters:
streamedForced- True if required; False if not
-
isStreamedForced
public boolean isStreamedForced()
Description copied from interface:AudioBufferDetermines if this buffer can be loaded in full or if it must be streamed from the file. Forced streaming is usually restricted to larger sound samples that are otherwise too large to fit directly into memory.Applies only to sub-types:
- Buffer
- Specified by:
isStreamedForcedin interfaceAudioBuffer- Returns:
- True if buffer must be streamed; False it can be loaded in full
-
generateLoopBuffers
protected abstract void generateLoopBuffers(int which)
Method used to generate any necessary loop buffers.- Parameters:
which- the loop buffer to generate:LOOP_POINT_STARTfor the start loop bufferLOOP_POINT_ENDfor the end loop bufferLOOP_POINT_BOTHfor both loop buffers
-
generateStreamingBuffers
protected abstract boolean generateStreamingBuffers()
Internal method used to generate buffers for streaming- Returns:
- True if successful; False if not
-
removeStreamingBuffers
protected abstract void removeStreamingBuffers()
Internal method used to remove streaming buffers
-
stateChanged
public void stateChanged(int oldState)
Description copied from interface:AudioMethod used to update the current state of the Audio object- Specified by:
stateChangedin interfaceAudio- Parameters:
oldState- the former state
-
-