Интерфейс SourceDataLine
- Все суперинтерфейсы:
- AutoCloseable, DataLine, Line
public interface SourceDataLine extends DataLine
Линия входных данных — это линия данных, в которую можно записывать данные. Она служит источником для своего миксера. Приложение записывает аудиобайты в линию входных данных, которая обрабатывает буферизацию байтов и передает их миксеру. Миксер может смешивать сэмплы с сэмплами других источников и затем передавать смешанный звук целевому объекту, например, порту вывода (который может представлять аудиовыходное устройство на звуковой карте).
Обратите внимание, что соглашение об именовании для этого интерфейса отражает отношение между линией и её миксером. С точки зрения приложения, линия входных данных может действовать как целевой объект для аудиоданных.
Линию входных данных можно получить из миксера, вызвав метод интерфейса getLineMixer с соответствующим объектом . DataLine.Info
Интерфейс SourceDataLine предоставляет метод для записи аудиоданных в буфер линии данных. Приложения, воспроизводящие или смешивающие аудио, должны записывать данные в линию входных данных достаточно быстро, чтобы предотвратить подтекание буфера (опустошение), что может привести к возникновению разрывов в аудиосигнале, воспринимаемых как щелчки. Приложения могут использовать метод интерфейса availableDataLine для определения количества данных, в настоящее время находящихся в очереди в буфере линии данных. Количество данных, которое можно записать в буфер без блокировки, равно разнице между размером буфера и количеством данных в очереди. Если доставка аудиовывода прекращается из-за подтекания, генерируется событие . Событие 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
Количество байтов, которые можно записать без блокировки, можно определить, используя метод интерфейса availableDataLine. (Хотя гарантируется, что это количество байтов можно записать без блокировки, нет гарантии, что попытки записи дополнительных данных будут блокироваться.)
Количество байтов для записи должно представлять целое количество образцов фреймов, таким образом:
[ 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.