Spec-Zone.ru › OpenJDK 25

Интерфейс 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

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

Модификатор и тип Метод Описание
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

Методы, объявленные в интерфейсе 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 — если линия уже открыта
См. также:
  • 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, 2025, 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.
https://docs.oracle.com/en/java/javase/25/docs/api/java.desktop/javax/sound/sampled/SourceDataLine.html

Spec-Zone.ru

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