Класс AudioFormat
- java.lang.Object
-
- javax.sound.sampled.AudioFormat
public class AudioFormat extends Object
AudioFormat — это класс, определяющий конкретную организацию данных в потоке звука. Исследуя информацию, хранящуюся в формате аудио, вы можете узнать, как интерпретировать биты в двоичных данных звука.
Каждая строка данных имеет связанный с ней формат аудио. Формат аудио для строки данных источника (воспроизведения) указывает, какой тип данных строка данных ожидает получить для вывода. Для строки данных приемника (захвата) формат аудио определяет тип данных, которые могут быть прочитаны из строки. Конечно, звуковые файлы также имеют форматы аудио. Класс инкапсулирует AudioFileFormatAudioFormat, а также другую, специфичную для файла информацию. Аналогично, имеет AudioInputStreamAudioFormat.
Класс AudioFormat поддерживает ряд распространенных методов кодирования звуковых файлов, включая импульсно-кодовую модуляцию (PCM), кодирование mu-закона и кодирование a-закона. Эти методы кодирования предопределены, но поставщики услуг могут создавать новые типы кодирования. Кодирование, используемое конкретным форматом, называется его полем encoding.
В дополнение к кодированию формат аудио включает другие свойства, которые дополнительно определяют точную организацию данных. К ним относятся количество каналов, частота дискретизации, размер выборки, порядок байтов, частота кадров и размер кадра. Звуки могут иметь разное количество аудиоканалов: один для моно, два для стерео. Частота дискретизации измеряет количество «мгновенных снимков» (выборок) звукового давления, производимых в секунду на канал. (Если звук стерео, а не моно, на каждый момент времени на самом деле измеряются две выборки: одна для левого канала и другая для правого канала; однако частота дискретизации всё равно измеряет количество на канал, поэтому частота одинакова независимо от количества каналов. Это стандартное использование термина.) Размер выборки указывает, сколько бит используется для хранения каждого снимка; типичные значения — 8 и 16. Для 16-битных выборок (или любого другого размера выборки, большего одного байта), порядок байтов важен; байты в каждой выборке упорядочены в стиле «little-endian» или «big-endian». Для кодирований, таких как PCM, кадр состоит из набора выборок для всех каналов в данный момент времени, и поэтому размер кадра (в байтах) всегда равен размеру выборки (в байтах) умноженному на количество каналов. Однако в некоторых других типах кодирования кадр может содержать набор сжатых данных для целого ряда выборок, а также дополнительные данные, не являющиеся выборками. Для таких кодирований частота дискретизации и размер выборки относятся к данным после их декодирования в PCM, и поэтому они совершенно отличаются от частоты кадров и размера кадра.
Объект AudioFormat может включать набор свойств. Свойство — это пара ключ-значение: ключ имеет тип String, соответствующее значение свойства — произвольный объект. Свойства определяют дополнительные спецификации формата, такие как битрейт для сжатых форматов. Свойства в основном используются как способ передачи дополнительной информации о формате аудио поставщикам услуг. Поэтому свойства игнорируются в методе matches(AudioFormat). Однако методы, которые полагаются на установленных поставщиков услуг, такие как (AudioFormat, AudioFormat) isConversionSupported, могут учитывать свойства, в зависимости от реализации соответствующего поставщика услуг.
В следующей таблице перечислены некоторые общие свойства, которые поставщики услуг должны использовать, если применимо:
| Ключ свойства | Тип значения | Описание |
|---|---|---|
| "bitrate" | Integer | средний битрейт в битах в секунду |
| "vbr" | Boolean |
true, если файл закодирован с переменным битрейтом (VBR) |
| "quality" | Integer | качество кодирования/преобразования, 1..100 |
Поставщики услуг (плагины) рекомендуются искать информацию об уже установленных свойствах в плагинах сторонних разработчиков и следовать тем же соглашениям.
- С тех пор:
- 1.3
- См. также:
-
DataLine.getFormat(),AudioInputStream.getFormat(),AudioFileFormat,FormatConversionProvider
Вложенные классы
| Модификатор и тип | Класс и описание |
|---|---|
static class |
AudioFormat.Encoding Класс |
Поля
| Модификатор и тип | Поле и описание |
|---|---|
protected boolean |
bigEndian Указывает, хранятся ли данные аудио в формате big-endian или little-endian. |
protected int |
channels Количество аудиоканалов в этом формате (1 для моно, 2 для стерео). |
protected AudioFormat.Encoding |
encoding Метод кодирования аудио, используемый этим форматом. |
protected float |
frameRate Количество кадров, воспроизводимых или записываемых в секунду для звуков, имеющих этот формат. |
protected int |
frameSize Количество байтов в каждом кадре звука, имеющего этот формат. |
protected float |
sampleRate Количество выборок, воспроизводимых или записываемых в секунду для звуков, имеющих этот формат. |
protected int |
sampleSizeInBits Количество бит в каждой выборке звука, имеющего этот формат. |
Краткое описание конструкторов
| Конструктор и описание |
|---|
AudioFormat(AudioFormat.Encoding encoding,
float sampleRate,
int sampleSizeInBits,
int channels,
int frameSize,
float frameRate,
boolean bigEndian) Создаёт |
AudioFormat(AudioFormat.Encoding encoding,
float sampleRate,
int sampleSizeInBits,
int channels,
int frameSize,
float frameRate,
boolean bigEndian,
Map<String,Object> properties) Создаёт |
AudioFormat(float sampleRate,
int sampleSizeInBits,
int channels,
boolean signed,
boolean bigEndian) Создаёт |
Краткое описание методов
| Модификатор и тип | Метод и описание |
|---|---|
int |
getChannels() Возвращает количество каналов. |
AudioFormat.Encoding |
getEncoding() Возвращает тип кодирования для звуков в этом формате. |
float |
getFrameRate() Возвращает частоту кадров в кадрах в секунду. |
int |
getFrameSize() Возвращает размер кадра в байтах. |
Object |
getProperty(String key) Получает значение свойства, заданного ключом. |
float |
getSampleRate() Возвращает частоту дискретизации. |
int |
getSampleSizeInBits() Возвращает размер выборки. |
boolean |
isBigEndian() Указывает, хранятся ли данные аудио в формате big-endian или little-endian. |
boolean |
matches(AudioFormat format) Указывает, соответствует ли этот формат заданному. |
Map<String,Object> |
properties() Получает неизменяемую карту свойств. |
String |
toString() Возвращает строку, описывающую формат, например: "PCM SIGNED 22050 Hz 16 bit mono big-endian". |
Методы, унаследованные от класса java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait Поля
encoding
protected AudioFormat.Encoding encoding
Метод кодирования аудио, используемый в данном формате.
sampleRate
protected float sampleRate
Количество выборок, воспроизводимых или записываемых в секунду для звуков, имеющих этот формат.
sampleSizeInBits
protected int sampleSizeInBits
Количество бит в каждой выборке звука с этим форматом.
channels
protected int channels
Количество аудиоканалов в этом формате (1 для моно, 2 для стерео).
frameSize
protected int frameSize
Количество байтов в каждом кадре звука с этим форматом.
frameRate
protected float frameRate
Количество кадров, воспроизводимых или записываемых в секунду для звуков с этим форматом.
bigEndian
protected boolean bigEndian
Указывает, хранятся ли аудиоданные в формате big-endian или little-endian.
Конструкторы
AudioFormat
public AudioFormat(AudioFormat.Encoding encoding,
float sampleRate,
int sampleSizeInBits,
int channels,
int frameSize,
float frameRate,
boolean bigEndian) Создает AudioFormat с заданными параметрами. Кодирование указывает соглашение, используемое для представления данных. Другие параметры подробно описаны в class description.
- Параметры:
-
encoding- метод кодирования аудио -
sampleRate- количество выборок в секунду -
sampleSizeInBits- количество бит в каждой выборке -
channels- количество каналов (1 для моно, 2 для стерео и т.д.) -
frameSize- количество байтов в каждом кадре -
frameRate- количество кадров в секунду -
bigEndian- указывает, хранятся ли данные для одной выборки в байтовом порядке big-endian (falseозначает little-endian)
AudioFormat
public AudioFormat(AudioFormat.Encoding encoding,
float sampleRate,
int sampleSizeInBits,
int channels,
int frameSize,
float frameRate,
boolean bigEndian,
Map<String,Object> properties) Создает AudioFormat с заданными параметрами. Кодирование указывает соглашение, используемое для представления данных. Другие параметры подробно описаны в class description.
- Параметры:
-
encoding- метод кодирования аудио -
sampleRate- количество выборок в секунду -
sampleSizeInBits- количество бит в каждой выборке -
channels- количество каналов (1 для моно, 2 для стерео и т.д.) -
frameSize- количество байтов в каждом кадре -
frameRate- количество кадров в секунду -
bigEndian- указывает, хранятся ли данные для одной выборки в байтовом порядке big-endian (falseозначает little-endian) -
properties- объектMap<String,Object>содержащий свойства формата - С момента:
- 1.5
AudioFormat
public AudioFormat(float sampleRate,
int sampleSizeInBits,
int channels,
boolean signed,
boolean bigEndian) Создает AudioFormat с кодированием линейного PCM и заданными параметрами. Размер кадра устанавливается в количество байтов, необходимое для хранения одной выборки с каждого канала, а частота кадров устанавливается равной частоте выборки.
- Параметры:
-
sampleRate- количество выборок в секунду -
sampleSizeInBits- количество бит в каждой выборке -
channels- количество каналов (1 для моно, 2 для стерео и т.д.) -
signed- указывает, подписанные или нет данные -
bigEndian- указывает, хранятся ли данные для одной выборки в байтовом порядке big-endian (falseозначает little-endian)
Методы
getEncoding
public AudioFormat.Encoding getEncoding()
Получает тип кодирования для звуков в этом формате.
- Возвращает:
- тип кодирования
- См. также:
-
AudioFormat.Encoding.PCM_SIGNED,AudioFormat.Encoding.PCM_UNSIGNED,AudioFormat.Encoding.ULAW,AudioFormat.Encoding.ALAW
getSampleRate
public float getSampleRate()
Получает частоту дискретизации. Для сжатых форматов возвращаемое значение равно частоте дискретизации несжатых аудиоданных. При использовании этого AudioFormat для запросов (например, AudioSystem.isConversionSupported) или возможностей (например, DataLine.Info.getFormats), значение AudioSystem.NOT_SPECIFIED означает, что любая частота дискретизации приемлема. AudioSystem.NOT_SPECIFIED также возвращается, когда частота дискретизации не определена для данного аудиоформата.
- Возвращает:
- количество выборок в секунду или
AudioSystem.NOT_SPECIFIED - См. также:
-
getFrameRate(),AudioSystem.NOT_SPECIFIED
getSampleSizeInBits
public int getSampleSizeInBits()
Получает размер выборки. Для сжатых форматов возвращаемое значение равно размеру выборки несжатых аудиоданных. При использовании этого AudioFormat для запросов (например, AudioSystem.isConversionSupported) или возможностей (например, DataLine.Info.getFormats), значение AudioSystem.NOT_SPECIFIED означает, что любой размер выборки приемлем. AudioSystem.NOT_SPECIFIED также возвращается, когда размер выборки не определен для данного аудиоформата.
- Возвращает:
- количество бит в каждой выборке или
AudioSystem.NOT_SPECIFIED - См. также:
-
getFrameSize(),AudioSystem.NOT_SPECIFIED
getChannels
public int getChannels()
Получает количество каналов. При использовании этого AudioFormat для запросов (например, AudioSystem.isConversionSupported) или возможностей (например, DataLine.Info.getFormats), значение AudioSystem.NOT_SPECIFIED означает, что любое (положительное) количество каналов приемлемо.
- Возвращает:
- Количество каналов (1 для моно, 2 для стерео и т.д.) или
AudioSystem.NOT_SPECIFIED - См. также:
AudioSystem.NOT_SPECIFIED
getFrameSize
public int getFrameSize()
Получает размер кадра в байтах. При использовании этого AudioFormat для запросов (например, AudioSystem.isConversionSupported) или возможностей (например, DataLine.Info.getFormats), значение AudioSystem.NOT_SPECIFIED означает, что любой размер кадра приемлем. AudioSystem.NOT_SPECIFIED также возвращается, когда размер кадра не определен для данного аудиоформата.
- Возвращает:
- количество байтов в кадре или
AudioSystem.NOT_SPECIFIED - См. также:
-
getSampleSizeInBits(),AudioSystem.NOT_SPECIFIED
getFrameRate
public float getFrameRate()
Получает частоту кадров в кадрах в секунду. При использовании этого AudioFormat для запросов (например, AudioSystem.isConversionSupported) или возможностей (например, DataLine.Info.getFormats), значение AudioSystem.NOT_SPECIFIED означает, что любая частота кадров приемлема. AudioSystem.NOT_SPECIFIED также возвращается, когда частота кадров не определена для данного аудиоформата.
- Возвращает:
- количество кадров в секунду или
AudioSystem.NOT_SPECIFIED - См. также:
-
getSampleRate(),AudioSystem.NOT_SPECIFIED
isBigEndian
public boolean isBigEndian()
Указывает, хранятся ли аудиоданные в байтовом порядке big-endian или little-endian. Если размер выборки не превышает одного байта, возвращаемое значение не имеет значения.
- Возвращает:
-
trueесли данные хранятся в порядке big-endian,falseесли little-endian
properties
public Map<String,Object> properties()
Получает неизменяемую карту свойств. Понятие свойств подробно описано в class description.
- Возвращает:
- объект
Map<String,Object>содержащий все свойства. Если свойства не распознаны, возвращается пустая карта. - С момента:
- 1.5
- См. также:
getProperty(String)
getProperty
public Object getProperty(String key)
Получает значение свойства, заданного ключом. Понятие свойств подробно описано в class description.
Если указанное свойство не определено для конкретного формата файла, этот метод возвращает null.
- Параметры:
-
key- ключ желаемого свойства - Возвращает:
- значение свойства с указанным ключом или
nullесли свойство не существует. - С момента:
- 1.5
- См. также:
properties()
matches
public boolean matches(AudioFormat format)
Указывает, соответствует ли этот формат указанному. Для соответствия два формата должны иметь одинаковое кодирование и согласованные значения количества каналов, частоты дискретизации, размера выборки, частоты кадров и размера кадра. Значения свойств согласованы, если они равны или указанный формат имеет значение свойства AudioSystem.NOT_SPECIFIED. Порядок байтов (big-endian или little-endian) должен быть одинаковым, если размер выборки больше одного байта.
- Параметры:
-
format- формат для проверки соответствия - Возвращает:
-
trueесли этот формат соответствует указанному,falseв противном случае.
toString
public String toString()
Возвращает строку, описывающую формат, например: "PCM SIGNED 22050 Hz 16 bit mono big-endian". Содержимое строки может отличаться в разных реализациях Java Sound.
© 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.