Интерфейс TargetDataLine
- Все суперинтерфейсы:
-
AutoCloseable,DataLine,Line
public interface TargetDataLine extends DataLine
Линия целевого потока данных — это тип DataLine, из которого можно читать аудиоданные. Наиболее распространённым примером является линия данных, получающая данные от устройства захвата аудио. (Устройство реализовано как микшер, который записывает данные в линию целевого потока.)
Обратите внимание, что соглашение об именовании этого интерфейса отражает взаимосвязь между линией и её микшером. С точки зрения приложения, линия целевого потока данных может действовать как источник аудиоданных.
Линию целевого потока данных можно получить из микшера, вызвав метод getLine объекта Mixer с соответствующим объектом DataLine.Info.
Интерфейс TargetDataLine предоставляет метод для чтения захваченных данных из буфера линии целевого потока данных. Приложения, которые записывают аудио, должны читать данные из линии целевого потока данных достаточно быстро, чтобы предотвратить переполнение буфера, что может привести к разрывам в захваченных данных, воспринимаемым как щелчки. Приложения могут использовать метод available, определённый в интерфейсе DataLine, для определения объёма данных, в настоящее время ожидающих в буфере линии данных. Если буфер переполнится, самые старые ожидающие данные будут отброшены и заменены новыми.
- С момента:
- 1.3
- См. также:
-
Mixer,DataLine,SourceDataLine
Вложенные классы
Вложенные классы/интерфейсы, объявленные в интерфейсе javax.sound.sampled.DataLine
DataLine.Info
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
open(AudioFormat format) |
Открывает линию с указанным форматом, что приводит к получению линией необходимых системных ресурсов и её запуску. |
void |
open(AudioFormat format,
int bufferSize) |
Открывает линию с указанным форматом и запрошенным размером буфера, что приводит к получению линией необходимых системных ресурсов и её запуску. |
int |
read(byte[] b,
int off,
int len) |
Считывает аудиоданные из буфера ввода линии данных. |
Методы, объявленные в интерфейсе javax.sound.sampled.DataLine
available, drain, flush, getBufferSize, getFormat, getFramePosition, getLevel, getLongFramePosition, getMicrosecondPosition, isActive, isRunning, start, stop
Методы, объявленные в интерфейсе javax.sound.sampled.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— если линия уже открыта -
SecurityException— если линия не может быть открыта из-за ограничений безопасности - См. также:
-
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— если линия уже открыта -
SecurityException— если линия не может быть открыта из-за ограничений безопасности - См. также:
-
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()
© 1993, 2020, 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/11/docs/api/java.desktop/javax/sound/sampled/TargetDataLine.html