public class Microphone extends BaseDataProcessor
A Microphone captures audio data from the system's underlying audio input systems. Converts these audio data
into Data objects. When the method startRecording()
is called, a new thread will be created and used to
capture audio, and will stop when stopRecording()
is called. Calling getData()
returns the
captured audio data as Data objects.
This Microphone will attempt to obtain an audio device with the format
specified in the configuration. If such a device with that format cannot be obtained, it will try to obtain a device
with an audio format that has a higher sample rate than the configured sample rate, while the other parameters of the
format (i.e., sample size, endianness, sign, and channel) remain the same. If, again, no such device can be obtained,
it flags an error, and a call startRecording
returns false.
Modifier and Type | Field and Description |
---|---|
static java.lang.String |
PROP_BIG_ENDIAN
The property specify the endianness of the data.
|
static java.lang.String |
PROP_BITS_PER_SAMPLE
The property for the number of bits per value.
|
static java.lang.String |
PROP_BUFFER_SIZE
The property that specifies the size of the buffer used to store
audio samples recorded from the microphone.
|
static java.lang.String |
PROP_CHANNELS
The property specifying the number of channels.
|
static java.lang.String |
PROP_CLOSE_BETWEEN_UTTERANCES
The property that specifies whether or not the microphone will release the audio between utterances.
|
static java.lang.String |
PROP_KEEP_LAST_AUDIO
The property that specifies whether to keep the audio data of an utterance around until the next utterance
is recorded.
|
static java.lang.String |
PROP_MSEC_PER_READ
The property that specifies the number of milliseconds of audio data to read each time from the underlying
Java Sound audio device.
|
static java.lang.String |
PROP_SAMPLE_RATE
The property for the sample rate of the data.
|
static java.lang.String |
PROP_SELECT_CHANNEL
The property that specifies the channel to use if the audio is stereo
|
static java.lang.String |
PROP_SELECT_MIXER
The property that specifies the mixer to use.
|
static java.lang.String |
PROP_SIGNED
The property specify whether the data is signed.
|
static java.lang.String |
PROP_STEREO_TO_MONO
The property that specifies how to convert stereo audio to mono.
|
logger
Constructor and Description |
---|
Microphone() |
Microphone(int sampleRate,
int bitsPerSample,
int channels,
boolean bigEndian,
boolean signed,
boolean closeBetweenUtterances,
int msecPerRead,
boolean keepLastAudio,
java.lang.String stereoToMono,
int selectedChannel,
java.lang.String selectedMixerIndex,
int audioBufferSize) |
Modifier and Type | Method and Description |
---|---|
void |
clear()
Clears all cached audio data.
|
javax.sound.sampled.AudioFormat |
getAudioFormat()
Returns the format of the audio recorded by this Microphone.
|
Data |
getData()
Reads and returns the next Data object from this Microphone, return null if there is no more audio data.
|
Utterance |
getUtterance()
Returns the current Utterance.
|
boolean |
hasMoreData()
Returns true if there is more data in the Microphone.
|
void |
initialize()
Constructs a Microphone with the given InputStream.
|
boolean |
isRecording()
Returns true if this Microphone is recording.
|
void |
newProperties(PropertySheet ps)
This method is called when this configurable component needs to be reconfigured.
|
boolean |
startRecording()
Starts recording audio.
|
void |
stopRecording()
Stops recording audio.
|
getPredecessor, setPredecessor
getName, initLogger, toString
@S4Integer(defaultValue=16000) public static final java.lang.String PROP_SAMPLE_RATE
@S4Boolean(defaultValue=true) public static final java.lang.String PROP_CLOSE_BETWEEN_UTTERANCES
@S4Integer(defaultValue=10) public static final java.lang.String PROP_MSEC_PER_READ
@S4Integer(defaultValue=16) public static final java.lang.String PROP_BITS_PER_SAMPLE
@S4Integer(defaultValue=1) public static final java.lang.String PROP_CHANNELS
@S4Boolean(defaultValue=true) public static final java.lang.String PROP_BIG_ENDIAN
@S4Boolean(defaultValue=true) public static final java.lang.String PROP_SIGNED
@S4Boolean(defaultValue=false) public static final java.lang.String PROP_KEEP_LAST_AUDIO
@S4String(defaultValue="average", range={"average","selectChannel"}) public static final java.lang.String PROP_STEREO_TO_MONO
@S4Integer(defaultValue=0) public static final java.lang.String PROP_SELECT_CHANNEL
@S4String(defaultValue="default") public static final java.lang.String PROP_SELECT_MIXER
AudioTool
,
Constant Field Values@S4Integer(defaultValue=6400) public static final java.lang.String PROP_BUFFER_SIZE
public Microphone(int sampleRate, int bitsPerSample, int channels, boolean bigEndian, boolean signed, boolean closeBetweenUtterances, int msecPerRead, boolean keepLastAudio, java.lang.String stereoToMono, int selectedChannel, java.lang.String selectedMixerIndex, int audioBufferSize)
sampleRate
- sample rate of the databitsPerSample
- number of bits per value.channels
- number of channels.bigEndian
- the endianness of the datasigned
- whether the data is signed.closeBetweenUtterances
- whether or not the microphone will release the audio between utterances. On
certain systems (Linux for one), closing and reopening the audio does not work too well. The default is false for
Linux systems, true for othersmsecPerRead
- the number of milliseconds of audio data to read each time from the underlying
Java Sound audio device.keepLastAudio
- whether to keep the audio data of an utterance around until the next utterance
is recorded.stereoToMono
- how to convert stereo audio to mono. Currently, the possible values are
"average", which averages the samples from at each channel, or "selectChannel", which chooses audio only from
that channel. If you choose "selectChannel", you should also specify which channel to use with the
"selectChannel" property.selectedChannel
- the channel to use if the audio is stereoselectedMixerIndex
- the mixer to use. The value can be "default," (which means let the
AudioSystem decide), "last," (which means select the last Mixer supported by the AudioSystem), which appears to
be what is often used for USB headsets, or an integer value which represents the index of the Mixer.Info that is
returned by AudioSystem.getMixerInfo(). To get the list of Mixer.Info objects, run the AudioTool application with
a command line argument of "-dumpMixers".audioBufferSize
- buffer sizepublic Microphone()
public void newProperties(PropertySheet ps) throws PropertyException
Configurable
newProperties
in interface Configurable
newProperties
in class ConfigurableAdapter
ps
- a property sheet holding the new dataPropertyException
- if there is a problem with the properties.public void initialize()
initialize
in interface DataProcessor
initialize
in class BaseDataProcessor
public javax.sound.sampled.AudioFormat getAudioFormat()
public Utterance getUtterance()
public boolean isRecording()
public boolean startRecording()
public void stopRecording()
public void clear()
public Data getData() throws DataProcessingException
startRecording()
and stopRecording()
is cached in an
Utterance object. Calling this method basically returns the next chunk of audio data cached in this Utterance.getData
in interface DataProcessor
getData
in class BaseDataProcessor
null
if none is availableDataProcessingException
- if there is a data processing errorpublic boolean hasMoreData()