Spec-Zone .ru
спецификации, руководства, описания, API
|
AudioSystem.java
В пользу поставщиков услуг и разработчиков API, обеспечивается краткий обзор исходного кода Звука Java.
javax.sound.sampled.AudioSystem
точка входа к JavaSound для того, чтобы получить ресурсы; то есть, микшеры, строки, и т.д. И каждый метод AudioSystem
включает получение провайдеров некоторой службы —MixerProvider[]
, FormatConversionProvider[]
, AudioFileReader[]
, или AudioFileWriter[]
. Затем метод продолжает получать некоторую определенную информацию или выполнять некоторую задачу. Есть большое подобие в том, как эти методы работают. Давайте смотреть на как getMixerInfo()
работы.
Следующее является схемой последовательности getMixerInfo()
в AudioSystem.java
:
getMixerInfo()
в AudioSystem
первые вызовы getMixerProviders()
, a private static
метод AudioSystem
. Первая вещь это getMixerProviders()
делает попытаться загрузиться sun.misc.Service
. Если исключение выдается, это означает, что пред1.3 JRE используются и нет никакого существующего механизма поиска поставщика услуг. Если исключение выдается, то sun.media.sound.DefaultServices
используется, чтобы получить поставщиков услуг (не изображенный в вышеупомянутой схеме). Если 1.3 mechanims присутствуют, то getJDK13Serives()
вызывается (показанным выше) с "javax.sound.sampled.spi.MixerProvider"
как параметр.
getJDK13Services()
другой private static
метод AudioSystem
. Это делает попытку к загрузке класса для "com.sun.media.sound.JDK13Services"
, и если это следует за этим набор Class jdk13Services
равный этому. Немного обмана тогда выполняется при использовании Class.getMethod()
добраться getProviders()
метод jdk13Services
, который возвращается как объект Method m
. Метод тогда вызывается, который имеет эффект вызова getProviders("javax.sound.sampled.spi.MixerProvider")
на JDK13Services
. Это поочередно использует providers()
метод sun.misc.Service
возвратить вектор провайдеров микшера, MixerProvider[]
. getMixerInfo()
метод MixerProvider
тогда вызывается на каждом элементе вектора, чтобы возвратить информацию (Mixer.info
) для всех микшеров всех провайдеров микшера.
Другие службы обрабатываются похожим способом. Например, getTargetEncodings()
вызовы getFormatConversionProviders()
, getAudioFileFormat()
вызовы getAudioFileReaders()
, и т.д., которые так же структурируются к getMixerProviders()
.