Java Sound API была частью стандартной библиотеки Java 2 Platform с 1,3 релизе. Найдено в javax.sound.sampled пакет Java Sound API обеспечивает поддержку для воспроизведения и захвата аудио. Кроме того, библиотека предлагает программный микшер аудио и MIDI (Musical Instrument Digital Interface) устройства доступа. В этот совет, вы узнаете, как захват аудио через Java Sound API и воспроизводить его.
Javax.sound.sampled пакет состоит из восьми интерфейсов, двенадцать верхнего уровня класса, двенадцать внутренних классов, а за двумя исключениями. Для записи и воспроизведения аудио, вам необходимо иметь дело только с общей сложности семь частей пакета.
Рассмотрим первую запись. Основной процесс записи выглядит следующим образом:
Опишите аудио формате, в котором вы хотите записать данные. Это включает в себя указание частоты дискретизации и количество каналов (по сравнению с моно стерео) для аудио. Вы задаете эти свойства, используя уместно названный AudioFormat класс. Есть два конструкторов для создания объектов AudioFormat:
|
Первый конструктор позволяет явно указать формат кодирования звука, а вторая используется по умолчанию. Имеющиеся кодировки ALAW, PCM_SIGNED, PCM_UNSIGNED и ULAW. Кодировка по умолчанию используется для второго конструктора PCM. Вот пример, который использует второй конструктор для создания AudioFormat объект для одного канала записи в формате 8 кГц:
|
После того как вы описывать аудио формат, Вам необходимо получить линий передачи данных. Этот интерфейс представляет собой аудио-канал, из которого вы можете захватить аудио. Вы используете подинтерфейсом Dataline сделать фактический захват. Подинтерфейсом называется TargetDataLine. Чтобы получить TargetDataLine Вы спросите, аудиосистема. Однако, когда вы это сделаете, вам нужно указать информацию о линии. Чтобы внести уточнение в виде объекта DataLine.Info. В частности, необходимо создать объект DataLine.Info, специфичные для типов линий передачи данных и аудио форматов. Вот несколько строк исходного что получить TargetDataLine.
|
Если TargetDataLine недоступен, бросают LineUnavailableException.
На данный момент у вас есть источник входа. Вы можете думать о TargetDataLine как входного потока. Однако, это требует некоторой настройки прежде чем вы можете прочитать форму. Установка в данном случае означает открытие первой линии с помощью Open () метод, а затем строку инициализации с помощью пускового () метод:
|
Ваши данные линия будет готова, так что вы можете начать запись, как показано в следующих строках кода. Здесь вы сохраните захватили аудио потока в массив байтов для последующего воспроизведения. Можно также сохранять аудио поток в файл. Заметьте, что вы должны управлять, когда нужно остановиться вне чтения цикла конструкции.
|
Теперь давайте рассмотрим воспроизведения звука. Существуют две основные различия в воспроизведении аудио по сравнению с записью звука. Во-первых, когда вы играете аудио, байты прибывают из AudioInputStream вместо TargetDataLine. Во-вторых, вы пишите в SourceDataLine вместо в ByteArrayOutputStream. Кроме того, процесс такой же.
Чтобы получить AudioInputStream, вам необходимо преобразовать ByteArrayOutputStream в исходный AudioInputStream. Конструктор AudioInputStream требует байт из выходного потока, кодировка, в аудио формате, а число выборки:
|
Получение линий передачи данных аналогично тому, как вы получите его на аудио-записи, но для воспроизведения аудио, нужно принести SourceDataLine вместо TargetDataLine:
|
Установка для линии совпадает с настройкой для аудио-записи:
|
Последний шаг для воспроизведения аудио, как показано ниже. Обратите внимание, что этот шаг похож на последний шаг в записи. Однако, здесь вы читали из буфера и писать на данную строку. Существует также добавил, что операция умов работает как румянец на исходящий поток.
|
Следующая программа помещает эти шаги вместе, чтобы продемонстрировать использование Java Sound API для записи и воспроизведения звука. Также программа представляет собой графический интерфейс. Нажмите кнопку Захват, чтобы начать запись звука, кнопку Стоп для остановки записи и воспроизведения кнопки для воспроизведения аудио.
Примечание: В зависимости от вашей звуковой поддержкой платформы обеспечивает, вы, возможно, потребуется изменить формат возвращаемых getFormat метода в программе. Если вы не знаете, какой формат поддерживает вашу платформу, скачать демо-программы со страницы Java Sound демо, и запустите его. Перейдите на вкладку CapturePlayback, и найти набор параметров формата, которые работают для Вас. Вы можете загрузить аудио-файл с аудио подкаталог, а затем попробовать различные настройки слева, пока что-то работы. Использовать эти настройки в создании AudioFormat возвращается getFormat ().
|
Вы можете найти более полный пример использования Java Sound API на странице Java Sound Demo. Этот пример показывает также осциллограф звуковой волны как это воспроизведения.
Copyright (C) 2004-2005 Sun Microsystems, Inc
Все права защищены.