Интерфейс 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, 2020, 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/11/docs/api/java.desktop/javax/sound/sampled/SourceDataLine.html

Spec-Zone .ru
спецификации, руководства, описания, API