Spec-Zone.ru › OpenJDK 8

Интерфейс 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 - массив байтов, содержащий данные для записи в линию данных
len - длина, в байтах, допустимых данных в массиве (другими словами, запрошенное количество данных для записи в байтах)
off - смещение от начала массива, в байтах
Возвращает:
количество фактически записанных байтов
Исключения:
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.

Spec-Zone.ru

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