Spec-Zone .ru
спецификации, руководства, описания, API
След: Звук
Краткий обзор Выбранного Пакета
Домашняя страница > Звук

Краткий обзор Выбранного Пакета

javax.sound.sampled пакет существенно касается аудио транспорта — другими словами, API Звука Java сосредотачивается на воспроизведении и получении. Центральная задача, которую адресует API Звука Java, состоит в том, как переместить байты отформатированных аудиоданных в и из системы. Эта задача включает вводный аудиовход и устройства вывода и управляющие буферы, которые заполняются звуковыми данными в реальном времени. Это может также включить смешивающиеся многократные потоки аудио в один поток (ли для ввода или вывода). Транспорт звука в или из системы должен быть правильно обработан, когда пользователь запрашивает, чтобы поток звука был запущен, приостановлен, возобновлен, или остановлен.

Чтобы поддерживать это сосредотачивается на основном аудиовходе и выводило, API Звука Java обеспечивает методы для того, чтобы они преобразовали между различными форматами аудиоданных, и для чтения и записи общих типов звуковых файлов. Однако, это не пытается быть всесторонним инструментарием звукового файла. Определенная реализация API Звука Java не должна поддерживать обширный набор преобразований формата данных или типов файла. Сторонние поставщики услуг могут предоставить модули, которые "включают" к существующей реализации, чтобы поддерживать дополнительные типы файла и преобразования.

API Звука Java может обработать аудио транспорт и в потоковой передаче, буферизованном виде и в небуферизованном виде в памяти. "Потоковая передача" используется здесь в общем смысле обратиться к обработке в реальном времени аудио байтов; это не обращается к определенному, известному случаю отправки аудио по Интернету в определенном формате. Другими словами поток аудио является просто непрерывным набором аудио байтов, которые прибывают более или менее в тот же самый уровень, что они должны быть обработаны (играемый, записанный, и т.д.) . Операции на байтах начинаются прежде, чем все данные прибыли. В модели потоковой передачи, особенно в случае аудиовхода, а не аудиовыхода, Вы не обязательно знаете заранее, какой длины звук и когда это закончит прибывать. Вы просто обрабатываете один буфер аудиоданных за один раз, пока работа не останавливается. В случае аудиовыхода (воспроизведение) Вы также должны буферизовать данные, если звук, который Вы хотите играть, является слишком большим, чтобы уместиться в памяти внезапно. Другими словами Вы поставляете свои аудио байты звуковому механизму в блоках, и он заботится об игре каждой выборки в нужное время. Механизмы - то, при условии, что облегчают знать сколько данных поставлять в каждом блоке.

API Звука Java также разрешает небуферизованный транспорт в случае воспроизведения только, предполагая, что у Вас уже есть все аудиоданные под рукой, и это не является слишком большим, чтобы уместиться в памяти. В этой ситуации нет никакой потребности в прикладной программе, чтобы буферизовать аудио, хотя буферизованный, подход в реальном времени все еще доступен при желании. Вместо этого весь звук может быть предварительно загружен сразу в память для последующего воспроизведения. Поскольку все звуковые данные загружаются заранее, воспроизведение может сразу запуститься — например, как только пользователь нажимает кнопку Start. Это может быть преимуществом по сравнению с буферизованной моделью, где воспроизведение должно ожидать первого буфера, чтобы заполниться. Кроме того, небуферизованная модель в памяти позволяет звукам быть легко циклично выполненными (циклически повторенные) или набор к произвольным позициям в данных.

Чтобы играть или получить звук, используя API Звука Java, Вы нуждаетесь по крайней мере в трех вещах: отформатированные аудиоданные, микшер, и строка. Следующее обеспечивает краткий обзор этих понятий.

Каковы Отформатированные Аудиоданные?

Отформатированные аудиоданные относятся, чтобы звучать в любом из многих стандартных форматов. API Звука Java различает форматы данных и форматы файлов.

Форматы данных

Формат данных говорит Вам, как интерпретировать серию байтов "сырых данных" выбранные аудиоданные, таких как выборки, которые были уже считаны из звукового файла, или выборок, которые были получены от ввода микрофона. Вы, возможно, должны были бы знать, например, сколько битов составляет одну выборку (представление самого короткого момента звука), и так же Вы, возможно, должны были бы знать демонстрационный уровень звука (как быстро выборки, как предполагается, следуют за друг другом). Устанавливая для воспроизведения или получения, Вы определяете формат данных звука, который Вы получаете или играете.

В API Звука Java формат данных представляется AudioFormat объект, который включает следующие атрибуты:

PCM является одним видом кодирования звуковой формы волны. API Звука Java включает два кодировок PCM, которые используют линейное квантование амплитуды, и значения подписанного или целого без знака. Линейное квантование означает, что число, сохраненное в каждой выборке, прямо пропорционально (за исключением любого искажения) к исходному звуковому давлению в этом instant⠀” и так же пропорционально смещению громкоговорителя или барабанной перепонки, которая вибрирует со звуком в тот момент. Компакт-диски, например, используют линейный PCM-закодированный звук. Кодирование Mu-закона и законное кодирование являются общими нелинейными кодировками, которые обеспечивают более сжатую версию аудиоданных; эти кодировки обычно используются для телефонии или записей речи. Нелинейное кодирование отображает амплитуду исходного звука на хранимую сумму, используя нелинейную функцию, которая может быть разработана, чтобы дать больше амплитудного разрешения, чтобы подавить шумы звуков чем к громким звукам.

Фрейм содержит данные для всех каналов в определённое время. Для PCM-закодированных данных фрейм является просто набором одновременных выборок во всех каналах, в течение данного момента вовремя, без любой дополнительной информации. В этом случае частота кадров равна демонстрационному уровню, и тип телосложения в байтах является числом каналов, умноженных на объем выборки в битах, разделенных на число битов в байте.

Для других видов кодировок фрейм мог бы содержать дополнительную информацию помимо выборок, и частота кадров могла бы абсолютно отличаться от демонстрационного уровня. Например, считайте MP3 (MPEG 1 Аудио Уровень 3) кодированием, которое явно не упоминается в текущей версии API Звука Java, но которое могло поддерживаться реализацией API Звука Java или сторонним поставщиком услуг. В MP3 каждый фрейм содержит пакет сжатых данных для ряда выборок, не только одной выборки на канал. Поскольку каждый фрейм инкапсулирует целый ряд выборок, частота кадров медленнее чем демонстрационный уровень. Фрейм также содержит заголовок. Несмотря на заголовок, тип телосложения в байтах является меньше чем размер в байтах эквивалентного числа фреймов PCM. (В конце концов цель MP3 состоит в том, чтобы быть более компактной чем данные PCM.) Для такого кодирования демонстрационный уровень и объем выборки обращаются к данным PCM, что закодированный звук будет в конечном счете преобразован в прежде, чем быть поставленным цифро-аналоговому преобразователю (DAC).

Форматы файлов

Формат файла определяет структуру звукового файла, включая не только формат необработанных аудиоданных в файле, но также и другая информация, которая может храниться в файле. Звуковые файлы, прибывшие в различные стандартные варианты, такие как WAVE (также известный как WAV, и часто связываемый с PC), AIFF (часто связываемый с Макинтошами), и AU (часто связываемый с системами UNIX). У различных типов звукового файла есть различные структуры. Например, у них могло бы быть различное расположение данных в "заголовке" файла. Заголовок содержит дескриптивную информацию, которая обычно предшествует фактическим аудиосэмплам файла, хотя некоторые форматы файлов позволяют последовательные "блоки" дескриптивных и аудиоданных. Заголовок включает спецификацию формата данных, который использовался для того, чтобы сохранить аудио в звуковом файле. Любой из этих типов звукового файла может содержать различные форматы данных (хотя обычно есть только один формат данных в пределах данного файла), и тот же самый формат данных может использоваться в файлах, у которых есть различные форматы файлов.

В API Звука Java формат файла представляется AudioFileFormat объект, который содержит:

AudioSystem class обеспечивает методы для чтения и записи звуков в различных форматах файлов, и для того, чтобы преобразовать между различными форматами данных. Некоторые из методов, которым позволяют Вы получить доступ к содержанию файла через своего рода поток, вызванный AudioInputStream . AudioInputStream подкласс InputStream class, который инкапсулирует серию байтов, которые могут быть считаны последовательно. К его суперклассу, AudioInputStream class добавляет знание формата аудиоданных байтов (представленный AudioFormat объект). Читая звуковой файл как AudioInputStream, Вы получаете немедленный доступ к выборкам, не имея необходимость волноваться о структуре звукового файла (ее заголовок, блоки, и т.д.). Единственный вызов метода дает Вам всю информацию, в которой Вы нуждаетесь о формате данных и типе файла.

Каков Микшер?

Много прикладных программных интерфейсов (API) для звука используют понятие аудиоустройства. Устройство часто является интерфейсом программного обеспечения к физическому устройству ввода-вывода. Например, звуковое устройство ввода данных могло бы представить входные возможности звуковой карты, включая ввод микрофона, аналоговый вход на уровне строки, и возможно ввод цифрового аудио.

В API Звука Java устройства представляются Mixer объекты. Цель микшера состоит в том, чтобы обработать один или более потоков аудиовхода и один или более потоков аудиовыхода. В типичном случае это фактически смешивает вместе многократные входящие потоки в один исходящий поток. A Mixer объект может представить смешивающие звук возможности физического устройства, такие как звуковая карта, которая, возможно, должна была бы смешать звук, входящий к компьютеру от различных вводов, или звуку, прибывающему из прикладных программ и идущему в выводы.

Альтернативно, a Mixer объект может представить смешивающие звук возможности, которые реализуются полностью в программном обеспечении без любого свойственного интерфейса к физическим устройствам.

В API Звука Java компонент, такой как ввод микрофона на звуковой карте самостоятельно не считают устройством — то есть, микшер — а скорее порт в или из микшера. Порт обычно обеспечивает единый поток аудио в или из микшера (хотя поток может быть многоканальным, таким как стерео). У микшера могли бы быть несколько таких портов. Например, микшер, представляющий выходные возможности звуковой карты, мог бы смешать несколько потоков аудио вместе, и затем отправить смешанный сигнал любым из различных выходных портов, соединенных с микшером. Эти выходные порты могли быть (например) гнездом для наушников, встроенным динамиком, или выводом на уровне строки.

Чтобы понять понятие микшера в API Звука Java, это помогает визуализировать физический микшерный пульт, такой как используемые на живых концертах и студиях звукозаписи.

Следующий контекст описывает это число.

Физический Микшерный пульт

У физического микшера есть "полосы" (также названный "частями"), каждый представляющий путь, через который единственный аудиосигнал входит в микшер для того, чтобы обработать. У полосы есть кнопки и другие средства управления, которыми можно управлять объемом и панорамированием (размещение в изображении стерео) для сигнала в той полосе. Кроме того, у микшера могла бы быть отдельная шина для эффектов, таких как реверберация, и эта шина может быть соединена с внутренним или внешним модулем реверберации. У каждой полосы есть потенциометр, который управляет сколько, из которых сигнал полосы входит в отраженное соединение. Отраженное ("влажное") соединение тогда смешивается с "сухими" сигналами от полос. Физический микшер отправляет эту заключительную смесь выходной шине, которая обычно идет в магнитофон (или находящаяся на диске система записи) и/или динамики.

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

Теперь вообразите студию звукозаписи, в которой каждый инструмент или певец записываются к отдельной дорожке многодорожечного магнитофона. После того, как инструменты и певцы были все записаны, инженер записи выполняет "mixdown", чтобы объединить все записанные на ленту дорожки в с двумя каналами (стерео), записывающий, который может быть распределен на компакт-дисках. В этом случае ввод к каждой из полос микшера не является микрофоном, но одной дорожкой многодорожечной записи. Еще раз инженер может использовать средства управления на полосах, чтобы решить объем каждой дорожки, панорамирование, и количество реверберации. Выводы микшера идут еще раз в устройство записи стерео и в динамики стерео, как в примере живого концерта.

Эти два примера иллюстрируют два различного использования микшера: чтобы получить многократные входные каналы, объедините их в меньшее количество дорожек, и сохраните смесь, или воспроизвести многократные дорожки, смешивая их вниз к меньшему количеству дорожек.

В API Звука Java микшер может так же использоваться для ввода (получающий аудио) или выведен (воспроизведение аудио). В случае ввода источник, из которого микшер получает аудио для того, чтобы оно смешалось, один или более входные порты. Микшер отправляет полученные и смешанные аудиопотоки своей цели, которая является объектом с буфером, от которого прикладная программа может получить эти смешанные аудиоданные. В случае аудиовыхода инвертируется ситуация. Источник микшера для аудио является одним или более объектами, содержащими буферы, в которые или больше прикладных программ пишут их звуковые данные; и цель микшера один или более выходные порты.

Какова Строка?

Метафора физического микшерного пульта также полезна для понимания понятия API Звука Java строки.

Строка является элементом цифрового аудио "конвейер" ⠀” то есть, путь для движущегося аудио в или из системы. Обычно строка является путем в или из микшера (хотя технически сам микшер является также своего рода строкой).

Аудиовход и выходные порты являются строками. Они походят на микрофоны и динамики, соединенные с физическим микшерным пультом. Другой вид строки является информационным каналом, через который прикладная программа может получить введенное аудио от, или отправить выходное аудио, микшер. Эти информационные каналы походят на дорожки многодорожечного устройства записи, соединенного с физическим микшерным пультом.

Одно различие между строками в API Звука Java и таковых из физического микшера - то, что аудиоданные, текущие через строку в API Звука Java, могут быть моно или многоканальными (например, стерео). В отличие от этого, каждый из вводов и выводов физического микшера обычно является единственным каналом звука. Чтобы получить два или больше канала вывода от физического микшера, два или больше физических вывода обычно используются (по крайней мере, в случае аналогового звука; разъем цифрового выхода является часто многоканальным). В API Звука Java число каналов в строке определяется AudioFormat из данных, которые являются в настоящий момент плавными через строку.

Теперь давайте исследуем некоторые определенные виды строк и микшеров. Следующая схема показывает различные типы строк в простой системе аудиовыхода, которая могла быть частью реализации API Звука Java:

Следующий контекст описывает это число.

Возможная Конфигурация Строк для Аудиовыхода

В этом примере прикладная программа получила доступ к некоторым доступным вводам микшера аудиовхода: один или более клипов и строки исходных данных. Клип является вводом микшера (своего рода строка), в который можно загрузить аудиоданные до воспроизведения; строка исходных данных является вводом микшера, который принимает поток в реальном времени аудиоданных. Прикладная программа предварительно загружает аудиоданные от звукового файла в клипы. Это тогда продвигает другие аудиоданные в строки исходных данных, буфер за один раз. Микшер читает данные из всех этих строк, у каждой из которых могут быть своя собственная реверберация, усиление, и средства управления панорамированием, и смешивается, сухие аудиосигналы с влажным (отражались) соединение. Микшер поставляет свой окончательный результат один или более выходные порты, такие как динамик, гнездо для наушников, и разъем строки.

Хотя различные строки изображаются как отдельные прямоугольники в схеме, они все "принадлежат" микшеру, и могут считаться неотъемлемыми частями микшера. Реверберация, усиление, и прямоугольники панорамирования представляют средства управления обработкой (а не строки), который может быть применен микшером к данным, текущим через строки.

Отметьте, что это - только один пример возможного микшера, который поддерживается API. Не у всех аудио конфигураций будут все функции иллюстрированными. Отдельная строка исходных данных не могла бы поддерживать панорамирование, микшер не мог бы реализовать реверберацию и так далее.

Простая система аудиовхода могла бы быть подобной:

Следующий контекст описывает это число

Возможная Конфигурация Строк для Аудиовхода

Здесь, потоки данных в микшер от один или более входные порты, обычно микрофон или строка - в разъеме. Усиление и панорамирование применяются, и микшер поставляет полученные данные прикладной программе через целевую строку данных микшера. Целевая строка данных является выводом микшера, содержа смесь переданных потоком входных звуков. У самого простого микшера есть только одна целевая строка данных, но некоторые микшеры могут поставить полученные данные многократным целевым строкам данных одновременно.

Иерархия Линейного интерфейса

Теперь, когда мы видели некоторые функциональные изображения того, что выравнивает, и микшеры, давайте обсуждать их с немного большей программируемой точки зрения. Несколько типов строки определяются подынтерфейсами основного Line интерфейс. Иерархию интерфейса показывают ниже.

Следующий контекст описывает это число

Иерархия Линейного интерфейса

Основной интерфейс, Line, описывает минимальную функциональность, характерную для всех строк:

Мы теперь исследуем подынтерфейсы Line интерфейс.

Ports простые строки для ввода или вывода аудио к или от аудиоустройств. Как отмечалось ранее некоторые общие типы портов являются микрофоном, вводом строки, дисководом для компакт-дисков, динамиком, наушником, и выводом строки.

Mixer интерфейс представляет микшер, конечно, который, как мы видели, представляет или аппаратные средства или устройство программного обеспечения. Mixer интерфейс обеспечивает методы для того, чтобы они получили строки микшера. Они включают исходные строки, которые подают аудио к микшеру, и предназначаются для строк, которым микшер поставляет свое смешанное аудио. Для микшера аудиовхода исходные строки являются входными портами, такими как ввод микрофона, и целевые строки TargetDataLines (описанный ниже), которые поставляют аудио прикладной программе. Для микшера аудиовыхода, с другой стороны, исходные строки Clips или SourceDataLines (описанный ниже), к которому прикладная программа подает аудиоданные, и целевые строки, выходные порты, такие как динамик.

A Mixer определяется как наличие того или большего количества исходных строк и один или более целевых строк. Отметьте, что это определение означает, что микшер не должен фактически смешать данные; у этого могло бы быть только единственная исходная строка. Mixer API предназначается, чтобы охватить множество устройств, но типичный случай поддерживает смешивание.

Mixer интерфейс поддерживает синхронизацию; то есть, можно определить, что две или больше из строк микшера обрабатываются как синхронизируемая группа. Затем можно запустить, остановиться, или закрыть все те строки данных, отправляя единственное сообщение любой строке в группе, вместо того, чтобы иметь необходимость управлять каждой строкой индивидуально. С микшером, который поддерживает эту функцию, можно получить демонстрационно-точную синхронизацию между строками.

Обобщение Line интерфейс не обеспечивает средство запустить и остановить воспроизведение или запись. Для этого Вы нуждаетесь в строке данных. DataLine взаимодействуйте через интерфейс предоставляет следующие дополнительные связанные с носителями функции вне таковых a Line:

A TargetDataLine получает аудиоданные от микшера. Обычно, микшер получил аудиоданные от порта, такого как микрофон; это могло бы обработать или смешать это полученное аудио прежде, чем поместить данные в целевой буфер строки данных. TargetDataLine интерфейс обеспечивает методы для того, чтобы они считали данные из целевого буфера строки данных и для того, чтобы определить, сколько данных в настоящий момент доступно для чтения.

A SourceDataLine получает аудиоданные для воспроизведения. Это обеспечивает методы для того, чтобы они записали данные в буфер строки исходных данных для воспроизведения, и для того, чтобы определить, сколько данных строка готовится получить без блокирования.

A Clip строка данных, в которую аудиоданные могут быть загружены до воспроизведения. Поскольку данные предварительно загружаются, а не передаются потоком, продолжительность клипа известна перед воспроизведением, и можно выбрать любую стартовую позицию в носителях. Клипы могут быть циклично выполнены, означая, что на воспроизведение, все данные между двумя указанными точками цикла повторят конкретное количество времен, или неопределенно.

Этот раздел представил большинство важных интерфейсов и классов API выбранного аудио. Последующее шоу разделов, как можно получить доступ и использовать эти объекты в своей прикладной программе.

 


Проблемы с примерами? Попытайтесь Компилировать и Выполнить Примеры: FAQ.
Жалобы? Поздравление? Предложения? Дайте нам свою обратную связь.

Предыдущая страница: Оглавление
Следующая страница: Доступ к Ресурсам Аудиосистемы