Интерфейс TargetDataLine
- Все суперинтерфейсы:
AutoCloseable, DataLine, Line
public interface TargetDataLine extends DataLine
DataLine, из которого можно считывать аудиоданные. Наиболее распространённый пример — линия данных, получающая данные от устройства захвата звука. (Устройство реализовано как микшер, записывающий данные в линию входных данных.) Обратите внимание, что соглашение об именовании этого интерфейса отражает взаимосвязь линии и её микшера. С точки зрения приложения линия входных данных может выступать в качестве источника аудиоданных.
Линию входных данных можно получить от микшера, вызвав метод getLine интерфейса Mixer с соответствующим объектом DataLine.Info.
Интерфейс TargetDataLine предоставляет метод для чтения захваченных данных из буфера линии входных данных. Приложения, записывающие звук, должны считывать данные из линии входных данных достаточно быстро, чтобы предотвратить переполнение буфера, которое может привести к разрывам в захваченных данных, воспринимаемым как щелчки. Приложения могут использовать метод available, определённый в интерфейсе DataLine, чтобы определить объём данных, находящихся в данный момент в очереди буфера линии данных. Если буфер переполняется, самые старые данные в очереди отбрасываются и заменяются новыми.
- С момента версии:
- 1.3
- См. также:
Краткое описание вложенных классов
Вложенные классы и интерфейсы, объявленные в интерфейсе DataLine
DataLine.Info | Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static class |
DataLine.Info |
Помимо информации о классе, унаследованной от суперкласса, DataLine.Info предоставляет дополнительные сведения, относящиеся к линиям данных. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
open |
Открывает линию в указанном формате, обеспечивая получение необходимых системных ресурсов и её готовность к работе. |
void |
open |
Открывает линию в указанном формате и с заданным размером буфера, обеспечивая получение необходимых системных ресурсов и её готовность к работе. |
int |
read |
Считывает аудиоданные из входного буфера линии данных. |
Методы, объявленные в интерфейсе DataLine
available, drain, flush, getBufferSize, getFormat, getFramePosition, getLevel, getLongFramePosition, getMicrosecondPosition, isActive, isRunning, start, stop | Модификатор и тип | Метод | Описание |
|---|---|---|
int |
available() |
Возвращает количество байтов данных, доступных в данный момент приложению для обработки во внутреннем буфере линии данных. |
void |
drain() |
Извлекает данные из очереди линии, продолжая ввод-вывод данных до опустошения внутреннего буфера линии данных. |
void |
flush() |
Удаляет данные из очереди линии. |
int |
getBufferSize() |
Возвращает максимальное количество байтов данных, которое помещается во внутренний буфер линии данных. |
AudioFormat |
getFormat() |
Возвращает текущий формат аудиоданных линии данных (кодировку, частоту дискретизации, количество каналов и т. д.). |
int |
getFramePosition() |
Возвращает текущую позицию в аудиоданных в кадрах сэмплов. |
float |
getLevel() |
Возвращает текущий уровень громкости линии. |
long |
getLongFramePosition() |
Возвращает текущую позицию в аудиоданных в кадрах сэмплов. |
long |
getMicrosecondPosition() |
Возвращает текущую позицию в аудиоданных в микросекундах. |
boolean |
isActive() |
Указывает, выполняет ли линия активный ввод-вывод данных (например, воспроизведение или захват). |
boolean |
isRunning() |
Указывает, работает ли линия. |
void |
start() |
Позволяет линии выполнять ввод-вывод данных. |
void |
stop() |
Останавливает линию. |
Методы, объявленные в интерфейсе Line
addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener | Модификатор и тип | Метод | Описание |
|---|---|---|
void |
addLineListener |
Добавляет слушателя к этой линии. |
void |
close() |
Закрывает линию, указывая, что используемые ею системные ресурсы можно освободить. |
Control |
getControl |
Возвращает элемент управления указанного типа, если он имеется. |
Control[] |
getControls() |
Возвращает набор элементов управления, связанных с этой линией. |
Line.Info |
getLineInfo() |
Возвращает объект Line.Info, описывающий эту линию. |
boolean |
isControlSupported |
Указывает, поддерживает ли линия элемент управления указанного типа. |
boolean |
isOpen() |
Указывает, открыта ли линия, то есть зарезервировала ли она системные ресурсы и готова ли к работе, даже если в данный момент звук не воспроизводится и не захватывается. |
void |
open() |
Открывает линию, указывая, что она должна получить необходимые системные ресурсы и перейти в рабочее состояние. |
void |
removeLineListener |
Удаляет указанного слушателя из списка слушателей этой линии. |
Подробное описание методов
open
void open(AudioFormat format, int bufferSize) throws LineUnavailableException
Размер буфера задаётся в байтах, но должен соответствовать целому числу кадров сэмплов. Вызов этого метода с размером буфера, который не удовлетворяет этому требованию, может привести к IllegalArgumentException. Фактический размер буфера открытой линии может отличаться от запрошенного. Фактически установленное значение можно узнать, вызвав впоследствии DataLine.getBufferSize()
Если эта операция выполнена успешно, линия помечается как открытая, а её слушателям отправляется событие OPEN.
Вызов этого метода для уже открытой линии недопустим и может привести к IllegalStateException.
Некоторые линии после закрытия нельзя открыть повторно. Попытка повторно открыть такую линию всегда приводит к LineUnavailableException.
- Параметры:
-
format— требуемый аудиоформат -
bufferSize— требуемый размер буфера в байтах - Исключения:
-
LineUnavailableException— если линию невозможно открыть из-за ограничений ресурсов -
IllegalArgumentException— если размер буфера не соответствует целому числу кадров сэмплов либоformatуказано не полностью или является недопустимым -
IllegalStateException— если линия уже открыта - См. также:
open
void open(AudioFormat format) throws LineUnavailableException
Реализация выбирает размер буфера, который измеряется в байтах, но соответствует целому числу кадров сэмплов. Выбранный системой размер буфера можно узнать, вызвав впоследствии DataLine.getBufferSize()
Если эта операция выполнена успешно, линия помечается как открытая, а её слушателям отправляется событие OPEN.
Вызов этого метода для уже открытой линии недопустим и может привести к IllegalStateException.
Некоторые линии после закрытия нельзя открыть повторно. Попытка повторно открыть такую линию всегда приводит к LineUnavailableException.
- Параметры:
-
format— требуемый аудиоформат - Исключения:
-
LineUnavailableException— если линию невозможно открыть из-за ограничений ресурсов -
IllegalArgumentException— еслиformatуказано не полностью или является недопустимым -
IllegalStateException— если линия уже открыта - См. также:
read
int read(byte[] b, int off, int len)
Количество байтов, которые можно считать без блокировки, можно определить с помощью метода available интерфейса DataLine. (Гарантируется, что это количество байтов можно считать без блокировки, но нет гарантии, что попытка считать дополнительные данные не приведёт к блокировке.)
Количество считываемых байтов должно соответствовать целому числу кадров сэмплов, то есть:
[ bytes read ] % [frame size in bytes ] == 0
Возвращаемое значение всегда будет удовлетворять этому требованию. Запрос на считывание количества байтов, не соответствующего целому числу кадров сэмплов, не может быть выполнен и может привести к IllegalArgumentException.
- Параметры:
-
b— байтовый массив, в который при возврате этого метода будут записаны запрошенные входные данные -
off— смещение от начала массива в байтах -
len— запрошенное количество байтов для чтения - Возвращает:
- фактическое количество считанных байтов
- Исключения:
-
IllegalArgumentException— если запрошенное количество байтов не соответствует целому числу кадров сэмплов или еслиlenотрицательно -
ArrayIndexOutOfBoundsException— еслиoffотрицательно илиoff+lenпревышает длину массиваb - См. также:
© 1993, 2025, Oracle and/or its affiliates. All rights reserved.
Documentation extracted from Debian's OpenJDK Development Kit package.
Licensed under the GNU General Public License, version 2, with the Classpath Exception.
Various third party code in OpenJDK is licensed under different licenses (see Debian package).
Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.