Интерфейс Clip
- Все суперинтерфейсы:
- AutoCloseable, DataLine, Line
public interface Clip extends DataLine
Интерфейс Clip представляет собой особый вид канала данных, аудиоданные которого можно загрузить до воспроизведения, вместо потоковой передачи в реальном времени.
Поскольку данные предварительно загружены и имеют известную длину, вы можете задать клипу начало воспроизведения в любой позиции его аудиоданных. Вы также можете создать цикл, так что при воспроизведении клипа он будет циклически повторяться. Циклы определяются начальной и конечной позицией образцов, а также количеством раз, которое цикл должен быть воспроизведён.
Клипы могут быть получены из , который поддерживает каналы этого типа. Данные загружаются в клип при его открытии. Mixer
Воспроизведение аудиоклипа можно начать и остановить, используя методы start и stop. Эти методы не сбрасывают позицию медиа; start вызывает продолжение воспроизведения с позиции, где оно было последний раз остановлено. Чтобы перезапустить воспроизведение с начала аудиоданных клипа, просто выполните вызов с setFramePosition(0), что перемотает медиа в начало клипа.stop
- С момента:
- 1.3
Вложенные классы
Вложенные классы/интерфейсы, унаследованные от интерфейса javax.sound.sampled.DataLine
DataLine.Info Поля
| Модификатор и тип | Поле и описание |
|---|---|
static int |
LOOP_CONTINUOUSLY Значение, указывающее, что циклическое воспроизведение должно продолжаться неопределенно, а не завершаться после определенного количества циклов. |
Методы
| Модификатор и тип | Метод и описание |
|---|---|
int |
getFrameLength() Получает длину медиа в образцах. |
long |
getMicrosecondLength() Получает длительность медиа в микросекундах. |
void |
loop(int count) Начинает циклическое воспроизведение с текущей позиции. |
void |
open(AudioFormat format,
byte[] data,
int offset,
int bufferSize) Открывает клип, что означает получение необходимых системных ресурсов и приведение его в рабочее состояние. |
void |
open(AudioInputStream stream) Открывает клип с форматом и аудиоданными, присутствующими в предоставленном аудио входном потоке. |
void |
setFramePosition(int frames) Устанавливает позицию медиа в образцах. |
void |
setLoopPoints(int start,
int end) Устанавливает начальную и конечную позиции образцов, которые будут воспроизводиться в цикле. |
void |
setMicrosecondPosition(long microseconds) Устанавливает позицию медиа в микросекундах. |
Методы, унаследованные от интерфейса 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 Поля
LOOP_CONTINUOUSLY
static final int LOOP_CONTINUOUSLY
Значение, указывающее, что циклическое воспроизведение должно продолжаться неопределённо, а не завершаться после определённого количества циклов.
- См. также:
-
loop(int), Значения константных полей
Методы
open
void open(AudioFormat format,
byte[] data,
int offset,
int bufferSize)
throws LineUnavailableException Открывает клип, что означает получение необходимых системных ресурсов и приведение его в рабочее состояние. Клип открывается с указанным форматом и аудиоданными. Если операция успешна, линия помечается как открытая и событие отправляется слушателям линии. OPEN
Вызов этого метода для линии, которая уже открыта, является незаконным и может привести к исключению IllegalStateException.
Обратите внимание, что некоторые линии, после закрытия, не могут быть повторно открыты. Попытки повторного открытия такой линии всегда приведут к . LineUnavailableException
- Параметры:
-
format- формат предоставленных аудиоданных -
data- массив байтов, содержащий аудиоданные для загрузки в клип -
offset- точка начала копирования, выраженная в байтах с начала массива -
bufferSize- количество байтов данных для загрузки в клип из массива. - Исключения:
-
LineUnavailableException- если линия не может быть открыта из-за ограничений ресурсов -
IllegalArgumentException- если размер буфера не представляет собой целое число образцов, или еслиformatне полностью определён или недействителен -
IllegalStateException- если линия уже открыта -
SecurityException- если линия не может быть открыта из-за ограничений безопасности - См. также:
-
Line.close(),Line.isOpen(),LineListener
open
void open(AudioInputStream stream)
throws LineUnavailableException,
IOException Открывает клип с форматом и аудиоданными, присутствующими в предоставленном аудио входном потоке. Открытие клипа означает, что он должен получить все необходимые системные ресурсы и стать работоспособным. Если эта операция успешна, линия помечается как открытая, и событие отправляется слушателям линии.OPEN
Вызов этого метода для линии, которая уже открыта, является незаконным и может привести к исключению IllegalStateException.
Обратите внимание, что некоторые линии, после закрытия, не могут быть повторно открыты. Попытки повторного открытия такой линии всегда приведут к . LineUnavailableException
- Параметры:
-
stream- аудио входной поток, из которого аудиоданные будут считываться в клип - Исключения:
-
LineUnavailableException- если линия не может быть открыта из-за ограничений ресурсов -
IOException- если при чтении из потока происходит исключение I/O -
IllegalArgumentException- если аудиоформат потока не полностью определён или недействителен -
IllegalStateException- если линия уже открыта -
SecurityException- если линия не может быть открыта из-за ограничений безопасности - См. также:
-
Line.close(),Line.isOpen(),LineListener
getFrameLength
int getFrameLength()
Получает длину медиа в образцах.
- Возвращает:
- длину медиа, выраженную в образцах, или
AudioSystem.NOT_SPECIFIED, если линия не открыта. - См. также:
AudioSystem.NOT_SPECIFIED
getMicrosecondLength
long getMicrosecondLength()
Получает длительность медиа в микросекундах.
- Возвращает:
- длительность медиа, выраженную в микросекундах, или
AudioSystem.NOT_SPECIFIED, если линия не открыта. - См. также:
AudioSystem.NOT_SPECIFIED
setFramePosition
void setFramePosition(int frames)
Устанавливает позицию медиа в образцах. Позиция нулевая; первый кадр имеет номер ноль. Когда клип начнёт воспроизведение в следующий раз, он начнёт с воспроизведения кадра в этой позиции.
Для получения текущей позиции в образцах используйте метод интерфейса getFramePositionDataLine.
- Параметры:
-
frames- желаемая новая позиция медиа, выраженная в образцах
setMicrosecondPosition
void setMicrosecondPosition(long microseconds)
Устанавливает позицию медиа в микросекундах. Когда клип начнёт воспроизведение в следующий раз, он начнёт с этой позиции. Точность не гарантируется. Например, реализация может рассчитать позицию в микросекундах из текущей позиции кадра и частоты аудио образцов. Точность в микросекундах будет затем ограничена количеством микросекунд на образец.
Для получения текущей позиции в микросекундах используйте метод интерфейса getMicrosecondPositionDataLine.
- Параметры:
-
microseconds- желаемая новая позиция медиа, выраженная в микросекундах
setLoopPoints
void setLoopPoints(int start,
int end) Устанавливает начальную и конечную позиции образцов, которые будут воспроизводиться в цикле. Конечная точка должна быть больше или равна начальной, и обе должны находиться в пределах размера загруженной медиа. Значение 0 для начальной точки означает начало загруженной медиа. Аналогично, значение -1 для конечной точки обозначает последний кадр медиа.
- Параметры:
-
start- начальная позиция цикла в образцах (нумерация с нуля) -
end- конечная позиция цикла в образцах (нумерация с нуля), или -1 для обозначения последнего кадра - Исключения:
-
IllegalArgumentException- если заданные точки цикла не могут быть установлены, обычно потому, что одна или обе выходят за пределы длительности медиа или потому, что конечная точка предшествует начальной
loop
void loop(int count)
Начинает циклическое воспроизведение с текущей позиции. Воспроизведение будет продолжаться до конечной точки цикла, затем возвращается к начальной точке цикла count раз и, наконец, продолжается до конца клипа.
Если текущая позиция при вызове этого метода больше конечной точки цикла, воспроизведение просто продолжается до конца клипа без циклов.
Значение count 0 означает, что любой текущий цикл прекращается, и воспроизведение продолжается до конца клипа. Поведение не определено, если этот метод вызывается с любым другим значением во время циклической операции.
Если воспроизведение останавливается во время циклического воспроизведения, текущий статус цикла очищается; поведение последующих запросов цикла и начала не зависит от прерванной циклической операции.
- Параметры:
-
count- количество раз, когда воспроизведение должно возвращаться от конечной точки цикла к начальной точке цикла, илидля обозначения того, что циклическое воспроизведение должно продолжаться до прерыванияLOOP_CONTINUOUSLY
© 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.