Spec-Zone.ru › OpenJDK 27

Интерфейс DataLine

Все суперинтерфейсы:
AutoCloseable, Line
Все известные подинтерфейсы:
Clip, SourceDataLine, TargetDataLine
public interface DataLine extends Line
DataLine добавляет функциональность, связанную с мультимедиа, к своему суперинтерфейсу Line. Эта функциональность включает методы управления передачей данных, которые запускают, останавливают, опустошают и очищают аудиоданные, проходящие через линию. Линия данных также может сообщать текущую позицию, громкость и аудиоформат мультимедиа. Линии данных используются для вывода звука посредством подинтерфейсов SourceDataLine или Clip, которые позволяют приложению записывать данные. Аналогичным образом, ввод звука выполняется подинтерфейсом TargetDataLine, который позволяет считывать данные.

Линия данных имеет внутренний буфер, в котором ставятся в очередь входящие или исходящие аудиоданные. Метод drain() блокирует выполнение до опустошения этого внутреннего буфера, обычно после обработки всех данных в очереди. Метод flush() удаляет все доступные данные из очереди внутреннего буфера.

Линия данных генерирует события START и STOP при начале или прекращении активного воспроизведения или захвата данных. Эти события могут генерироваться в ответ на определённые запросы или в результате менее прямых изменений состояния. Например, если для неактивной линии данных вызвать start(), и данные доступны для захвата или воспроизведения, вскоре будет сгенерировано событие START, когда фактически начнётся воспроизведение или захват данных. Или, если поток данных к активной линии данных ограничен настолько, что при воспроизведении данных возникает пауза, генерируется событие STOP.

Микшеры часто поддерживают синхронизированное управление несколькими линиями данных. Синхронизацию можно настроить с помощью метода synchronize интерфейса Mixer. Более подробное описание см. в описании интерфейса Mixer.

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

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

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

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

Модификатор и тип Метод Описание
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)
Удаляет указанного слушателя из списка слушателей этой линии.

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

drain

void drain()
Опустошает очередь данных линии, продолжая ввод-вывод данных до тех пор, пока внутренний буфер линии данных не опустеет. Этот метод блокирует выполнение до завершения опустошения буфера. Поскольку этот метод является блокирующим, использовать его следует осторожно. Если drain() вызывается для остановленной линии, в очереди которой есть данные, метод будет блокировать выполнение до тех пор, пока линия не запустится и очередь данных не опустеет. Если drain() вызывается одним потоком, а другой поток продолжает заполнять очередь данных, операция не завершится. Этот метод всегда возвращает управление при закрытии линии данных.
См. также:
  • flush()

flush

void flush()
Очищает очередь данных линии. Очищенные данные отбрасываются. В некоторых случаях удалить из очереди все данные невозможно. Например, микшер может удалить данные из буфера определённой входной линии, но ещё не воспроизведённые данные, уже находящиеся в выходном буфере (результат микширования), всё равно будут воспроизведены. Этот метод можно вызвать после приостановки линии (обычный сценарий), если требуется пропустить «устаревшие» данные при возобновлении воспроизведения или захвата. (Очистить можно и незапущенную линию, но очистка активной линии, скорее всего, вызовет разрыв в потоке данных, в результате чего может быть слышен щелчок.)
См. также:
  • stop()
  • drain()

start

void start()
Позволяет линии выполнять ввод-вывод данных. Если вызвать этот метод для уже запущенной линии, он ничего не делает. Если данные в буфере не были очищены, линия возобновляет ввод-вывод с первого кадра, который оставался необработанным на момент остановки линии. При начале захвата или воспроизведения звука генерируется событие START.
См. также:
  • stop()
  • isRunning()
  • LineEvent

stop

void stop()
Останавливает линию. Остановленная линия должна прекратить ввод-вывод. Однако если линия открыта и запущена, она должна сохранять ресурсы, необходимые для возобновления работы. Остановленная линия должна сохранять аудиоданные в буфере, а не отбрасывать их, чтобы после возобновления ввод-вывод мог, по возможности, продолжиться с того места, где он был прерван. (Это, конечно, не гарантирует полного отсутствия разрывов за пределами текущего буфера: если остановка длится слишком долго, входные или выходные отсчёты могут быть потеряны.) При необходимости сохранённые данные можно удалить, вызвав метод flush. При остановке захвата или воспроизведения звука генерируется событие STOP.
См. также:
  • start()
  • isRunning()
  • flush()
  • LineEvent

isRunning

boolean isRunning()
Указывает, запущена ли линия. Значение по умолчанию — false. Открытая линия начинает работать, когда первые данные представлены в ответ на вызов метода start, и продолжает работать, пока представление данных не прекратится в ответ на вызов stop или вследствие завершения воспроизведения.
Возвращает:
true, если линия запущена; в противном случае — false
См. также:
  • start()
  • stop()

isActive

boolean isActive()
Указывает, выполняет ли линия активный ввод-вывод (например, воспроизведение или захват). Когда неактивная линия становится активной, она отправляет своим слушателям событие START. Аналогичным образом, когда активная линия становится неактивной, она отправляет событие STOP.
Возвращает:
true, если линия активно захватывает или воспроизводит звук; в противном случае — false
См. также:
  • Line.isOpen()
  • Line.addLineListener(LineListener)
  • Line.removeLineListener(LineListener)
  • LineEvent
  • LineListener

getFormat

AudioFormat getFormat()
Возвращает текущий формат (кодировку, частоту дискретизации, количество каналов и т. д.) аудиоданных линии данных.

Если линия не открыта и никогда не открывалась, возвращается формат по умолчанию. Формат по умолчанию — это аудиоформат, определяемый реализацией, либо, если объект DataLine.Info, использованный для получения этого DataLine, задаёт хотя бы один полностью определённый аудиоформат, в качестве формата по умолчанию используется последний из них. Открытие линии с конкретным аудиоформатом (например, SourceDataLine.open(AudioFormat)) переопределяет формат по умолчанию.

Возвращает:
текущий формат аудиоданных
См. также:
  • AudioFormat

getBufferSize

int getBufferSize()
Возвращает максимальное количество байтов данных, помещающихся во внутренний буфер линии данных. Для линии исходных данных это размер буфера, в который можно записывать данные. Для линии целевых данных это размер буфера, из которого можно считывать данные. Обратите внимание, что размер измеряется в байтах, но всегда соответствует целому числу отсчётных кадров аудиоданных.
Возвращает:
размер буфера в байтах

available

int available()
Возвращает количество байтов данных, доступных в данный момент приложению для обработки во внутреннем буфере линии данных. Для линии исходных данных это объём данных, который можно записать в буфер без блокировки. Для линии целевых данных это объём данных, доступный приложению для чтения. Для клипа это значение всегда равно 0, поскольку аудиоданные загружаются в буфер при открытии клипа и остаются неизменными до его закрытия.

Обратите внимание, что размер измеряется в байтах, но всегда соответствует целому числу отсчётных кадров аудиоданных.

Гарантируется, что операция чтения или записи объёма данных, не превышающего количество байтов, возвращаемое available(), не будет блокироваться; однако нет гарантии, что попытка прочитать или записать больше данных приведёт к блокировке.

Возвращает:
объём доступных данных в байтах

getFramePosition

int getFramePosition()
Возвращает текущую позицию в аудиоданных в отсчётных кадрах. Позиция кадра показывает количество отсчётных кадров, захваченных линией или воспроизведённых ею с момента её открытия. Это значение переполнится после 2^31 кадров. Рекомендуется вместо этого использовать getLongFramePosition.
Возвращает:
количество кадров, обработанных с момента открытия линии
См. также:
  • getLongFramePosition()

getLongFramePosition

long getLongFramePosition()
Возвращает текущую позицию в аудиоданных в отсчётных кадрах. Позиция кадра показывает количество отсчётных кадров, захваченных линией или воспроизведённых ею с момента её открытия.
Возвращает:
количество кадров, обработанных с момента открытия линии
Начиная с:
1.5

getMicrosecondPosition

long getMicrosecondPosition()
Возвращает текущую позицию в аудиоданных в микросекундах. Позиция в микросекундах показывает время, соответствующее количеству отсчётных кадров, захваченных линией или воспроизведённых ею с момента её открытия. Уровень точности не гарантируется. Например, реализация может вычислять позицию в микросекундах по текущей позиции кадра и частоте кадров аудиосигнала. В этом случае точность в микросекундах будет ограничена количеством микросекунд на один отсчётный кадр.
Возвращает:
количество микросекунд обработанных данных с момента открытия линии

getLevel

float getLevel()
Возвращает текущий уровень громкости линии. Этот уровень характеризует текущую амплитуду сигнала, и его не следует путать с текущей настройкой регулятора усиления. Диапазон значений — от 0.0 (тишина) до 1.0 (максимально возможная амплитуда звуковой волны). Единицы измерения соответствуют линейной амплитуде, а не децибелам.
Возвращает:
текущую амплитуду сигнала в этой линии или AudioSystem.NOT_SPECIFIED

Сообщить об ошибке или предложить улучшение
Дополнительную справочную информацию по 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