Интерфейс DataLine
- Все суперинтерфейсы:
-
AutoCloseable,Line
- Все известные подинтерфейсы:
-
Clip,SourceDataLine,TargetDataLine
public interface DataLine extends Line
DataLine добавляет функциональность, связанную со средствами массовой информации, к своему суперинтерфейсу Line. Эта функциональность включает методы управления транспортом, которые запускают, останавливают, выводят и очищают аудиоданные, проходящие через линию. Линия данных также может сообщать о текущем положении, громкости и формате аудиоданных. Линии данных используются для вывода звука с помощью подинтерфейсов SourceDataLine или Clip, которые позволяют прикладному программному обеспечению записывать данные. Аналогично, ввод звука обрабатывается подинтерфейсом TargetDataLine, который позволяет считывать данные.
Линия данных имеет внутренний буфер, в котором данные входящего или исходящего аудио данных находятся в очереди. Метод drain() блокируется до тех пор, пока этот внутренний буфер не станет пустым, обычно потому, что все данные в очереди были обработаны. Метод flush() отбрасывает любые доступные данные из очереди во внутреннем буфере.
Линия данных генерирует события START и STOP всякий раз, когда она начинает или прекращает активную презентацию или захват данных. Эти события могут быть сгенерированы в ответ на конкретные запросы или в результате менее прямых изменений состояния. Например, если метод start() вызывается на неактивной линии данных, и данные доступны для захвата или воспроизведения, событие START будет сгенерировано вскоре, когда фактически начнется воспроизведение или захват данных. Или, если поток данных на активной линии данных ограничен таким образом, что происходит разрыв в представлении данных, генерируется событие STOP.
Микшеры часто поддерживают синхронизированное управление несколькими линиями данных. Синхронизация может быть установлена с помощью метода synchronize интерфейса Mixer. Более подробное описание см. в описании интерфейса Mixer.
- С:
- 1.3
- См. также:
LineEvent
Вложенные классы
| Модификатор и тип | Интерфейс | Описание |
|---|---|---|
static class | DataLine.Info | Помимо информации о классе, унаследованной от своего суперкласса, |
Методы
| Модификатор и тип | Метод | Описание |
|---|---|---|
int | available() | Получает количество байтов данных, в настоящее время доступных приложению для обработки во внутреннем буфере линии данных. |
void | drain() | Выводит данные из очереди из линии, продолжая ввод/вывод данных до тех пор, пока внутренний буфер линии данных не будет освобожден. |
void | flush() | Очищает данные из очереди в линии. |
int | getBufferSize() | Получает максимальное количество байтов данных, которые поместятся во внутренний буфер линии данных. |
AudioFormat | getFormat() | Получает текущий формат (кодирование, частота дискретизации, количество каналов и т. д.) аудиоданных линии данных. |
int | getFramePosition() | Получает текущее положение в аудиоданных в образцах кадров. |
float | getLevel() | Получает текущий уровень громкости для линии. |
long | getLongFramePosition() | Получает текущее положение в аудиоданных в образцах кадров. |
long | getMicrosecondPosition() | Получает текущее положение в аудиоданных в микросекундах. |
boolean | isActive() | Указывает, участвует ли линия в активном вводе/выводе (например, воспроизведение или захват). |
boolean | isRunning() | Указывает, работает ли линия. |
void | start() | Позволяет линии участвовать во вводе/выводе данных. |
void | stop() | Останавливает линию. |
Методы, объявленные в интерфейсе javax.sound.sampled.Line
addLineListener, close, getControl, getControls, getLineInfo, isControlSupported, isOpen, open, removeLineListener Методы
drain
void drain()
Очищает данные из очереди линии, продолжая ввод/вывод данных до тех пор, пока внутренний буфер линии данных не будет пуст. Этот метод блокируется до завершения очистки. Поскольку это блокирующий метод, его следует использовать с осторожностью. Если drain() вызывается для остановленной линии, имеющей данные в очереди, метод будет заблокирован до тех пор, пока линия не начнёт работу и очередь данных не станет пустой. Если drain() вызывается одной нитью, а другая продолжает заполнять очередь данных, операция не завершится. Этот метод всегда возвращает значение, когда линия данных закрыта.
- См. также:
flush()
flush
void flush()
Очищает данные из очереди линии. Очищенные данные отбрасываются. В некоторых случаях не все данные из очереди могут быть отброшены. Например, микшер может очистить данные из буфера для конкретной входной линии, но любые невоспроизведённые данные, уже находящиеся в выходном буфере (результат микса), всё ещё будут воспроизводиться. Вы можете вызвать этот метод после приостановки линии (обычный случай), если вы хотите пропустить «старые» данные при возобновлении воспроизведения или захвата. (Допустимо очистить линию, которая не остановлена, но выполнение этого действия на активной линии, вероятно, приведёт к разрыву данных, что повлечёт за собой ощутимый щелчок.)
start
void start()
Разрешает линии участвовать во вводе/выводе данных. Если вызывается для линии, которая уже работает, этот метод ничего не делает. Если данные в буфере не очищены, линия возобновляет ввод/вывод, начиная с первой необработанной в момент остановки линии рамки. При запуске аудиозахвата или воспроизведения генерируется событие START.
- См. также:
-
stop(),isRunning(),LineEvent
stop
void stop()
Останавливает линию. Остановленная линия должна прекратить активность ввода/вывода. Однако, если линия открыта и работает, она должна сохранить ресурсы, необходимые для возобновления активности. Остановленная линия должна сохранить любые аудиоданные в своём буфере вместо их отбрасывания, чтобы при возобновлении ввод/вывод мог продолжиться с того места, на котором он был прерван, если это возможно. (Конечно, это не гарантирует, что никогда не будет разрывов, выходящих за пределы текущего буфера; если состояние остановки сохраняется слишком долго, входные или выходные образцы могут быть пропущены.) При необходимости сохранённые данные можно отбросить, вызвав метод flush. При остановке аудиозахвата или воспроизведения генерируется событие STOP.
- См. также:
-
start(),isRunning(),flush(),LineEvent
isRunning
boolean isRunning()
Указывает, работает ли линия. Значение по умолчанию — false. Открытая линия начинает работу, когда первые данные представлены в ответ на вызов метода start, и продолжается до тех пор, пока представление не прекратится в ответ на вызов stop или из-за завершения воспроизведения.
isActive
boolean isActive()
Указывает, участвует ли линия в активном вводе/выводе (например, воспроизведении или записи). Когда неактивная линия становится активной, она отправляет событие START своим слушателям. Аналогично, когда активная линия становится неактивной, она отправляет событие STOP.
- Возвращает:
-
trueесли линия активно захватывает или воспроизводит звук, иначеfalse - См. также:
-
Line.isOpen(),Line.addLineListener(javax.sound.sampled.LineListener),Line.removeLineListener(javax.sound.sampled.LineListener),LineEvent,LineListener
getFormat
AudioFormat getFormat()
Получает текущий формат (кодирование, частота дискретизации, количество каналов и т. д.) аудиоданных линии данных.
Если линия не открыта и никогда не открывалась, возвращается формат по умолчанию. Формат по умолчанию — это специфичный для реализации аудиоформат, или, если объект DataLine.Info, который использовался для получения этого DataLine, указывает как минимум один полностью квалифицированный аудиоформат, последний из них будет использоваться в качестве формата по умолчанию. Открытие линии со специфическим аудиоформатом (например, SourceDataLine.open(AudioFormat)) перезапишет формат по умолчанию.
- Возвращает:
- текущий формат аудиоданных
- См. также:
AudioFormat
getBufferSize
int getBufferSize()
Получает максимальное количество байтов данных, которые поместятся во внутренний буфер линии данных. Для линии данных источника это размер буфера, в который можно записать данные. Для линии данных получателя это размер буфера, из которого можно считать данные. Обратите внимание, что используемые единицы — байты, но они всегда соответствуют целому числу аудиокадров.
- Возвращает:
- размер буфера в байтах
available
int available()
Получает количество байтов данных, в настоящее время доступных для обработки приложением во внутреннем буфере линии данных. Для линии данных источника это количество данных, которые можно записать в буфер без блокировки. Для линии данных получателя это количество данных, доступных для чтения приложением. Для клипа это значение всегда равно 0, поскольку аудиоданные загружаются в буфер при открытии клипа и сохраняются без изменений до закрытия клипа.
Обратите внимание, что используемые единицы — байты, но они всегда соответствуют целому числу аудиокадров.
Приложению гарантируется, что операция чтения или записи до количества байтов, возвращённых available(), не будет блокироваться; однако, нет гарантии, что попытки чтения или записи большего количества данных не будут блокироваться.
- Возвращает:
- количество доступных данных в байтах
getFramePosition
int getFramePosition()
Получает текущую позицию в аудиоданных в кадрах. Позиция кадра измеряет количество кадров, захваченных или рендеренных линией с момента её открытия. Это возвращаемое значение будет циклически повторяться после 2^31 кадров. Рекомендуется использовать getLongFramePosition вместо него.
- Возвращает:
- количество уже обработанных кадров с момента открытия линии
- См. также:
getLongFramePosition()
getLongFramePosition
long getLongFramePosition()
Получает текущую позицию в аудиоданных в кадрах. Позиция кадра измеряет количество кадров, захваченных или рендеренных линией с момента её открытия.
- Возвращает:
- количество уже обработанных кадров с момента открытия линии
- С:
- 1.5
getMicrosecondPosition
long getMicrosecondPosition()
Получает текущую позицию в аудиоданных в микросекундах. Позиция в микросекундах измеряет время, соответствующее количеству кадров, захваченных или рендеренных линией с момента её открытия. Уровень точности не гарантируется. Например, реализация может вычислить позицию в микросекундах из текущей позиции кадра и частоты дискретизации аудиокадров. Точность в микросекундах тогда будет ограничена количеством микросекунд на один образец кадра.
- Возвращает:
- количество микросекунд обработанных данных с момента открытия линии
getLevel
float getLevel()
Получает текущий уровень громкости для линии. Этот уровень является показателем текущей амплитуды сигнала и не следует путать с текущим значением регулятора усиления. Диапазон от 0,0 (тишина) до 1,0 (максимально возможная амплитуда звуковой волны). Единицы измеряют линейную амплитуду, а не децибелы.
- Возвращает:
- текущая амплитуда сигнала в этой линии или
AudioSystem.NOT_SPECIFIED
© 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/DataLine.html