Spec-Zone.ru › OpenJDK 25

Интерфейс TargetDataLine

Все суперинтерфейсы:
AutoCloseable, DataLine, Line
public interface TargetDataLine extends DataLine
Линия данных-приёмник — это тип DataLine, из которой можно считывать аудиоданные. Наиболее распространённый пример — линия данных, получающая данные с устройства захвата аудио. (Устройство реализовано как микшер, записывающий данные в линию данных-приёмник.)

Обратите внимание, что соглашение об именовании этого интерфейса отражает связь между линией и её микшером. С точки зрения приложения линия данных-приёмник может выступать источником аудиоданных.

Линию данных-приёмник можно получить из микшера, вызвав метод getLine интерфейса Mixer с соответствующим объектом DataLine.Info.

Интерфейс TargetDataLine предоставляет метод для считывания захваченных данных из буфера линии данных-приёмника. Приложения, записывающие аудио, должны считывать данные из линии данных-приёмника достаточно быстро, чтобы буфер не переполнялся: переполнение может привести к разрывам в захваченных данных, воспринимаемым как щелчки. Приложения могут использовать метод available, определённый в интерфейсе DataLine, чтобы определить объём данных, находящихся в данный момент в очереди буфера линии данных. Если буфер переполнится, самые старые данные в очереди будут отброшены и заменены новыми.

Начиная с:
1.3
См. также:
  • Mixer
  • DataLine
  • SourceDataLine

Краткое описание вложенных классов

Вложенные классы и интерфейсы, объявленные в интерфейсе DataLine

DataLine.Info

Краткое описание методов

Модификатор и тип Метод Описание
void open(AudioFormat format)
Открывает линию с указанным форматом, в результате чего линия получает все необходимые системные ресурсы и становится доступной для работы.
void open(AudioFormat format, int bufferSize)
Открывает линию с указанным форматом и запрошенным размером буфера, в результате чего линия получает все необходимые системные ресурсы и становится доступной для работы.
int read(byte[] b, int off, int len)
Считывает аудиоданные из входного буфера линии данных.

Методы, объявленные в интерфейсе DataLine

available, drain, flush, getBufferSize, getFormat, getFramePosition, getLevel, getLongFramePosition, getMicrosecondPosition, isActive, isRunning, start, stop

Методы, объявленные в интерфейсе Line

addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener

Подробное описание методов

open

void open(AudioFormat format, int bufferSize) throws LineUnavailableException
Открывает линию с указанным форматом и запрошенным размером буфера, в результате чего линия получает все необходимые системные ресурсы и становится доступной для работы.

Размер буфера указывается в байтах, но должен соответствовать целому числу фреймов сэмплов. Вызов этого метода с запрошенным размером буфера, не удовлетворяющим этому требованию, может привести к IllegalArgumentException. Фактический размер буфера открытой линии может отличаться от запрошенного. Фактически установленное значение можно узнать, впоследствии вызвав DataLine.getBufferSize()

Если эта операция выполнена успешно, линия помечается как открытая, а её слушателям отправляется событие OPEN.

Вызов этого метода для уже открытой линии является недопустимым и может привести к IllegalStateException.

Некоторые линии после закрытия нельзя открыть повторно. Попытки повторно открыть такую линию всегда приводят к LineUnavailableException.

Параметры:
format — требуемый аудиоформат
bufferSize — требуемый размер буфера в байтах
Исключения:
LineUnavailableException — если линию невозможно открыть из-за ограничений ресурсов
IllegalArgumentException — если размер буфера не соответствует целому числу фреймов сэмплов либо format задан не полностью или имеет недопустимое значение
IllegalStateException — если линия уже открыта
См. также:
  • open(AudioFormat)
  • Line.open()
  • Line.close()
  • Line.isOpen()
  • LineEvent

open

void open(AudioFormat format) throws LineUnavailableException
Открывает линию с указанным форматом, в результате чего линия получает все необходимые системные ресурсы и становится доступной для работы.

Реализация выбирает размер буфера, который измеряется в байтах, но соответствует целому числу фреймов сэмплов. Выбранный системой размер буфера можно узнать, впоследствии вызвав DataLine.getBufferSize()

Если эта операция выполнена успешно, линия помечается как открытая, а её слушателям отправляется событие OPEN.

Вызов этого метода для уже открытой линии является недопустимым и может привести к IllegalStateException.

Некоторые линии после закрытия нельзя открыть повторно. Попытки повторно открыть такую линию всегда приводят к LineUnavailableException.

Параметры:
format — требуемый аудиоформат
Исключения:
LineUnavailableException — если линию невозможно открыть из-за ограничений ресурсов
IllegalArgumentException — если format задан не полностью или имеет недопустимое значение
IllegalStateException — если линия уже открыта
См. также:
  • open(AudioFormat, int)
  • Line.open()
  • Line.close()
  • Line.isOpen()
  • LineEvent

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
См. также:
  • SourceDataLine.write(byte[], int, int)
  • DataLine.available()

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в документации Java SE, содержащей более подробные описания для разработчиков, обзоры концепций, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или её аффилированных лиц в США и других странах.
Авторские права © 1993, 2025, Oracle и/или её аффилированные лица, 500 Oracle Parkway, Redwood Shores, CA 94065 USA.
Все права защищены. Использование регулируется условиями лицензии и политикой распространения документации.

© 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.desktop/javax/sound/sampled/TargetDataLine.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API