Интерфейс SourceDataLine
- Все суперинтерфейсы:
AutoCloseable, DataLine, Line
public interface SourceDataLine extends DataLine
Обратите внимание, что соглашение об именовании этого интерфейса отражает взаимосвязь между линией и ее микшером. С точки зрения приложения линия исходных данных может служить целевым устройством для аудиоданных.
Линию исходных данных можно получить от микшера, вызвав метод getLine интерфейса Mixer с соответствующим объектом DataLine.Info.
Интерфейс SourceDataLine предоставляет метод для записи аудиоданных в буфер линии данных. Приложения, воспроизводящие или микширующие звук, должны записывать данные в линию исходных данных достаточно быстро, чтобы предотвратить опустошение буфера, которое может вызвать слышимые щелчки из-за прерывания звука. Приложения могут использовать метод available, определенный в интерфейсе DataLine, чтобы определить объем данных, находящихся в данный момент в очереди буфера линии данных. Объем данных, который можно записать в буфер без блокировки, равен разности между размером буфера и объемом данных в очереди. Если вывод аудио прекращается из-за опустошения буфера, генерируется событие STOP. При возобновлении вывода аудио генерируется событие START.
- Начиная с:
- 1.3
- См. также:
Краткое описание вложенных классов
Вложенные классы и интерфейсы, объявленные в интерфейсе DataLine
DataLine.Info | Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static class |
DataLine.Info |
Помимо информации о классе, унаследованной от суперкласса, DataLine.Info предоставляет дополнительные сведения, относящиеся к линиям данных. |
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
open |
Открывает линию в указанном формате, в результате чего она получает все необходимые системные ресурсы и становится работоспособной. |
void |
open |
Открывает линию в указанном формате и с рекомендуемым размером буфера, в результате чего она получает все необходимые системные ресурсы и становится работоспособной. |
int |
write |
Записывает аудиоданные в микшер через эту линию исходных данных. |
Методы, объявленные в интерфейсе 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— если линия уже открыта - См. также:
write
int write(byte[] b, int off, int len)
available), этот метод блокируется до записи запрошенного объема данных. Это происходит даже в том случае, если запрошенный объем данных превышает размер буфера линии. Однако если линия данных закрыта, остановлена или очищена до записи запрошенного объема, метод перестает блокироваться и возвращает количество байтов, записанных к этому моменту. Количество байтов, которое можно записать без блокировки, можно определить с помощью метода available интерфейса DataLine. (Хотя гарантируется, что это количество байтов можно записать без блокировки, нет гарантии, что попытка записать дополнительные данные приведет к блокировке.)
Количество записываемых байтов должно соответствовать целому числу кадров отсчетов, то есть:
[ bytes written ] % [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.