Интерфейс TargetDataLine
- Все суперинтерфейсы:
- AutoCloseable, DataLine, Line
public interface TargetDataLine extends DataLine
Линия целевого потока данных — это тип , с которого можно считывать аудиоданные. Наиболее распространённым примером является линия данных, получающая данные от устройства захвата аудио. (Устройство реализуется как микшер, который записывает данные в целевую линию данных.)DataLine
Обратите внимание, что соглашение об именовании для этого интерфейса отражает взаимосвязь между линией и её микшером. С точки зрения приложения, целевая линия данных может выступать в качестве источника аудиоданных.
Целевую линию данных можно получить из микшера, вызвав метод объекта getLineMixer с соответствующим объектом . DataLine.Info
Интерфейс TargetDataLine предоставляет метод для считывания захваченных данных из буфера целевой линии данных. Приложения, записывающие аудио, должны считывать данные с целевой линии данных достаточно быстро, чтобы предотвратить переполнение буфера, что может привести к разрывам в захваченных данных, воспринимаемым как щелчки. Приложения могут использовать метод в интерфейсе availableDataLine , чтобы определить количество данных, в настоящее время находящихся в очереди в буфере линии данных. Если буфер переполнится, самые старые данные в очереди будут отброшены и заменены новыми.
- С:
- 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) Считывает аудиоданные из буфера ввода линии данных. Запрошенное количество байтов считывается в указанный массив, начиная с указанного смещения в массиве в байтах. Этот метод блокируется до тех пор, пока не будет прочитано запрошенное количество данных. Однако, если линия данных закрыта, остановлена, опустошена или очищена до того, как было прочитано запрошенное количество, метод больше не блокируется, а возвращает количество прочитанных до сих пор байтов.
Количество байтов, которые могут быть прочитаны без блокировки, можно определить с помощью метода интерфейса availableDataLine. (Хотя гарантируется, что это количество байтов может быть прочитано без блокировки, нет гарантии, что попытки чтения дополнительных данных будут блокироваться.)
Количество байтов, подлежащих чтению, должно представлять собой целое число кадров образцов, такое что:
[ 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.