Spec-Zone.ru › OpenJDK 27

Интерфейс SourceDataLine

Все суперинтерфейсы:
AutoCloseable, DataLine, Line
public interface SourceDataLine extends DataLine
Линия исходных данных — это линия данных, в которую можно записывать данные. Она служит источником для своего микшера. Приложение записывает аудиобайты в линию исходных данных, которая буферизует их и передает микшеру. Микшер может смешивать эти отсчеты с отсчетами из других источников, а затем передавать полученный микс целевому устройству, например выходному порту (который может представлять аудиоустройство вывода на звуковой карте).

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

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

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

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

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

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

DataLine.Info
Модификатор и тип Интерфейс Описание
static class  DataLine.Info
Помимо информации о классе, унаследованной от суперкласса, DataLine.Info предоставляет дополнительные сведения, относящиеся к линиям данных.

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

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

Методы, объявленные в интерфейсе 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(LineListener listener)
Добавляет прослушиватель к этой линии.
void close()
Закрывает линию, указывая, что используемые ею системные ресурсы можно освободить.
Control getControl(Control.Type control)
Возвращает элемент управления указанного типа, если он имеется.
Control[] getControls()
Возвращает набор элементов управления, связанных с этой линией.
Line.Info getLineInfo()
Возвращает объект Line.Info, описывающий эту линию.
boolean isControlSupported(Control.Type control)
Показывает, поддерживает ли линия элемент управления указанного типа.
boolean isOpen()
Показывает, открыта ли линия, то есть зарезервировала ли она системные ресурсы и готова ли к работе, даже если в данный момент звук не воспроизводится и не захватывается.
void open()
Открывает линию, указывая, что она должна получить все необходимые системные ресурсы и перейти в рабочее состояние.
void removeLineListener(LineListener listener)
Удаляет указанного прослушивателя из списка прослушивателей этой линии.

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

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

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

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по API и документацию для разработчиков см. в разделе Документация Java SE, содержащем более подробные описания для разработчиков, концептуальные обзоры, определения терминов, обходные решения и работающие примеры кода. Другие версии.
Java является товарным знаком или зарегистрированным товарным знаком Oracle и/или ее аффилированных лиц в США и других странах.
Авторское право © 1993, 2026, 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.

Spec-Zone.ru

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