Spec-Zone.ru › OpenJDK 17

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

Spec-Zone.ru

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