Интерфейс SourceDataLine
- Все суперинтерфейсы:
AutoCloseable, DataLine, Line
public interface SourceDataLine extends DataLine
Обратите внимание, что соглашение об именовании этого интерфейса отражает связь между линией и ее микшером. С точки зрения приложения линия исходных данных может выступать в качестве цели для аудиоданных.
Линию исходных данных можно получить от микшера, вызвав метод getLine интерфейса Mixer с подходящим объектом DataLine.Info.
Интерфейс SourceDataLine предоставляет метод для записи аудиоданных в буфер линии данных. Приложения, воспроизводящие или микширующие аудио, должны записывать данные в линию исходных данных достаточно быстро, чтобы буфер не опустел, что могло бы вызвать слышимые щелчки из-за прерываний звука. Приложения могут использовать метод available, определенный в интерфейсе DataLine, чтобы определить объем данных, поставленных в очередь в буфере линии данных. Объем данных, который можно записать в буфер без блокировки, равен разности между размером буфера и объемом данных в очереди. Если передача аудиовыхода прекращается из-за опустошения буфера, генерируется событие STOP. Когда вывод аудио возобновляется, генерируется событие START.
- Начиная с версии:
- 1.3
- См. также:
Краткое описание вложенных классов
Вложенные классы и интерфейсы, объявленные в интерфейсе DataLine
DataLine.Info
Краткое описание методов
| Модификатор и тип | Метод | Описание |
|---|---|---|
void |
open |
Открывает линию в указанном формате, в результате чего линия получает все необходимые системные ресурсы и становится готовой к работе. |
void |
open |
Открывает линию в указанном формате и с заданным размером буфера, в результате чего линия получает все необходимые системные ресурсы и становится готовой к работе. |
int |
write |
Записывает аудиоданные в микшер через эту линию исходных данных. |
Методы, объявленные в интерфейсе DataLine
available, drain, flush, getBufferSize, getFormat, getFramePosition, getLevel, getLongFramePosition, getMicrosecondPosition, isActive, isRunning, start, stop
Методы, объявленные в интерфейсе 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— если линия уже открыта - См. также:
open
void open(AudioFormat format) throws LineUnavailableException
Реализация выбирает размер буфера, который измеряется в байтах, но соответствует целому числу кадров сэмплов. Выбранный системой размер буфера можно узнать, вызвав впоследствии DataLine.getBufferSize().
Если операция завершается успешно, линия помечается как открытая, а ее слушателям отправляется событие OPEN.
Вызов этого метода для уже открытой линии недопустим и может привести к IllegalStateException.
Обратите внимание, что некоторые линии после закрытия нельзя открыть повторно. Попытки повторно открыть такую линию всегда приводят к LineUnavailableException.
- Параметры:
-
format— требуемый аудиоформат - Исключения:
-
LineUnavailableException— если линию невозможно открыть из-за ограничений ресурсов -
IllegalArgumentException— еслиformatзадан не полностью или имеет недопустимое значение -
IllegalStateException— если линия уже открыта - См. также:
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 - См. также:
© 1993, 2025, 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/25/docs/api/java.desktop/javax/sound/sampled/SourceDataLine.html