Класс AudioFormat

public class AudioFormat
extends Object

AudioFormat — это класс, определяющий конкретное расположение данных в звуковом потоке. Анализируя информацию, содержащуюся в формате аудио, можно понять, как интерпретировать биты в двоичных звуковых данных.

Каждая линия данных имеет связанный с ней формат аудио. Формат аудио исходной (воспроизводящей) линии данных указывает, какой тип данных линия данных ожидает получить для вывода. Для целевой (записывающей) линии данных формат аудио определяет тип данных, которые можно считать с линии.

Звуковые файлы также имеют форматы аудио, конечно. Класс AudioFileFormat инкапсулирует AudioFormat помимо другой, специфичной для файла информации. Аналогично, у AudioInputStream есть AudioFormat.

Класс 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

Производители поставщиков услуг (плагинов) рекомендуют искать информацию об уже установленных свойствах в плагинах третьих сторон и следовать тем же соглашениям.

Since:
1.3
См. также:
DataLine.getFormat(), AudioInputStream.getFormat(), AudioFileFormat, FormatConversionProvider

Вложенные классы

Модификатор и тип Класс Описание
static class  AudioFormat.Encoding

Класс 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​(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian)

Создаёт AudioFormat с линейным кодированием PCM и заданными параметрами.

AudioFormat​(AudioFormat.Encoding encoding, float sampleRate, int sampleSizeInBits, int channels, int frameSize, float frameRate, boolean bigEndian)

Создаёт AudioFormat с заданными параметрами.

AudioFormat​(AudioFormat.Encoding encoding, float sampleRate, int sampleSizeInBits, int channels, int frameSize, float frameRate, boolean bigEndian, Map<String,​Object> properties)

Создаёт AudioFormat с заданными параметрами.

Методы

Модификатор и тип Метод Описание
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

Поля

кодирование

protected AudioFormat.Encoding encoding

Метод кодирования аудио, используемый в этом формате.

частота_дискретизации

protected float sampleRate

Количество выборок, воспроизводимых или записываемых в секунду, для звуков, имеющих этот формат.

размер_выборки_в_битах

protected int sampleSizeInBits

Количество битов в каждой выборке звука в этом формате.

каналы

protected int channels

Количество аудиоканалов в этом формате (1 для моно, 2 для стерео).

размер_кадра

protected int frameSize

Количество байтов в каждом кадре звука в этом формате.

частота_кадров

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> содержащий свойства формата
Since:
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 Гц 16 бит моно big-endian». Содержимое строки может отличаться в разных реализациях Java Sound.

Переопределяет:
toString в классе Object
Возвращает:
строку, описывающую параметры формата

© 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/AudioFormat.html

Spec-Zone .ru
спецификации, руководства, описания, API