Интерфейс DataLine
- Все суперинтерфейсы:
- AutoCloseable, Line
- Все известные дочерние интерфейсы:
- Clip, SourceDataLine, TargetDataLine
public interface DataLine extends Line
DataLine добавляет функциональность, связанную со звуком, к своему суперинтерфейсу, . Эта функциональность включает методы управления передачей, которые запускают, останавливают, очищают и сбрасывают аудиоданные, проходящие через линию. Линия данных также может сообщать о текущей позиции, громкости и формате аудио данных. Линии данных используются для вывода звука с помощью подинтерфейсов Line или SourceDataLine, которые позволяют прикладному программированию записывать данные. Аналогично, входной звук обрабатывается подинтерфейсом Clip, который позволяет читать данные.TargetDataLine
Линия данных имеет внутренний буфер, в котором хранятся входящие или исходящие аудиоданные. Метод блокируется до тех пор, пока этот внутренний буфер не станет пустым, обычно потому, что все данные очереди были обработаны. Метод drain() отбрасывает все доступные данные очереди из внутреннего буфера.flush()
Линия данных генерирует и START события всякий раз, когда она начинает или прекращает активное представление или захват данных. Эти события могут генерироваться в ответ на конкретные запросы или в результате менее прямых изменений состояния. Например, если STOP вызывается на неактивной линии данных, и данные доступны для захвата или воспроизведения, событие start()START будет сгенерировано вскоре, когда начнется воспроизведение или захват данных. Или, если поток данных на активную линию данных сужается таким образом, что происходит разрыв в представлении данных, генерируется событие STOP.
Микшеры часто поддерживают синхронизированное управление несколькими линиями данных. Синхронизация может быть установлена с помощью метода интерфейса Mixer . Более подробное описание см. в описании интерфейса synchronize.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.