Java 音频API

Java 音频API

Java音频是一组类和接口。它是一个低级API,用于影响和控制声音媒体和音乐器数字接口(MIDI)数据的输入和输出。它提供了对声音输入和输出通常需要的能力的显式控制,以促进可扩展性和灵活性的框架。它由两个包组成,即javax.sound.sample和javax.sound.midi。

Java音频API设计用于哪些人

Java音频API满足了广泛的应用程序开发人员的需求,因为声音是一个至关重要的组件。可能的应用领域包括:

  • 通信框架,包括电话和会议

  • 传递用户生成内容的技术,例如媒体播放器和流媒体音乐

  • 交互式应用程序,例如游戏和动态生成的网站

  • 编辑和制作内容

  • 实用工具、设备和工具包

其他接口与Java音频API有何关系

Java平台通过Java音频API提供了最简单级别的声音功能。它灵活,并给应用程序广泛的控制声音操作。例如,Java音频API提供了设置、访问和修改系统资源的方法,包括音频混音器、MIDI合成器、其他音频或MIDI设备、文件读写器和音频格式转换器。

虽然Java音频API没有提供高级声音编辑器或图形工具,但它为这些程序提供了构建基块。除了最终用户通常期望之外,它强调了低级控制。

其他Java平台API提供与声音相关的组件。Java平台的更高级别API是Java媒体框架(JMF),目前作为标准扩展提供。对于录制和播放基于时间的材料,JMF定义了统一的架构、通信协议和编程接口。JMF允许在各种媒体类型之间进行同步,例如音频和视频。

它为基本媒体播放器应用程序提供了一个更简单的解决方案。另一方面,Java音频API对于主要涉及声音的程序可能很有用,特别是如果它们需要更复杂的功能,如能够精确调节延迟音频播放或直接控制MIDI合成器的能力。

Java 3D API、电话API和Vice API是具有与声音相关功能的其他Java API。虽然不是必需的,但这些API的任何实现都可以在内部使用Java音频API的实现。

Java音频API的包

Java音频API支持数字音频和MIDI数据。这两个关键功能元素分别在不同的包中提供:

  • javax.sound.sampled - 指定了用于捕获、混合和播放数字音频的接口。

  • javax.sound.midi - 指定了用于MIDI合成、序列和事件传输的接口。

什么是采样音频

数字音频数据也被Java Sound API称为采样音频。它是由javax.sound.sampled包处理的。信号被捕捉成一系列样本。声波构成了音频信号。模拟到数字转换器将麦克风产生的声学信号产生的模拟电信号转换成采样的数字形式。下图显示了音频录音的简短片段。

Java 音频API

这里呈现的视觉表示告诉我们如何准确地在数字系统中捕捉声音。具体来说,根据此图表描述-时间从左到右沿着X轴流动,Y轴上的音频级别对应声压(振幅)。可见的红色数据点表示离散样本产生的数字音频信号,它们以每个预定间隔定期捕捉模拟声波测量值,放慢每个峰值或谷值,从而得到精确记录的数据点,以便与位于其上方的+V值以及位于红线下方的其负对应部分的数据点进行分析,并赋予意义。水平中心线表示零振幅。采样率决定时间分辨率,量化或振幅分辨率则决定用于表示每个样本的位数。用于比较的是存储在CD上的音频以每秒44,100个样本进行采样,并以16位每样本的表示方式。

这里的短语“采样音频”用得相当宽泛。声波可能以模拟形式保存,并以规则的间隔采样。然而,Java Sound API将“采样音频”视为与“数字音频”相同。

通常,计算机上的采样音频是从声音录音中取得的,尽管声音也可能是人工产生的(例如,模拟触摸音调电话噪音)。词组“采样音频”描述的是数据类型,而不是数据来源。

音频配置

Java Sound API旨在允许在系统上安装多种类型的音频组件,并通过API访问它们;它不假设特定的音频硬件设置。Java Sound API使得混合多个音频流以及从声卡中输入和输出(例如录制和播放声音文件)成为可能。下图显示了典型的音频架构示意图。

Java 音频API

在此示意图中,混音是由程序提供的,并通过带有多个输入和输出端口的设备(例如声卡)实现。数据可以从文件中读取,通过网络传输,由应用程序即时创建,或由MIDI合成器合成并发送到混音器。

(稍后将介绍的javax.sound.midi包为合成器提供了Java语言接口)。混音器从其所有音频输入中创建的单一流可以传送到输出设备进行渲染。

MIDI是什么

MIDI数据可以被视为生成声音的配方,特别是音乐声音,而不是采样音频,后者是声音本身的直接描述。与音频数据不同,MIDI数据并不直接描述声音。它描述的是对合成器产生的声音产生影响的事物。图形用户界面的键盘和鼠标事件与MIDI数据是可比较的。

当涉及到MIDI时,事件可以与键盘动作以及不同踏板、滑杆、开关和旋钮上的键盘动作相比较。这些活动并不总是需要从物理乐器开始,它们可以在软件中模拟并保存为MIDI文件。音序器是一种可以生成、修改和执行这些文件的程序。音序器可以将其MIDI事件传递给许多计算机声卡中的MIDI可控音乐合成器电路。

此外,合成器可以完全以软件形式实现。合成器通过解释其接收到的MIDI信号来生成音频输出。与语音相比,MIDI数据通常用于创建音乐声音。也可以使用MIDI合成器产生不同的音效。

MIDI配置

基于Java Sound API的潜在MIDI配置的关键要素之间的功能链接如下图所示。(和音频一样,Java Sound API使安装和连接各种MIDI软件设备成为可能。一个可能的情况是上面显示的设置)。箭头显示了数据在组件之间移动的方向。如图中右下角的键所示,信息可以是一种常见的文件格式。

Java 音频API

在这个示例中,应用程序从磁盘上加载一个保留为常见的MIDI文件的乐谱(图的左侧),以准备音乐表演。典型的MIDI文件中的每个音轨是一组带有时间标记的MIDI事件。大多数事件与音乐音符(音高和节奏)类似。软件音序器读取此MIDI文件,然后“执行”它。将MIDI数据发送到另一个设备(例如内部或外部合成器)允许音序器执行其音乐。合成器本身可以读取包含模拟特定乐器声音指令的声音库文件。如果没有,合成器将使用当前加载到合成器中的任何乐器声音来播放MIDI文件中指定的音符。

使用Java Sound API的示例

Java Sound API可解决以下所有问题−

SEQUENCER >> SEQUENCE >> TRACK >> MIDI EVENTS

方法

  • 步骤1 - 获得一个序列器,然后启动它
// make a sequencer named play and open it 
Sequencer play = MIDISystem.getSequencer():
play.open();
  • 步骤2 - 创建一个新序列
// make a new sequence
Sequence seq = new Sequence (Sequence.PPQ, 4);
  • 步骤3 - 在序列中获取一个新的曲目
// creating a new track
Track t = seq.createTrack();
  • 步骤4 - 将MIDIEVENTS分布在整个音轨上
// filing the track with MIDIEVENTS and
// giving the Sequence to the Sequencer

t.add(myMIDIEvent1); 
play.setSequence(seq);

// play it using start
play.start();

示例

// Java Program to Illustrate Java Sound API

import javax.sound.midi.*;
public class Example {

   public static void main (String [] args) {
      Example minimusic = new Example ();
      minimusic.play();
      System.out.print("Successfully compiled and executed");
   }

   // Method 2
   public void play() {
      try {
         Sequencer player = MidiSystem.getSequencer();
         play.open();

         Sequence seq = new Sequence(Sequence.PPQ, 4);
         Track track = seq.createTrack();
         ShortMessage a = new ShortMessage();
         a.setMessage(144, 1, 44, 100);

         MidiEvent noteOn = new MidiEvent(a, 1);
         track.add(noteOn);

         ShortMessage b = new ShortMessage();
         b.setMessage(128, 1, 44, 100);
         MidiEvent noteOff = new MidiEvent(b, 16);
         track.add(noteOff);

         play.setSequence(seq);

         play.start();
      }

      catch (Exception ex) {
         ex.printStackTrace();
      }
   }
}

输出

Successfully compiled and executed

结论

Java Sound API是一个低级API。它用于影响和控制声音媒体和MIDI数据的输入和输出。它提供对功能的显式控制。该包满足了各种应用程序开发者的需求。它分为两个包,具体为javax.sound.sampled和javax.sounds.midi。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程