Spec-Zone.ru › OpenJDK 21

Интерфейс SourceDataLine

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

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

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

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

С момента:
1.3
См. также:
  • Mixer
  • DataLine
  • TargetDataLine

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

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

DataLine.Info

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

Модификатор и тип Метод Описание
void open(AudioFormat format)
Открывает линию со заданным форматом, заставляя линию получить необходимые системные ресурсы и стать активной.
void open(AudioFormat format, int bufferSize)
Открывает линию со заданным форматом и рекомендуемым размером буфера, заставляя линию получить необходимые системные ресурсы и стать активной.
int write(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

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()

© 1993, 2023, 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/21/docs/api/java.desktop/javax/sound/sampled/SourceDataLine.html

Spec-Zone.ru

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