Интерфейс Clip
- Все суперинтерфейсы:
-
AutoCloseable,DataLine,Line
public interface Clip extends DataLine
Интерфейс Clip представляет собой особый тип данных строки, аудиоданные которой могут быть загружены до воспроизведения вместо потоковой передачи в реальном времени.
Поскольку данные предварительно загружены и имеют известную длину, вы можете установить начало воспроизведения клипа в любой позиции его аудиоданных. Вы также можете создать цикл, чтобы клип воспроизводился циклически. Циклы задаются начальной и конечной выборкой кадров, а также числом повторений цикла.
Клипы могут быть получены от Mixer, который поддерживает строки этого типа. Данные загружаются в клип при его открытии.
Воспроизведение аудиоклипа может быть начато и остановлено с помощью методов start и stop. Эти методы не сбрасывают позицию медиа; start заставляет воспроизведение продолжить с позиции, на которой оно было остановлено. Чтобы перезапустить воспроизведение с начала аудиоданных клипа, просто выполните вызов stop с setFramePosition(0), что перемотает медиа в начало клипа.
- С:
- 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- если при чтении из потока произошла ошибка ввода-вывода -
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)
Устанавливает позицию медиа в кадрах сэмплов. Позиция нулевая; первый кадр имеет номер 0. Когда клип начнет воспроизведение в следующий раз, он начнется с воспроизведения кадра в этой позиции.
Чтобы получить текущую позицию в кадрах сэмплов, используйте метод getFramePosition объекта DataLine.
- Параметры:
-
frames- желаемая новая позиция медиа, выраженная в кадрах сэмплов
setMicrosecondPosition
void setMicrosecondPosition(long microseconds)
Устанавливает позицию медиа в микросекундах. Когда клип начнет воспроизведение в следующий раз, он начнется с этой позиции. Уровень точности не гарантируется. Например, реализация может вычислить позицию в микросекундах из текущей позиции кадра и частоты сэмплов аудиокадра. Точность в микросекундах затем будет ограничена числом микросекунд на кадр сэмпла.
Чтобы получить текущую позицию в микросекундах, используйте метод getMicrosecondPosition объекта DataLine.
- Параметры:
-
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.
https://docs.oracle.com/en/java/javase/11/docs/api/java.desktop/javax/sound/sampled/Clip.html